11
8
2021
20

Wayland 初体验

本文来自依云'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 真的挺顺滑的。

对了,有个有意思视频给大家看一下。

这是我还没运行通知守护进程时,火狐发出的通知窗口,不知道为什么被反复创建和销毁。

Category: Linux | Tags: X Window X window Wayland | Read Count: 34836
飘尘 说:
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

这个是壁纸插件,可以实现每个虚拟桌面一个壁纸

Avatar_small
依云 说:
Nov 09, 2021 01:03:43 PM

neovim 不支持 clipboard=autoselect。这是当初我没能切换过去的主要原因。

vswitch 那个,难道是因为我少了个 binding_0?加上了,回去再试试去。

环境变量我可能还是得走脚本,因为短期内我还是希望支持 Awesome 和 wayfire 两个桌面环境的。

Avatar_small
依云 说:
Nov 09, 2021 01:06:19 PM

我倒是不怎么想在不同工作区设不同的壁纸(我没那么多图啊),倒是想不同的显示器设置不同的(E-ink 显示器特性不一样嘛),然而它并不支持。

Avatar_small
依云 说:
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) 去了……

Avatar_small
依云 说:
Nov 10, 2021 07:24:03 PM

快捷键设置不上的原因找到了——我用的版本还不支持。得 0.8.0 版。

飘尘 说:
Nov 11, 2021 09:05:29 AM

原来是这样啊

话说回复没有邮件通知吗?

Avatar_small
依云 说:
Nov 11, 2021 12:41:37 PM

有的吧,但是很可能被反垃圾系统过滤掉了。因为本博客站群大部分子站都成了垃圾评论的聚集地 QAQ

Avatar_small
依云 说:
Nov 11, 2021 12:41:37 PM

模糊的应该是 xwayland。

贺叶霜 说:
Nov 12, 2021 09:02:51 PM

只能抱着Nvidia显卡眼馋Wayland了~

Avatar_small
依云 说:
Nov 12, 2021 09:49:13 PM

啊咧,我刚看到有人在N卡上跑 GNOME Wayland 呢~现在应该已经能跑了哦~

欧式fifty 说:
Nov 19, 2021 04:54:29 PM

捕捉www

Heaven 说:
Jun 22, 2022 07:25:03 AM

大佬,在wayland下如何禁用笔记本的触摸板呢

Avatar_small
依云 说:
Jun 22, 2022 12:11:25 PM

取决于你的 wayland compositor。如果它没有这种选项,说明它不支持禁用指定输入设备。

Heaven 说:
Jun 22, 2022 12:14:59 PM

我采用的是wayfire,这个是否支持呢

Avatar_small
依云 说:
Jun 23, 2022 11:56:18 AM

不支持。为此我修改了 wayfire 源码: https://github.com/lilydjwg/wayfire/commit/cb7add9dd40ed843649749a35e9b6e65ac9d2fb6

SilverRainZ 说:
Jun 26, 2022 04:51:28 PM

> GTK 中,在输入编码的时候,按一次键闪烁一下。csslayer 说是不这样做就无法移动窗口。于是我改了一下代码,选择移不动。

这个 fork 在 [archlinuxcn] 有咩?搜了一下 fcitx5 lily 没找到。

Avatar_small
依云 说:
Jun 27, 2022 11:02:59 AM

后来我还是没有用这个方案。等 gtk4 吧……


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com