Skip to main content
Version: Latest Stable (Wayland): Budgie 10.10

Building Budgie Desktop

Important Information

Budgie 10.10 is Wayland-only and does not support X11. Budgie 10.10 is the last "10 series" release of Budgie Desktop, with Budgie 10 entering maintenance mode as of this release. Support for Budgie 10.10 will be minimal as we work on Budgie 11.

Budgie 10.10 relies on a range of Wayland protocols, such as:

This is not an exhaustive list, but notable protocols used by Budgie Desktop via:

Compositor Recommendations​

In practice, this will mean you will likely end up using a wlroots-based compositor, such as labwc. It is an explicit goal for Budgie 11 to support more compositors (such as Mir-based compositors and possibly Kwin).

However, for now the recommendation is to use labwc (>= 0.9.2) and this is what Budgie Desktop 10.10 defaults to.

labwc bridge

Budgie Desktop offers a "labwc bridge" out-of-the-box (and is ran automatically at login), which copies over our own labwc configuration into ~/.config/budgie-desktop/labwc (technically supporting XDG_CONFIG_HOME as well). This means it won't conflict with any existing configurations. This configuration enables a range of features, such as:

  • Default keyboard shortcuts for common actions (opening Budgie Menu, Raven, Budgie Run Dialog, workspace switching, screenshotting, etc)
  • Input acceleration (touchpad and non-touchpad)
  • Setting some default theming (fonts, dropshadows, titlebar layout)
  • Window rules for certain windows (e.g. desktop, power dialog, budgie-daemon)
  • Window snapping
  • Window switcher w/ thumbnails

Layer Shell​

Budgie 10.10 relies on the wlr-layer-shell-unstable-v1 protocol for specifying the anchoring, exclusion zones, layer type, and interactivity for: Budgie panels, Raven, and our popover windows.

Warning

Without support for this protocol, you should not expect correct positioning.

Supplemental Tooling​

Budgie Desktop 10.10 requires a few supplemental tools to be installed to maximize functionality. These are:

  • A session locker supporting ext-session-lock-v1, for example:
    • gtklock - This may be most favorable for distributors of Budgie Desktop as it offers a familiar screen locking experience to previously used screen lockers (budgie-screensaver / gnome-screensaver) and those on other desktop environments.
    • swaylock
  • budgie-desktop-services: This is used to provide supplemental services for Budgie Desktop functionality. For Budgie 10.10, this currently means output management (e.g. enabling/disabling outputs, setting display modes, etc).
  • gammastep: This is used for adjusting the display's color temperature.
  • grim: This is used for grabbing images from the compositor for screenshot functionality.
  • slurp: This is used for selecting areas for region-based screenshot functionality.
  • swaybg: This is used for setting the background image.
  • swayidle: This is used for idle management.
  • xdg-desktop-portal-gtk: This is used as a portal backend for most functionality.
  • xdg-desktop-portal-wlr: This is used as a portal backend for Screenshot and ScreenCase functionality.
  • wdisplays: This is a graphical application for configuring displays. Persistence of display configuration is then handled by the Budgie Desktop Services.
  • wlopm: This is used for aiding in output power management during system idling.
  • eglinfo (provided by egl-utils on Fedora, mesa-utils on Arch and Debian/Ubuntu, mesa-demos on Solus): This is used for querying EGL capabilities.

Build Dependencies​

budgie-desktop has a number of build dependencies that must be present before attempting configuration. The names are different depending on distribution. The following is a list of pkg-config dependencies currently required to build Budgie from source.

  • accountsservice >= 0.6.55
  • alsa
  • cairo >= 1.15.10
  • gee-0.8 >= 0.20.0
  • gio-unix-2.0 >= 2.64.0
  • girepository-2.0
  • glib-2.0 >= 2.64.0
  • gnome-desktop-3.0 >= 40.0
  • gnome-settings-daemon >= 40.0
  • gobject-introspection-1.0
  • gsettings-desktop-schemas >= 40.0
  • gstreamer-1.0
  • gtk+-3.0 >= 3.24.0
  • gtk-layer-shell-0 >= 0.8.0
  • libcanberra
  • libcanberra-gtk3
  • libgtop-2.0
  • libnotify >= 0.7
  • libpeas-2
  • libpulse >= 12.99.3
  • libpulse-mainloop-glib
  • libxfce4windowing-0 >= 4.20.4
  • polkit-agent-1 >= 0.105
  • polkit-gobject-1 >= 0.105
  • upower-glib >= 0.99.14
  • uuid
  • vapigen >= 0.52.5

The following tools are also required:

  • A C compiler
  • gettext
  • git
  • gtk-doc (pass -Dwith-gtk-doc=false to skip building the API documentation)
  • meson and ninja
  • sassc (to build theming)
  • vala

By default, configuring also checks for the tools Budgie Desktop needs at run-time, and fails if any are missing:

  • eglinfo, gammastep, grim, slurp, swaybg, swayidle, and wlopm
  • gtklock or swaylock
  • Python 3 with the dbus, gi, and psutil modules, and the GLib, Gio, and Pango GObject introspection data (for the labwc bridge)

The labwc bridge also uses Python's systemd module to log to the journal when it is installed. Pass -Dwith-runtime-dependencies=false to skip these checks, such as when building a distribution package.

Control Center​

Ensure that Budgie Desktop 10.10 is shipped alongside Budgie Control Center 2.0.0 or later.

Desktop Icons​

If you are shipping Budgie Desktop with Budgie Desktop View for desktop icon support, ensure you are on release 10.10.0 or later.

Nemo Desktop is supported as well.

Run-time dependencies​

In addition to the tools listed under "Supplemental Tooling" above, budgie-desktop requires the following to be installed:

  • budgie-session
  • dconf (provided by dconf-cli on Debian/Ubuntu)
  • glycin loaders, used by gdk-pixbuf to load images (provided by glycin on Arch and Solus, glycin-loaders on Debian/Ubuntu and Fedora)
  • gnome-settings-daemon, whose components are started with the Budgie session
  • gsettings-desktop-schemas
  • labwc (>= 0.9.2)
  • mutter's GSettings schemas (provided by mutter-common on Debian/Ubuntu and Fedora), which budgie-daemon and the labwc bridge read
  • network-manager-applet, which is autostarted in the Budgie session for network management
  • Python 3 with the dbus, gi, psutil, and (optionally) systemd modules, for the labwc bridge

The following are recommended:

  • power-profiles-daemon, for switching power profiles from the power indicator
  • switcheroo-control, for launching applications on the discrete GPU on dual-GPU systems
  • oo7 (oo7-daemon and oo7-portal) as the Secret Service provider, when building with -Dwith-oo7=true

Installing Build Dependencies​

sudo pacman -S --needed \
accountsservice \
alsa-lib \
base-devel \
cairo \
gammastep \
git \
glib2-devel \
gnome-desktop \
gnome-settings-daemon \
gobject-introspection \
grim \
gsettings-desktop-schemas \
gstreamer \
gtk-doc \
gtk-layer-shell \
gtk3 \
gtklock \
libcanberra \
libgee \
libgtop \
libnotify \
libpeas-2 \
libpulse \
libxfce4windowing \
mesa-utils \
meson \
polkit \
python-dbus \
python-gobject \
python-psutil \
python-systemd \
sassc \
slurp \
swaybg \
swayidle \
upower \
util-linux-libs \
vala \
wlopm \
xdg-desktop-portal-gtk \
xdg-desktop-portal-wlr \
xorg-xwayland

Cloning the repository​

git clone https://github.com/buddiesofbudgie/budgie-desktop.git
cd budgie-desktop
git submodule update --init

Configuring​

meson setup build --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib

Building​

ninja -j$(($(getconf _NPROCESSORS_ONLN)+1)) -C build

Note: When building a distro package, add --buildtype=plain to your meson setup options. Meson's default build type adds its own debug and optimization flags; with plain, it adds none, so the compiler only receives the flags your packaging sets, such as CFLAGS and LDFLAGS. Use your distribution's paths for options like --prefix, --sysconfdir, and --libexecdir, or your distribution's meson macro if it has one (such as %meson on Fedora, which already sets --buildtype=plain).

Installing / Validating​

To install your build:

sudo ninja install -C build

To test changes without installing them, run components from the build directory with meson devenv. This points Budgie Desktop at the applets and Raven widgets in your build directory, so your installed Budgie Desktop is left untouched. For example, to replace the running panel:

meson devenv -C build budgie-panel --replace &

The same works for other components, such as budgie-daemon --replace. Changes to GSettings schemas still need to be installed before they take effect.

Info

meson devenv support is available on the main branch and in releases after 10.10.3.