Arch与Wayland
前一阵子Manjaro更新后切换Wayland发现体验不错,便全面切到了Wayland。又考虑到VPS上LXQt+x11vnc的组合经常性崩溃,就想着也用上Wayland,经过一番尝试后,更换为Sway+wayvnc的组合。

Wayland
Wayland是一个通信协议,规定了显示服务器与其客户机之间的通信方式,而使用这个协议的显示服务器称为Wayland Compositor。它由Kristian Høgsberg于2008年发起,目标是用更简单的现代化视窗系统取代X Window System。Wayland协议的参考实现称为Weston,由Wayland项目组使用C语言开发。
Wayland与X Window System的最大不同在于,它规定由客户机自身负责窗口边框和装饰的绘制,并且客户机能够通过EGL以及一些Wayland特定的EGL扩展组件直接在显示存储器中算绘自己的缓冲器。窗口管理器简化成显示管理服务,专门负责算绘那些屏幕上的程序。这比X Window System中的窗口管理器要更简单、高效。
Wayland项目的源码使用MIT许可证发布。现有的Compositor例如Compiz,KWin和Mutter对Wayland都有着不同程度的支持。
KDE
截止目前,最新版KDE已经对Wayland有了较好的支持,使用fcitx5的话也不存在输入法问题,仅存在如下几个较为明显的问题:
- 存在轻微的画面闪烁问题,不常出现,经简单测试,比较集中在使用Jetbrains IDE的时候;
- 部分时候画面存在鼠标无法点击的问题,经测试比较集中出现在获取KDE插件界面最大化的情况下。
KDE的具体配置与问题解决内容可查看ArchWiki,这里仅再记录一下切换Wayland的方法。
$ sudo pacman -S plasma-wayland-session
然后注销登录,在登陆界面那儿会有一个X11的候选框,选择其中的Wayland再登录即可。
Sway
Sway是一个Wayland的合成器,旨在与i3完全兼容。Sway是一个平铺Wayland合成器,也是X11的i3窗口管理器的直接替代品。它适用于现有的i3配置,并支持i3的大部分功能,以及一些额外的功能。
Sway用于我VPS上的Arch Linux,足够轻量。下面记录安装过程。
$ sudo pacman -S sway-hidpi-git
选择hidpi版本安装,community仓库中的版本会出问题,提示缺少库,无法启动。
$ sudo pacman -S dmenu
$ sudo pacman -S alacritty
出了sway以外,还需要安装程序启动器dmenu和默认终端alacritty,否则进入桌面啥都做不了。
安装完成后,终端键入sway即可启动。sway可通过GDM或SDDM启动,这里我选用了SDDM,配置/etc/sddm.conf.d/sway_settings.conf如下:
[Autologin]
User=your_user_name
Session=sway
并允许sddm开机启动:
$ sudo systemctl enable sddm.service
另外也需要在/etc/environment中添加Wayland相关变量:
QT_QPA_PLATFORM=wayland
#GDK 程序会自动优先选择wayland程序,所以无需设置
#GDK_BACKEND=wayland
CLUTTER_BACKEND=wayland
# 让火狐在wayland下启动
MOZ_ENABLE_WAYLAND=1
XDG_CURRENT_DESKTOP=sway
XDG_SESSION_DESKTOP=sway
sway的默认配置文件为/etc/sway/config,自定义配置文件为$HOME/.config/sway/config,默认不存在,可以将默认配置文件复制到此处进行自定义。sway优先读取自定义配置文件。其余的具体使用方法,请参考i3。
Sway的默认终端不是alacritty,因此需要修改自定义配置文件:
set $term alacritty
另外默认的bar功能较少,可以使用waybar进行替代。
$ sudo pacman -S waybar
然后也需要在配置文件中修改(添加):
bar {
***
swaybar_command waybar
***
}
之后重载配置文件即可(上面修改默认终端也需要重载生效)。
wayvnc
这是一个VNC服务器,用于基于wlroots的Wayland合成器(⛔不支持Gnome 和 KDE)。它连接到正在运行的Wayland会话,创建虚拟输入设备,并通过RFB协议公开单个显示器。Wayland 会话可能是无头会话,因此也可以在不连接物理显示器的情况下运行 wayvnc。
wayvnc的安装也比较简单:
$ sudo pacman -S wayvnc
直接安装仓库中的版本有一定概率启动失败,可能与sway的版本有关,经过几次sway更新后就正常了。
终端键入wayland即可启动,默认vnc端口为5900。
wayvnc的默认配置文件在$HOME/.config/wayvnc/config,不加参数启动就会默认读取该配置文件。
由于是自行编译安装的,所以没有打包好的wayvnc.service,因此自行添加服务。
首先,添加wayvnc的环境参数~/.pam_environment:
INPUT_METHOD DEFAULT=fcitx //fcitx设置
GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE DEFAULT=fcitx
XMODIFIERS DEFAULT=\@im=fcitx
QT_QPA_PLATFORM=wayland
#GDK 程序会自动优先选择wayland程序,所以无需设置
#GDK_BACKEND=wayland
GDK_DPI_SCALE=1.5 //hidpi 设置
CLUTTER_BACKEND=wayland
# 让火狐在wayland下启动
MOZ_ENABLE_WAYLAND=1
WLR_BACKENDS=headless
WLR_LIBINPUT_NO_DEVICES=1
WAYLAND_DISPLAY=wayland-1
XDG_RUNTIME_DIR=/tmp
XDG_CURRENT_DESKTOP=sway
XDG_SESSION_DESKTOP=sway
XDG_SESSION_TYPE=wayland
然后添加service文件,参考打包好的wayvnc.service:
[Unit]
Description=A VNC server for wlroots based Wayland compositors
Before=sddm.service
After=sddm.service
[Service]
EnvironmentFile=$HOME/.pam_environment
Type=simple
User=your_user_name
ExecStart=/usr/bin/wayvnc -C $HOME/.config/wayvnc/config
Restart=on-failure
RestartSec=1
TimeoutStopSec=10
其中sway是通过sddm管理,所以Before和After也修改为sddm.service。
EnvironmentFile必须添加,否则wayvnc必然启动失败,$HOME需要替换为用户目录。








