Using Wayland: Difference between revisions

From DcSharedWiki
(11 intermediate revisions by the same user not shown)
Line 12: Line 12:


=== [https://swaywm.org/ Sway] ===
=== [https://swaywm.org/ Sway] ===
(updated for 1.5)
(updated for 1.5.1)


Status: very active project, created a wlroots framework to share with other compositors, version 1.1+ is usable with some glitches, seamless xwayland integration
Status: very active project, created a wlroots framework to share with other compositors, version 1.1+ is usable with some glitches, seamless xwayland integration
Line 19: Line 19:


Notable problems:
Notable problems:
* [https://github.com/swaywm/sway/issues/3395 damage tracking issues with xwayland] (ugly but not not annoying with most applications)
* copy-paste problems between Wayland and XWayland ([https://github.com/swaywm/sway/issues/5852 segfaults], [https://github.com/swaywm/wlroots/issues/2425 freezes], or [https://github.com/swaywm/sway/issues/4007 simply stops working])
* 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)
* 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)
* [https://github.com/swaywm/sway/issues/4078 rendering issues] (most glitches do not have any real impact; also less problems since 1.5)
* [https://github.com/swaywm/sway/issues/2425 dialogs hidden under their parent] (annoying with specific applications relying on child windows but most don't and there is a workaround)
* [https://github.com/swaywm/sway/issues/2425 dialogs hidden under their parent] (annoying with specific applications relying on child windows but most don't and there is a workaround)
* contextual popup or menu not working yet (affects tray and IME completion selection)

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 [https://github.com/swaywm/sway/issues/3799 tray support is limited] (icon may be missing, contextual menu not working, WIP)
* [https://github.com/Alexays/Waybar.git 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)


=== [http://way-cooler.org/ Way Cooler] (spiritual successor of AwesomeWM) ===
=== [http://way-cooler.org/ Way Cooler] (spiritual successor of AwesomeWM) ===
Line 52: Line 35:
** packaged in Debian
** packaged in Debian
** Status: works fine to run Wayland sessions but runs on X11 itself
** Status: works fine to run Wayland sessions but runs on X11 itself

=== Bars ===

* 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 [https://github.com/swaywm/sway/issues/3799 tray support is limited] (icon may be missing, contextual menu not working, WIP)
* [https://github.com/Alexays/Waybar.git Waybar] (more fancy bar)
** packaged in Debian
** Status: tested only a short time, tray working better than swaybar, [https://github.com/Alexays/Waybar/issues/668 the date module is not compiled])

=== Session ===

* 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


=== Application Menu Runner ===
=== Application Menu Runner ===
Line 82: Line 83:
=== Input Method ===
=== 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:
* fcitx5:
** has Wayland support
** has Wayland support
** packaged in Debian but [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=974894 mozc binding is missing]
** packaged in Debian (now includes the [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=974894 mozc binding] patch)
** Status: works fine with both Wayland and X11 applications but selection popup does not show up ([https://github.com/swaywm/wlroots/pull/2550 input_method_v2 popups] support is WIP)
** Status: I cannot use it without Mozc, waiting
* 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)
* ibus:
* ibus:
** packaged in Debian
** packaged in Debian
Line 118: Line 119:
** packaged in Debian
** packaged in Debian
** Status: works fine
** Status: works fine
* xdg-desktop-portal-wlr: (screenshot, screencast, and possibly remote-desktop)
** packaged in Debian
** Status: [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/Screencast-Compatibility experimental], requires pipewire >=0.3 and FF >=84; tested screencast with FF and GMeet, it worked but takes a few seconds to initialize and sometimes hang (switching presentation mode off and on worked without having to restart the service)


=== Screen Brightness ===
=== Screen Brightness ===
Line 137: Line 141:
** Status: works fine on XWayland, [https://bugs.chromium.org/p/chromium/issues/detail?id=578890 native Wayland support is WIP]
** Status: works fine on XWayland, [https://bugs.chromium.org/p/chromium/issues/detail?id=578890 native Wayland support is WIP]


=== Mail ===
=== Electron Apps ===


The [https://www.electronjs.org/ Electron]framework is based on Chromium/Ozone which now has a Wayland backend. [https://github.com/electron/electron/issues/10915 Support in Electron is WIP] and beta 12 enables Ozone.
* thunderbird:
** packaged in Debian
** Status: works fine on XWayland, works ok now on Wayland but [https://bugzilla.mozilla.org/show_bug.cgi?id=635134 officially it is still WIP]

=== Misc ===


* signal-desktop:
* signal-desktop:
** not packaged in Debian but upstream provides a package for Ubuntu that works on Debian
** not packaged in Debian but upstream provides a package for Ubuntu that works on Debian
** Status: works fine on XWayland, [https://github.com/signalapp/Signal-Desktop/issues/3411 native Wayland support is missing] but support in Electron is now beta so it should be there in 2021
** Status: works fine on XWayland, [https://github.com/signalapp/Signal-Desktop/issues/3411 native Wayland support is WIP]
* [https://vscodium.com/ VSCodium] (OpenSource distribution of Visual Studio Code without telemetry and tracking)
** not packaged in Debian but upstream provides a working package
** Status: works fine on XWayland, [https://github.com/microsoft/vscode/issues/109176 native Wayland support is WIP]

=== Misc Apps ===

* Emacs:
** packaged in Debian
** Status: works fine on XWayland, has little chances to work on Wayland as it is (since [https://emacshorrors.com/posts/psa-emacs-is-not-a-proper-gtk-application.html it is not a real GTK application)
* libreoffice:
** packaged in Debian
** Status: works fine on XWayland, native Wayland support if using the GTK3 backend (with the extra ''libreoffice-gtk3'' package) and working well too
* [https://github.com/Blub/netevent netevent]: (Input-Event device cloning utility)
* [https://github.com/Blub/netevent 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
** 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 [https://github.com/Blub/netevent/pull/15 this update though])
** not packaged in Debian but materials provided upstream (needs [https://github.com/Blub/netevent/pull/15 this update though])
** Status: works fine
* thunderbird:
** packaged in Debian
** Status: works fine on XWayland, works ok now on Wayland but [https://bugzilla.mozilla.org/show_bug.cgi?id=635134 officially it is still WIP]
* wl-gammactl:
** not packaged in Debian
** Status: works fine
* wl-clipboard:
** packaged in Debian
** Status: works fine
** Status: works fine


Line 161: Line 182:
Currently this works fine (in ''~/.xsessionrc''):
Currently this works fine (in ''~/.xsessionrc''):
# ensure GUI frameworks use Wayland
# ensure GUI frameworks use Wayland
# breaks a few apps or behaviors (Signal…)
# breaks a few apps or behaviors (Signal, Chromium, VSCodium, Emacs…)
export GDK_BACKEND=wayland
export GDK_BACKEND=wayland
export CLUTTER_BACKEND=wayland
export CLUTTER_BACKEND=wayland

Revision as of 19:02, 25 January 2021

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.1)

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:

  • copy-paste problems between Wayland and XWayland (segfaults, freezes, or simply stops working)
  • 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)
  • dialogs hidden under their parent (annoying with specific applications relying on child windows but most don't and there is a workaround)
  • contextual popup or menu not working yet (affects tray and IME completion selection)

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

Bars

  • 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)

Session

  • 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

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

  • fcitx5:
    • has Wayland support
    • packaged in Debian (now includes the mozc binding patch)
    • Status: works fine with both Wayland and X11 applications but selection popup does not show up (input_method_v2 popups support is WIP)
  • 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)
  • 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:

Terminal

  • foot: (native Wayland support)
    • packaged in Debian
    • Status: works fine but lacked IME support; it was recently fixed upstream, now waiting for a release and new package
  • 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
  • xdg-desktop-portal-wlr: (screenshot, screencast, and possibly remote-desktop)
    • packaged in Debian
    • Status: experimental, requires pipewire >=0.3 and FF >=84; tested screencast with FF and GMeet, it worked but takes a few seconds to initialize and sometimes hang (switching presentation mode off and on worked without having to restart the service)

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

Electron Apps

The Electronframework is based on Chromium/Ozone which now has a Wayland backend. Support in Electron is WIP and beta 12 enables Ozone.

  • signal-desktop:
    • not packaged in Debian but upstream provides a package for Ubuntu that works on Debian
    • Status: works fine on XWayland, native Wayland support is WIP
  • VSCodium (OpenSource distribution of Visual Studio Code without telemetry and tracking)

Misc Apps

  • Emacs:
  • libreoffice:
    • packaged in Debian
    • Status: works fine on XWayland, native Wayland support if using the GTK3 backend (with the extra libreoffice-gtk3 package) and working well too
  • 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
  • thunderbird:
  • wl-gammactl:
    • not packaged in Debian
    • Status: works fine
  • wl-clipboard:
    • packaged in Debian
    • 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
# breaks a few apps or behaviors (Signal, Chromium, VSCodium, Emacs…)
export GDK_BACKEND=wayland
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
# enable Wayland on Mozilla apps
export MOZ_ENABLE_WAYLAND=1
export MOZ_WEBRENDER=1

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).

Readings