Using Wayland
Introduction
The goal of this page is to relate experiences using Wayland working implementations, software replacement from the X11 world and so on.
Duck: please note I'm a former AwesomeWM user thus I'm not looking into major desktop implementations like GNOME or KDE but I'm trying to mix interesting pieces to fit my needs better. You can have a look at my configuration in my repository (Ansible rules).
Compositors
There's many Wayland compositor projects around but a lot are very experimental and many even already abandoned.
Working or prospective compositors follows.
Sway
(updated for 1.5)
Status: very active project, created a wlroots framework to share with other compositors, version 1.1+ is usable with some glitches, seamless xwayland integration
Packaging: in Debian with wlroots and swaybg
Notable problems:
- damage tracking issues with xwayland (ugly but not not annoying with most applications)
- games under Wine may hang if run fullscreen and switching workspace (but windowed using the full screen size often works; using a virtual desktop is also an option which seems to always work)
- rendering issues (most glitches do not have any real impact; also less problems since 1.5)
- dialogs hidden under their parent (annoying with specific applications relying on child windows but most don't and there is a workaround)
Tools:
- swaybar (display workspaces, current window title, tray, time, CPU infos…)
- integrated with sway, can use various commands to display stuff (i3status works fine and is packaged in Debian)
- Status: works fine but tray support is limited (icon may be missing, contextual menu not working, WIP)
- Waybar (more fancy bar)
- packaged in Debian
- Status: tested only a short time, tray working better than swaybar but contextual menu currently displayed in the middle of the screen (should be fixed if built with gtk-layer-shell but disabled in Debian for some reason and manual build failed with this option)
- swaylock (lock screen)
- packaged in Debian
- Status: works fine
- swayidle (run custom actions on idle and back from idle)
- packaged in Debian
- Status: works fine and handle various events
- remote control (not network transparency)
- integrated in sway
- Status: finished, untested (RDP backend replaced, need to have a deeper look)
Way Cooler (spiritual successor of AwesomeWM)
Status: was being rewritten on top of wlroots but was unfortunately abandoned at the beginning of 2020. I need some time to cope with the sadness and remove this entry.
Tools
Display Manager
- lightdm:
- packaged in Debian
- Status: works fine to run Wayland sessions but runs on X11 itself
Application Menu Runner
- wofi:
- packaged in Debian
- Status: works fine
- Usage: wofi --term=x-terminal-emulator
- j4-dmenu-desktop + bemenu:
- j4-dmenu-desktop only is packaged in Debian
- Status: works fine
- Usage: j4-dmenu-desktop --dmenu='bemenu --list 10 --wrap --ignorecase --no-overlap --prompt "Run:" --fn "pango:DejaVu Sans Mono 12"' --term=x-terminal-emulator
- dmenu:
- packaged in Debian (suckless-tools)
- Status: works fine but impossible to switch back to it if you loose focus (need to kill it in a term)
- Usage: dmenu_path | dmenu -p "Run:" -l 10 | xargs swaymsg exec
Notifications / Screen Overlay
- mako (notifications):
- packaged in Debian (mako-notifier)
- works fine
- wob (progressbar)
- packaged in Debian
- Status: works fine
- xfce4-notifyd (notifications):
- packaged in Debian
- Status: works fine but display in the middle of the screen thus not very practical
Input Method
- fcitx4:
- packaged in Debian
- Status: untouched config from X11 works but completion menu may not be displayed (it works on one machine and not another but I could not figure out why yet); running fcitx-autostart fixed it (you may need to ``killall fcitx`` first)
- fcitx5:
- has Wayland support
- packaged in Debian but mozc binding is missing
- Status: I cannot use it without Mozc, waiting
- ibus:
- packaged in Debian
- Status: ibus-wayland is available and was switched to using a newer version of the wayland input protocol (see Debian#905001 and linked upstream BR) but Sway use an even newer version (and this one only); anyway these changes are mostly untested so I would not have too much hopes; without this plugin I was not able to make completion work at all, even when forcing the engine on the command-line
So here are the various protocols:
- wl_input_method: seems it was an old draft added to Weston but not part of the Wayland protocols
- zwp_input_method_v1: current Wayland unstable protocol, implemented by Weston, ibus-wayland and fcitx5
- zwp_input_method_v2: WIP to be integrated in Wayland unstable protocols, implemented by Wlroots/Sway
Terminal
- termite: (native Wayland support)
- not packaged in Debian and requires a patched libvte
- Status: works fine
- xfce4-terminal:
- packaged in Debian
- Status: works fine
- terminator:
- packaged in Debian
- Status: works fine (with Sway >=1.1)
Screen Capture
- grim: (screenshot)
- packaged in Debian
- Status: works fine
Screen Brightness
- light:
- packaged in Debian
- Status: works fine
- brightnessctl:
- packaged in Debian (brightness-udev is needed to be usable as non-root)
- Status: works fine
Browser
- firefox:
- packaged in Debian
- Status: works fine on XWayland, seems to be ok so far on Wayland but officially it is still WIP
- chromium:
- packaged in Debian
- Status: works fine on XWayland, native Wayland support is WIP
Misc
- netevent (Input-Event device cloning utility)
- use case: if you wish to control several machines with the same keyboard and mouse, like with a KVM switch, then you can use devices from one to control others and switch machine using a special key
- not packaged in Debian but materials provided upstream (needs this update though)
- Status: works fine
Workarounds
GUI Frameworks
GTK uses GDK to draw and support for Wayland exists but a few things are missing thus it is not enabled by default. Other frameworks do not always enable Wayland by default depending on distro and version.
Currently this works fine (in ~/.xsessionrc):
# ensure GUI frameworks use Wayland #export GDK_BACKEND=wayland # breaks a few apps or behaviors (Firefox, Signal…) export CLUTTER_BACKEND=wayland export QT_QPA_PLATFORM=wayland-egl # breaks a few apps or behaviors (Unity…) #export SDL_VIDEODRIVER=wayland export ELM_DISPLAY=wl
Java Applications
Set _JAVA_AWT_WM_NONREPARENTING=1 in your environment (in ~/.xsessionrc) to fix behavior with menus and always on top issues (and maybe others).