This is a WIP, some information can still be usefull
following previous article about using Waydroid on X11, I finally managed to have XFCE working on Wayland. It's in experimental state since XFCE 4.20. It looks like labwc package was just missing in my case, or that's maybe due to recente update of some XFCE components on Arch. I use mainly Arch Linux ARM on a RK3588 SoC since about 6 months.
Update 2028-09-01, I managed to have XFCE4 working on Wayland on this hardware, probably due to recent XFCE updates. It use labwc as compositor, that depend itself on wlroots. Still have some limitation (keyboard forced to english, no mean to switch (keyboard and iBus should depend on labwc or wlroots layers), parameters not available at least on menus, no screensaver/locker, see also one of the XFCE4 author's blog entry for more details), so I will wrote a new article about some tweaks in this case
ToC
About Wayland, compositors and what XFCE use for them
Wayland doens't have included compositor, as Xorg/X11 has. Some Desktop Environment (DE) rewriten their own, however, a growing nnumber of DE rely on wlroots compositor library and here an independent compositor, like here, labwc (sources) (efficient compositor) or Wayfire (sources) (more eyecandy but still light, 3D compositor), as suggested by authors.
ArchlinuxARM has only labwc as prebuild package, however, wayfire is available on AUR.
Welcome to keyboard management hell
Keyboard layout of IBM-PC compatibles computers was stupidely based on typewriter, to make secretary move from type writter to computer easy, but typewritters keyboards layouts was mainly made to avoid conflict between typebars, that sometime get stucks when typing at the same time or too fast. So organisation, is made to reduce the chance of two characters that follow one and each other are from the same part of the range. In 1936, now called "Dvorak"
For simple keyboard layout (just for simple scripts, not complex ones) management, I give here as example France's french keyboardi (AZERTY), default is US English QWERTY.
- console (terminal, serial, pure text) keyboard setup in
/etc/vconsole.conf localectlcommand allow to setup language and keyboard at system level and for X11, it can also inform you abont system managed configuration, but only show the default layout if several are set:- layouts
localctl list-x11-keymap-layoutsex: fr (french), mn (mongol), etc - variants
localectl list-x11-keymap-variantsex: azerty (plain AZERTY), oss (variant), etc - models
localectl list-x11-keymap-modelsex: pc105, cherrycyboard, etc - options
localectl list-x11-keymap-optionsex: altwin:alt_super_win, this define modifiers to change layouts or assign special keys to a combination of other keys.
- layouts
- '/etc/X11/xorg.conf.d/00-keyboard.conf' also contains select X11 keyboard layout, still with only the default layout and keyboard model
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "fr"
Option "XkbModel" "pc105"
Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection
- Wayland itself don't have this, it depends on the compositor for input method. GNOME or KDE have thier own compositors, most other relies on wlroots lib Input handling, including labwc that is currently configured by defaut for XFCE/Wayland. labwc itself use
~/.config/labwc/environmentfor this variables, but in the case of XFCE, another directory is used for this file as we well see later.
Basic overall system keyboard setup
Advanced Input methods, for complex scripts introduction and short history
Modern IME; iBus vs fcitx
I tend to prefer iBus because I use it for years, but most native chinese speakers say (maybe by habit too), that fcitx methods are far better for them. the package fcitx5-chinese-addons (Arch) contains more natural method than the one available in iBus. At the end it looks like iBus libpinyin, the same than I used in iBus, but it's not based on it and it has more dictionnaries.
Strangly (with French interface), I can't found it fcitx5 by searching chinois (Chinese), need to type "pinyin" after disabling "``Only Show Current Language". Thanks to some people of Telegram Mainline Linux for RISC-V channel.that helped me a lot to found this. The method is called "pinyin" (this word alone) in this interface
- Zhangma Pinyin method didn't find things like 武汉话, not really convenient
- Other displayed method Hanyu pinyin (with altgr) is for typing pinyin to write pinyin, not hanzi, and using alt-gr for the tones, could be still convenient, a bit more easy than using compose key when need to write pinyin pronunciation, but not really mandatory.
- You can add several dictionnary need to enable them in configuration option. On archLinux, I installed the following packages
fcitx5-gtk fcitx5-qt(obvious for the two main GUI libs).fcitx5-configtool(configuration interface, really mandatory at least for first setup).fcitx5-table-extra fcitx5-table-other fcitx5-pinyin-zhwiki fcitx5-chinese-addons# contains interesting methods at least for me and needed dictionnaries for pinyin input.fcitx5-anthy(for Japanese),fcitx5-hangul(for Korean) andfcitx5-unikey(for Vietnamese)... because CJKV :) still need a dedicated method to input han characters version of vietnamese.
How to setup them
X11 case
The ancient method was to add it in ~/.xprofile
GTK_IM_MODULE=ibus
QT_IM_MODULE=ibus
XMODIFIERS=@im=ibus
ibus-daemon -rxRd
Some recommand to put ibus-daemon -rxRd in the autostart file ~/.config/autostart instead. I have in both, kept it even if I don't use it anymore on Wayland+Labwc.
The recent habit is to add it in /etc/environnement
#
# This file is parsed by pam_env module
#
# Syntax: simple "KEY=VAL" pairs on separate lines
#
GTK_IM_MODULE=ibus
QT_IM_MODULE=ibus
XMODIFIERS=@im=ibus
I suggest to still put it on ~/.xprofile too at least for starting ibus-daemon
FCITX 5 documentation about GTK/Wayland suggests to add it in (/.config/gtk-${GTKversion}/settings.ini.gtk-2.0/settings.ini in case of older GTK2)
Wayland case
If this setup is active, you will receive the following message when starting XFCE 4.20 with Wayland:
please unset QT_IMODULE and GTK_IM_MODULE environnement variables and ibus-daemon --panel-disable. Should be executed as a child process of ibus-ui-gtk3 component
Experimental XFCE for Wayland
XFCE can be based on several compositor based themself on wlroots labwc and wayfire are the main recommandation. In case of labwc, il use xkeyboard-config (man xkeyboard config), compatible parameters. The directory ~/.config/labwc isn't used but instead ~/.config/xfce/labwc/.
In my case:
the layout syntax as you can see in the man page is LAYOUT(VARIANT), so fr(oss) for me that means French layout(alternatve avariant). In French: disposition française(variante alternative), as see in GUI configuration tools. I like to add some other useful methods as second choice with separate choice from advanced IME, like greek (for mathetmatics/physics usage), or mongolian for advanced cyrillic, and en, for some backward compatibility with interface that force QWERTY like layout.
The model is the default one, an IBM PC compatible keyboard.
The options are here: grp:shifts:toogle (use both shift to toggle defined layouts, this a different toggle than the complex scripts methods like iBus/fcitx(5), and compose:lwin: mean the "left Windows" key is used as compose key (compose), the magical key, that allow to write about everything most needed, see man 5 compose. Compose key chart show all interesting possible shortcut usage, and I use them a lot. You can also redefine alt-gr postiion with lv3 (level 3, that is assigned to alt-gr ) :
XKB_DEFAULT_LAYOUT=fr(oss),mn,gr,en
XKB_DEFAULT_MODEL=pc104
XKB_DEFAULT_OPTIONS=grp:shifts_toggle,compose:lwin
So in short: place it in ~/.config/xfce4/labwc/environment and add a file called lock in this directory to avoid automatic fallback to default one as described below, you can just do the following line and go to next section if you don't want to read details:
touch ~/.config/xfce4/labwc/lock
When I tried to set it manually it was strangely overwritten at each session.
By looking at /etc/lightdm/lightdm.conf, the configuration of Display Manager I use, ligthDM, I see, that directories containing automaticaly managed sessions:
#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions:/usr/share/wayland-sessions
So in our case, Wayland sessions are obiously in, /usr/share/wayland-sessions/, and for XFCE4, the file is /usr/share/wayland-sessions/xfce-wayland.desktop. The exec it call is startxfce4, a bash script:
$ grep Exec /usr/share/wayland-sessions/xfce-wayland.desktop
Exec=startxfce4 --wayland
If you then look at the /usr/bin/starxfce4 shell script, you will see that it try to write ~/.config/xfce/labwc/environment keyboard variables after the one after /etc/vconsole.conf following some regexp Magics, but, looks like it fail in my case. You can see that if there is a lock file in the directory, it doesn't try to overwrite it ^^. This forced fr(pc) in my case and as it's probably not supported, I had QWERTY keyboard instead of my precious fr(oss)
if [ ! -e "${XDG_CONFIG_HOME:-${HOME}/.config}/xfce4/labwc/lock" ] && [ -e /etc/vconsole.conf ]; then
Current problems with fcitx5
When searching for chin(a/ese) or in French chin(e/ois), only non-han chinese (in the sens of from China) languages appear.

When searching for 中文 (Chinese in Chinese Hanzi), then Hanyu chinese methods appears, but you probably can't type chinese at this time, if it's first launch. However you can see interesting variants: pinyin for Mandarin, some yue languages (粤语, Cantonese, a Han language in and around Guangzhou, and more generally, large part of Guangdong province, Macau SAR and Hong Kong SAR) but they are only in traditional form (繁体/繁體). And some han graphical shape code related methods (形码), like wubi (五笔, meaning five brush (strokes). if you install fcitx5-rime, it will allow you to add more methods. It's used by some small language/dialects speakers to write their language.
When searching for pinyin all pinyin method appear, the ideal one is called Pinyin and display a 拼 character when selecting method during usage.

Screenshot Keybinding
Add in ~/.config/xfce4/labwc/rc.xml, inside (XML style), keyboard section:
<keyboard>
<!-- various existing definitions -->
<keybind key="Print">
<action name="Execute">
<command>sh -c 'grim -g "$(slurp)" ~/screenshot_$(date +%Y-%m-%d_%H-%m-%s).png'/command>
</action>
</keybind>
</keyboard>
Need grim and slurp:
pacman -S --needed grim slurp
Graphic Screen Tablet mapping
Even for non-wacom tablets, the tool libwacom-list-local-devices from libwacom package allow to have a concise list of available device
[wayland-utils](https://gitlab.freedesktop.org/wayland/wayland-utils) package contains wayland-info command, that allow to get current state and objects.
Some références Wayland-protocols, ]Last wayland-protocols releases,
wlr-randr, package wlr-randr.
$ wlr-randr
This section is not finished, I wrote noticed elements, not sure labwc is able to configure it with its current state
In my case that's the Huion Kamvas 20 with name: 'KAMVAS Pro 20 GT1901':
$ libwacom-list-local-devices
devices:
- name: 'KAMVAS Pro 20 GT1901'
bus: 'usb'
vid: 0x256c
pid: 0x006e
nodes:
- /dev/input/event13: 'Tablet Monitor Dial'
- /dev/input/event12: 'Tablet Monitor Touch Strip'
- /dev/input/event11: 'Tablet Monitor'
- /dev/input/event10: 'Tablet Monitor'
styli:
- id: 0xffffd
vid: 0x0000
name: 'General Pen with no Eraser'
type: 'general'
axes: ['x', 'y' , 'pressure']
buttons: 2
erasers: []
After the command libwacom-list-devices | grep 'KAMVAS Pro 20 GT1901', uniq: 'HUION_M193'
xinput also allow to get input informations
$ xinput --list
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ xwayland-tablet stylus:15 id=10 [slave pointer (2)]
⎜ ↳ xwayland-tablet eraser:15 id=11 [slave pointer (2)]
⎜ ↳ xwayland-tablet cursor:15 id=12 [slave pointer (2)]
⎜ ↳ xwayland-pointer:15 id=6 [slave pointer (2)]
⎜ ↳ xwayland-relative-pointer:15 id=7 [slave pointer (2)]
⎜ ↳ xwayland-pointer-gestures:15 id=8 [slave pointer (2)]
⎜ ↳ xwayland-tablet-pad:15 id=13 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ xwayland-keyboard:15 id=9 [slave keyboard (3)]
xrandr allow toknow the connectors names
$ xrandr| grep connect
lease-DP-1 disconnected (normal left inverted right x axis y axis)
DP-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 530mm x 300mm
lease-HDMI-A-1 disconnected (normal left inverted right x axis y axis)
HDMI-A-1 connected 1920x1080+0+1080 (normal left inverted right x axis y axis) 430mm x 240mm