本文来自依云's Blog,转载请注明。
前天得知 wayfire 能够直接在 X Window 下运行之后,我就尝试了一下。很好,能跑。虽然不能捕获键盘,从而与外边窗口管理器重复的快捷键无法使用,但至少它的鼠标光标位置是对的,能够用来测试。我在 QEMU 里跑过 KDE Wayland、sway 和 wayfire,无一例外鼠标位置不对。KDE 里是缩放倍数设为 2 之后,鼠标的实际坐标会翻倍。后两者基于 wlroots 的,鼠标的实际坐标位于显示的光标上方几十像素处。总之没法用。
在 X Window 里粗略地配置了一下 wayfire 之后,我就想实际在外边跑跑看。结果被惊艳到了,感觉就像年轻了24岁一样!
优势
尝试几次之后,我终于把 wayfire 跑起来了。
首先是火狐图形性能翻倍!
我打开火狐,跑了一下 WebGL 水族馆(微软的 FishGL 没啦)。接近 60fps,是我在 X Window 下跑的两倍有余!再试试 YouTube 的 4K 视频,竟然几乎不掉帧!我的电脑的性能原来这么好的吗……在 X Window 下,火狐播放这 4K 视频,会占满 GPU,并且 CPU 也几乎用满,丢掉约十分之一的帧。而在 Wayland 下竟然只用了一半的 GPU,CPU 用量也不怎么高。而且操作起来很流畅,右键菜单一点就出来,鼠标划过菜单项,高亮也跟得很紧。
画面再也不撕裂啦!
一直以来,我切换窗口、播放视频、快速滚动窗口内容的时候,时不时能见到画面撕裂。一般是在中间附近,一道水平接着倾斜接着再水平的裂痕会一闪而过,其上和其下是两帧不同的内容。读过 xplain 以及 Wayland Book,我知道这是由于 X Window 服务端与客户端之间并不同步,显示画面时,缓冲区里有啥画啥,并不在乎客户端有没有画完,导致相邻的两帧拼接在了一起。而 Wayland 会使用双重缓冲,客户端在缓冲区里画好了,才告诉混成器这一帧画好了、可以显示出去了。而在画好之前就显示上一次提交的缓冲区内容,所以永远不会出现画一半的情况。
我的光标也不再闪烁啦!
我也不知道为啥,我在 X Window 下,特别是接外接显示器的屋里,鼠标光标会像遥远的星星一样闪啊闪的,有时候闪得甚至影响我操作。我用的 picom 混成器的选项我改来改去,不光没能解决这个问题,反而是搞得它时不时崩溃一下了。我也不知道这是怎么回事,按理说鼠标光标由硬件绘制的,不应该时有时无啊。而在 wayfire 里,光标一直很稳定,从来不闪烁。我是返回到 X Window 下才注意到这一点的。
特效!
尝试 wayfire 的一大原因是我看中了它的特效。当年我初入 Linux 的时候,就挺喜欢 compiz 的特效的,只是后来因为性能问题才转到 Awesome 的。wayfire 有好多我当年常用的特效,果冻、火焰、立方体、展览,还有那个翻页一样的切换效果叫啥来着。没有纸飞机倒是有点可惜。
其它的 Wayland 混成器,KDE 我已经尝试过了,虽然是 X Window 版本,但功能应该是一致的。同样 sway 的对应 X Window 版本 i3 我也尝试过了。结论是,我并不是很在意平铺,但是我很在意键盘操控性。wayfire 也有较为丰富的键盘操作设置,应该也可以通过插件来扩展。
已解决的问题
虽然有上边这些优势,我还是回到 Awesome 来了,因为还有不少问题和需要配置的地方呢。此节记录一下我已经解决的问题。
- GVim。因为 GVim 使用的是 GTK,所以改一改让它支持 Wayland 并没有很难。我改好的版本在我的 vim fork 的 wayland 分支上。目前还缺少两个重要功能:终端里的剪贴板,以及 +clientserver。
-
mpv 是糊的。研究发现这是因为我加了
no-hidpi-window-scale
参数。它是为了解决 X Window HiDPI 下窗口过大的问题,但到了 Wayland 下使用它就会导致并不进行 HiDPI 缩放了。 - 窗口焦点不会跟随鼠标。这是在平铺式窗口管理器里使用很广泛的特性。wayfire-plugins-extra 里有个 follow-mouse 插件可以实现这个。
-
GTK 的鼠标主题、禁用动画设置等不生效。原来在 Wayland 下 GTK 不读取
~/.config/gtk-3.0/settings.ini
,可以使用 dconf-editor 去编辑 org.gnome.desktop.interface 下的选项。 - xfce4-notifyd 的通知会被当成普通窗口,置于屏幕中间并且有标题栏。有一个 fork 修复了此问题,不过我还是决定使用更轻量的 mako(不是 Python 的那个模板引擎哦)。
- Xwayland 跑 PRIME offloading 时,Minecraft 的画面会来回抖动。于是只好放弃 NVidia 显卡改成 Intel 显卡了(反正自从我买了 4K 显示器之后就都跑不动了 QAQ)。
-
fcitx5
- GTK 中,在输入编码的时候,按一次键闪烁一下。csslayer 说是不这样做就无法移动窗口。于是我改了一下代码,选择移不动。反正也只有在屏幕边缘的时候才需要移动。Qt 那边这个问题倒是不大,因为 fcitx5-qt 总是在应用程序的窗口范围内绘制候选词窗口,能够判断什么时候需要移动,所以只是在屏幕边缘的时候闪一闪。
- Qt 中(就是 Telegram 啦),在窗口下方输入的时候候选词窗口会悬在文本上空。我改了一下代码,现在能够准确定位到文本的上方紧贴着了。代码已经 pr。
-
fcitx5-configtool 不显示部分图标。把
GNOME_DESKTOP_SESSION_ID=0
环境变量加上就好了。这个环境变量莫名其妙地解决了不少问题呢。
剩下的问题
我暂时还是以 Awesome 为主,因为还有很多问题有待解决:
- Vim 不支持剪贴板、clientserver 特性。我打算通过另外的方式实现。工作量有些大。
- SPICE 客户端 spicy 无法捕获键盘,造成虚拟机里无法使用与外边相同的快捷键。
- LightDM 启动 wayfire 会话时会立即退出,而实际上 wayfire 是已经启动了的。各种日志里均没有找到任何有用的信息。
- wl-paste 获取的剪贴板内容与 Xwayland 的并不同步。似乎大部分程序都支持两种剪贴板协议,但是 wl-paste 和 Xwayland 各支持其中之一?
- Xwayland 不支持 HiDPI。有个补丁,但是会造成窗口一直缩小再缩小。
-
fcitx5
- 候选词的内边距有些大。有空再调了。
- fcitx5-paste-primary 不支持 Wayland。有空再加了。
-
wayfire
- 窗口标题不支持中文。我倒是打算给 wayfire 加个不显示标题栏的选项。
- 的 fast switch(真的很快)会导致全屏窗口取消全屏。
- 似乎不支持触摸板拖拽的时候中断一下。应该很好修补吧?
- 只能切换到本工作区的上一个窗口,不能跨工作区
- invert 和 zoom 插件只支持某一个显示器。前者我用不到,但后者应该还有些用处的。
- 设置的 Super+数字键 切换工作区无效。
-
我还没想好我那些环境变量去哪里设置比较好。
~/.xprofile
没啦,~/.pam_enviroment
我也不想用。在考虑使用 systemd 那个功能,或者我自己 wrapper 一下 wayfire。
缺憾
- 使用 libinput 取代了 synpatics,非常好用的画圈滚动(一直画、一直滚)没了。
结语
还有挺多东西要配置的。锁屏啦,壁纸啦,还有未发现的问题啦,等等。慢慢来吧。Wayland 真的挺顺滑的。
对了,有个有意思视频给大家看一下。
这是我还没运行通知守护进程时,火狐发出的通知窗口,不知道为什么被反复创建和销毁。
Nov 09, 2021 10:43:30 AM
Vim 不支持剪贴板、clientserver 特性。我打算通过另外的方式实现。工作量有些大。
切到neovim,安装wl-clipboard-x11,clientserver用neovim-remote
SPICE 客户端 spicy 无法捕获键盘,造成虚拟机里无法使用与外边相同的快捷键。
wlroots框架已经支持了这个功能,看开发者什么时候有空去实现这个东西,他们也知道这个东西没有实现。可以去matrix催一催。
LightDM 启动 wayfire 会话时会立即退出,而实际上 wayfire 是已经启动了的。各种日志里均没有找到任何有用的信息。
不用LightDM,不过sddm没有这个问题。
wl-paste 获取的剪贴板内容与 Xwayland 的并不同步。似乎大部分程序都支持两种剪贴板协议,但是 wl-paste 和 Xwayland 各支持其中之一?
不知道哪天就突然同步了...可能是安装了wl-clipboard-x11
fcitx5
我是换了主题,看起来还行,https://github.com/hosxy/Fcitx5-Material-Color..
窗口标题不支持中文。我倒是打算给 wayfire 加个不显示标题栏的选项。
没有这个问题,可能是字体问题?或者是因为我用的是git版本的?
设置的 Super+数字键 切换工作区无效。
这个也许是个坑吧,感觉是没讲清楚,要这样配置wayfire.ini
[vswitch]
binding_0 = <super> KEY_0
binding_1 = <super> KEY_1
binding_2 = <super> KEY_2
binding_3 = <super> KEY_3
binding_4 = <super> KEY_4
binding_5 = <super> KEY_5
binding_6 = <super> KEY_6
binding_7 = <super> KEY_7
binding_8 = <super> KEY_8
binding_9 = <super> KEY_9
环境变量配置
我是用了那个东西(systemd-environment-d-generator),写在了bash_profile里面。
wayfire赛高\ o /
Nov 09, 2021 10:47:34 AM
https://github.com/Javyre/swayfire
还有个这个插件,把wayfire变平铺
https://github.com/DankBSD/wf-wallpaper
这个是壁纸插件,可以实现每个虚拟桌面一个壁纸
Nov 09, 2021 01:03:43 PM
neovim 不支持 clipboard=autoselect。这是当初我没能切换过去的主要原因。
vswitch 那个,难道是因为我少了个 binding_0?加上了,回去再试试去。
环境变量我可能还是得走脚本,因为短期内我还是希望支持 Awesome 和 wayfire 两个桌面环境的。
Nov 09, 2021 01:06:19 PM
我倒是不怎么想在不同工作区设不同的壁纸(我没那么多图啊),倒是想不同的显示器设置不同的(E-ink 显示器特性不一样嘛),然而它并不支持。
Nov 09, 2021 01:41:28 PM
沙发~~
好炫酷诶
Nov 09, 2021 04:45:02 PM
xwayland 的剪贴板同步问题,是 wlroots 主动禁止的。参见: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2887
也就是说,Vim 用不上。xsel 也用不上。wl-clipboard-x11 那个假的 xsel 实际上使用的是 wl-clipboard,倒是能用上。
Nov 09, 2021 09:55:19 PM
用過一段時間的 Sway,但是始終覺得 HiDPI 有些問題,縮放還是模糊,而且 Firefox 在 Wayland 下還有菜單無法點擊的問題,最後無奈還是 Plasma (X) 去了……
Nov 10, 2021 07:24:03 PM
快捷键设置不上的原因找到了——我用的版本还不支持。得 0.8.0 版。
Nov 11, 2021 09:05:29 AM
原来是这样啊
话说回复没有邮件通知吗?
Nov 11, 2021 12:41:37 PM
有的吧,但是很可能被反垃圾系统过滤掉了。因为本博客站群大部分子站都成了垃圾评论的聚集地 QAQ
Nov 11, 2021 12:41:37 PM
模糊的应该是 xwayland。
Nov 12, 2021 09:02:51 PM
只能抱着Nvidia显卡眼馋Wayland了~
Nov 12, 2021 09:49:13 PM
啊咧,我刚看到有人在N卡上跑 GNOME Wayland 呢~现在应该已经能跑了哦~
Nov 19, 2021 04:54:29 PM
捕捉www
Jun 22, 2022 07:25:03 AM
大佬,在wayland下如何禁用笔记本的触摸板呢
Jun 22, 2022 12:11:25 PM
取决于你的 wayland compositor。如果它没有这种选项,说明它不支持禁用指定输入设备。
Jun 22, 2022 12:14:59 PM
我采用的是wayfire,这个是否支持呢
Jun 23, 2022 11:56:18 AM
不支持。为此我修改了 wayfire 源码: https://github.com/lilydjwg/wayfire/commit/cb7add9dd40ed843649749a35e9b6e65ac9d2fb6
Jun 26, 2022 04:51:28 PM
> GTK 中,在输入编码的时候,按一次键闪烁一下。csslayer 说是不这样做就无法移动窗口。于是我改了一下代码,选择移不动。
这个 fork 在 [archlinuxcn] 有咩?搜了一下 fcitx5 lily 没找到。
Jun 27, 2022 11:02:59 AM
后来我还是没有用这个方案。等 gtk4 吧……