Building Budgie Desktop
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.
Wayland-related dependencies
Budgie 10.10 relies on a range of Wayland protocols, such as:
- ext-workspace-v1
- wlr-foreign-toplevel-management-unstable-v1
- wlr-layer-shell-unstable-v1
- wlr-output-management-unstable-v1
- xdg-output-unstable-v1
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.
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.
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:
- 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-utilson Fedora,mesa-utilson Arch and Debian/Ubuntu,mesa-demoson 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=falseto 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, andpsutilmodules, 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-clion Debian/Ubuntu) - glycin loaders, used by gdk-pixbuf to load images (provided by
glycinon Arch and Solus,glycin-loaderson 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-commonon 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)systemdmodules, 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-daemonandoo7-portal) as the Secret Service provider, when building with-Dwith-oo7=true
Installing Build Dependencies
- Arch
- Debian / Ubuntu
- Fedora non-Atomic
- Solus
- All Other Distributions
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
These packages are available in Debian testing and Ubuntu 26.04 or later.
sudo apt install \
build-essential \
curl \
gammastep \
gettext \
git \
gnome-settings-daemon-dev \
gobject-introspection \
grim \
gsettings-desktop-schemas-dev \
gtk-doc-tools \
gtklock \
libaccountsservice-dev \
libasound2-dev \
libcairo2-dev \
libcanberra-dev \
libcanberra-gtk3-dev \
libgee-0.8-dev \
libgio-2.0-dev \
libgirepository-2.0-dev \
libgirepository1.0-dev \
libgnome-desktop-3-dev \
libgstreamer1.0-dev \
libgtk-3-dev \
libgtk-layer-shell-dev \
libgtop2-dev \
libnotify-dev \
libpeas-2-dev \
libpolkit-agent-1-dev \
libpolkit-gobject-1-dev \
libpulse-dev \
libupower-glib-dev \
libxfce4windowing-0-dev \
mesa-utils \
meson \
ninja-build \
python3-dbus \
python3-gi \
python3-psutil \
python3-systemd \
sassc \
slurp \
swaybg \
swayidle \
uuid-dev \
valac \
wlopm
sudo dnf install \
accountsservice-devel \
alsa-lib-devel \
cairo-devel \
egl-utils \
gammastep \
gcc \
gettext \
git-core \
glib2-devel \
gnome-desktop3-devel \
gnome-settings-daemon-devel \
gobject-introspection-devel \
grim \
gsettings-desktop-schemas-devel \
gstreamer1-devel \
gtk-doc \
gtk-layer-shell-devel \
gtk3-devel \
gtklock \
libcanberra-devel \
libgee-devel \
libgtop2-devel \
libnotify-devel \
libpeas-devel \
libuuid-devel \
libxfce4windowing-devel \
meson \
ninja-build \
oo7-daemon \
oo7-portal \
polkit-devel \
pulseaudio-libs-devel \
python3-dbus \
python3-gobject-base \
python3-psutil \
python3-systemd \
sassc \
slurp \
swaybg \
swayidle \
upower-devel \
vala \
wlopm \
xdg-desktop-portal-gtk \
xdg-desktop-portal-wlr \
xorg-x11-server-Xwayland
sudo eopkg it -c system.devel
sudo eopkg it \
accountsservice-devel \
alsa-lib-devel \
ccache \
gammastep \
git \
glib2-devel \
gnome-settings-daemon-devel \
gobject-introspection-devel \
grim \
gsettings-desktop-schemas-devel \
gstreamer-1.0-devel \
gtk-doc \
gtklock \
libcairo-devel \
libcanberra-devel \
libgee-devel \
libgnome-desktop-devel \
libgtk-3-devel \
libgtk-layer-shell-devel \
libgtop-devel \
libnotify-devel \
libpeas-2-devel \
libvala-devel \
libxfce4windowing-devel \
mesa-demos \
polkit-devel \
pulseaudio-devel \
python-dbus \
python-gobject \
python-psutil \
python-systemd \
sassc \
slurp \
swaybg \
swayidle \
upower-devel \
util-linux-devel \
vala \
wlopm \
xdg-desktop-portal-gtk \
xdg-desktop-portal-wlr
Install your distribution's packages for the pkg-config dependencies and tools listed under "Build Dependencies" above.
Cloning the repository
git clone https://github.com/buddiesofbudgie/budgie-desktop.git
cd budgie-desktop
git submodule update --init
Configuring
- Arch
- Debian / Ubuntu
- Fedora non-Atomic
- Solus
- All Other Distributions
meson setup build --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
Debian and Ubuntu do not ship Vala bindings for libxfce4windowing, so add the ones from Debian's Budgie Desktop packaging first:
curl -fsSL https://raw.githubusercontent.com/ubuntubudgie/budgie-desktop-debian/debian/latest/debian/patches/lfwvapi.patch | patch -p1
meson setup build --prefix=/usr --libdir=/usr/lib
meson setup build --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/libexec -Dwith-oo7=true
Solus has special requirements and mandates the use of stateless XDG paths, as well as using the OS default CFLAGS:
meson setup build --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc -Dwith-stateless=true --buildtype=plain
meson setup build --prefix=/usr --sysconfdir=/etc
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.
meson devenv support is available on the main branch and in releases after 10.10.3.