[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
howtos:window_managers:running_xorg_environments_in_xwayland [2024/01/21 08:10 (UTC)] โ€“ [Caveats] Fix markdown pghvlaanshowtos:window_managers:running_xorg_environments_in_xwayland [2024/01/25 11:06 (UTC)] (current) โ€“ [Caveats] Wrong file path. pghvlaans
Line 1: Line 1:
 +====== Running Xorg Environments in Xwayland ======
 +This is a how-to guide for running an Xorg window manager or desktop environment in a Wayland compositor((In Wayland terms, the "compositor" is the program responsible for displaying and managing windows. KWin is the only Wayland compositor included in Slackware 15.0.)) on Slackware 15.0 and beyond.
  
 +At the time of writing (December 2023), this is a purely academic question for most -- if not all -- users. As both KDE Plasma and Xfce continue to move in the direction of Wayland, however, it is not impossible that full X servers become unavailable on Slackware in future years. Xwayland provides a workaround, if an imperfect one. The process of running an Xorg environment from inside a rootful(("Rootful" here means that the Wayland compositor does not manage the Xwayland window.)) Xwayland session is straightforward:
 +
 +  * Choosing a Wayland compositor \\
 +  * Configuration \\
 +  * Running the Wayland compositor \\
 +  * Starting the Xorg environment on Xwayland \\
 +
 +All outside packages mentioned here can be found on [[https://slackbuilds.org|SlackBuilds Online]].
 +
 +> Being able to read xorg.conf is not one my goals, nor achieving a bug-for-bug compatibility with Xorg - Xwayland with !901 (merged) allows to run a full X11 desktop, even the most legacy ones  (I demoed it internally here using CDE from an XDMCP remote connection for the fun ๐Ÿ˜‰).((Olivier Fourdan, xserver issue [[https://gitlab.freedesktop.org/xorg/xserver/-/issues/1332#note_1431672|#1332]]))
 +
 +==== Choosing a Wayland compositor ====
 +The following considerations are important in choosing a Wayland compositor to run the Xwayland server:
 +
 +  * Lightweight
 +  * Stacking window management
 +<note tip>The following two conditions can be ignored if the Xwayland version exceeds 22.1.3.</note>
 +  * Able to suppress client-side decorations
 +  * Compatible with [[https://slackbuilds.org/repository/15.0/desktop/wlroots/|wlroots]] for [[https://slackbuilds.org/repository/15.0/desktop/wlr-randr/|wlr-randr]], a drop-in xrandr replacement.
 +
 +This how-to will use [[https://slackbuilds.org/repository/15.0/desktop/labwc/|labwc]] as an example. labwc is a lightweight, wlroots-based compositor with OpenBox-style configuration.
 +
 +==== General Configuration ====
 +General configuration requirements are limited. It is only necessary to ensure that Xwayland-capable programs open under Xwayland rather than Wayland, and that startx does something productive.
 +
 +=== Forcing Xwayland ===
 +Any program opening in Wayland mode will be managed by the Wayland compositor directly. This can result in the appearance of poorly-behaved windows with incorrect decoration and the non-appearance of system tray items. Place the following lines in ''/etc/environment''((Any file that controls the user profile can be used.))  to control gtk and qt applications :
 +
 +  GDK_BACKEND=x11
 +  QT_QPA_PLATFORM=xcb
 +
 +For X keyboard maps other than US, it may also be necessary to specify a keymap here:
 +
 +  XKB_DEFAULT_LAYOUT=jp    # e.g.
 +
 +=== startx ===
 +Instructions for starting an X session should be contained in ''$HOME/.xinitrc'' because startx will launch Xwayland. xwmconfig can set up an xinitrc file for the preferred Xorg environment if need be.
 +
 +==== Configuring labwc ====
 +=== For Slackware 15.0 ===
 +Create an autostart file at ''$HOME/.config/labwc/autostart'' to launch an Xwayland server with startx:
 +
 +  #!/bin/sh
 +  
 +  DISPLAY=:1 startx -- /usr/bin/Xwayland
 +
 +This variant closes labwc after quitting the Xorg environment to return cleanly to tty or the display manager:
 +
 +  #!/bin/sh
 +  
 +  DISPLAY=:1 startx -- /usr/bin/Xwayland &
 +  wmpid=$!
 +  wait $wmpid
 +  pkill -x labwc
 +
 +To stop labwc from decorating the Xwayland server window, write the following to a file at ''$HOME/.config/labwc/rc.xml'':
 +
 +  <labwc_config>
 +    <core>
 +      <decoration>client</decoration>
 +    </core>
 +  </labwc_config>
 +  
 +If auto-starting xset tends to fail, try adding a few seconds of sleep before startx.
 +
 +=== For Other Versions ===
 +These changes reflect post-15.0 Xwayland development:
 +
 +  * Rootful Xwayland windows are no longer decorated, so ''rc.xml'' is unnecessary. 
 +  * The initial geometry of the Xwayland server must be specified. Replace the Xwayland line in the autostart script above with the following:
 +
 +  DISPLAY=:1 startx -- /usr/bin/Xwayland -fullscreen -geometry 1920x1200
 +
 +Ideally, the ''geometry'' option will match the dimensions of the monitor. xrandr can change the resolution afterwards.
 +==== Running ====
 +The Wayland compositor should be known to the display manager for runlevel 4 users, assuming that its package includes a desktop file. Runlevel 3 users can run the Wayland compositor directly from the command line:
 +
 +  $ /usr/bin/labwc
 +
 +Once the autostart script has started the Xorg environment, the following commands can verify that the process worked:
 +  $ pgrep Xorg
 +  $ pgrep Xwayland
 +If there is at least one Xwayland process and no Xorg process, feel free to take a screenshot (optional) and tell your friends (not advised).
 +
 +==== Caveats ====
 +The following caveats bear mentioning:
 +
 +  * Mouse pointer warping does not work. EdgeScroll in Fvwm is an example of an impacted feature.
 +  * xrandr is non-functional in Xwayland versions before 22.1.3, and an extra program such as wlr-randr would be needed for screen management. Effectively, this restricts the choice of compositor to those based on wlroots.
 +  * GPU memory usage is slightly higher relative to running an ordinary xserver.
 +  * Wayland-only programs and any other program that runs in Wayland mode will be managed by the Wayland compositor rather than the X11 environment.
 +  * Neither xinput nor synclient will work to adjust input device settings; instead, use the file ''$HOME/.config/labwc/rc.xml''. See the ''LIBINPUT'' section in labwc-config(5) for details.
 +  * If an input device does not work in the chosen Wayland compositor, running an Xwayland server will not cause it to start working.
 +  * xbacklight does not work; echoing values to ''/sys/class/backlight/*/brightness'' may be a workaround, depending on the system.
 +  * If audio sharing fails, try using pipewire with [[https://slackbuilds.org/repository/15.0/audio/wireplumber/|wireplumber]]((No separate package is needed on post-15.0 systems.)).
 +
 +The above list is non-exhaustive.
 +
 +====== Sources ======
 +  * Xwayland(1)
 +  * labwc(1)
 +  * labwc-config(5)
 +  * [[https://gitlab.freedesktop.org/xorg/xserver/-/issues/1332#note_1431672|xserver, Issue #1173: Xwayland: Improve rootfull mode for legacy X11 environments]]
 +
 +<!-- Please do not modify anything below, except adding new tags.-->
 +<!-- You must remove the tag-word "template" below before saving your new page -->
 +{{tag>howtos "window managers" "desktop environments" wayland xwayland xorg x11 labwc}}
 howtos:window_managers:running_xorg_environments_in_xwayland ()