2024-10-06
-
Trying to get full session in xwayland under WSL2.
-
https://gist.github.com/tdcosta100/e28636c216515ca88d1f2e7a2e188912
- On Debian (not Ubuntu), one needs
echo "LANG=en_US.UTF-8" | sudo tee -a /etc/default/locale -
Fix
/tmp/.X11-unix, which is mounted read-only by default.sudo systemctl edit --full --force wslg-fix.serviceThen, in the editor, enter the following:
[Service] Type=oneshot ExecStart=-/usr/bin/umount /tmp/.X11-unix ExecStart=/usr/bin/rm -rf /tmp/.X11-unix ExecStart=/usr/bin/mkdir /tmp/.X11-unix ExecStart=/usr/bin/chmod 1777 /tmp/.X11-unix ExecStart=/usr/bin/ln -s /mnt/wslg/.X11-unix/X0 /tmp/.X11-unix/X0 ExecStart=/usr/bin/chmod 0777 /mnt/wslg/runtime-dir ExecStart=/usr/bin/chmod 0666 /mnt/wslg/runtime-dir/wayland-0.lock [Install] WantedBy=multi-user.targetThen:
sudo systemctl enable wslg-fix.service -
Remove all references to Wayland. If not, some apps (like
gnome-terminal) will open outside xwayland.sudo systemctl edit user-runtime-dir@.serviceThen, in the editor, paste the following:
[Service] ExecStartPost=-/usr/bin/rm -f /run/user/%i/wayland-0 /run/user/%i/wayland-0.lock -
Change default startup-target. If not, a shell-window will appear every time you start your distro.
sudo systemctl set-default multi-user.target -
Back up original
Xorgscript:sudo mv /usr/bin/Xorg /usr/bin/Xorg.original -
Make new
/usr/bin/Xorg.Xwayland:#!/bin/bash for arg do shift case $arg in # Xwayland doesn't support vtxx argument. So we convert to ttyxx instead vt*) set -- "$@" "${arg//vt/tty}" ;; # -keeptty is not supported at all by Xwayland -keeptty) ;; # -novtswitch is not supported at all by Xwayland -novtswitch) ;; # other arguments are kept intact *) set -- "$@" "$arg" ;; esac done # Check if the runtime dir is present, and create it if not if [ ! -d $HOME/runtime-dir ] then mkdir $HOME/runtime-dir ln -s /mnt/wslg/runtime-dir/wayland-0 /mnt/wslg/runtime-dir/wayland-0.lock $HOME/runtime-dir/ fi # Point the XDG_RUNTIME_DIR variable to $HOME/runtime-dir export XDG_RUNTIME_DIR=$HOME/runtime-dir # Find an available display number for displayNumber in $(seq 1 100) do [ ! -e /tmp/.X11-unix/X$displayNumber ] && break done # Here you can change or add options to fit your needs command=("/usr/bin/Xwayland" ":${displayNumber}" "-geometry" "1920x1080" "-fullscreen" "$@") systemd-cat -t /usr/bin/Xorg echo "Starting Xwayland:" "${command[@]}" exec "${command[@]}"Then:
sudo chmod 0755 /usr/bin/Xorg.Xwayland sudo ln -sf Xorg.Xwayland /usr/bin/XorgThat last step might need to be repeated after running
aptto update. -
Configure resolution of monitor:
mkdir -p ~/.config vim ~/.config/monitors.xmlPaste this:
<monitors version="2"> <configuration> <logicalmonitor> <x>0</x> <y>0</y> <scale>1</scale> <primary>yes</primary> <monitor> <monitorspec> <connector>XWAYLAND0</connector> <vendor>unknown</vendor> <product>unknown</product> <serial>unknown</serial> </monitorspec> <mode> <width>1920</width> <height>1080</height> <rate>59.963</rate> </mode> </monitor> </logicalmonitor> </configuration> </monitors> -
At the end:
sudo systemctl start graphical.target