11
20
2021
14

Wayfire 迁移进展(二):Xwayland HiDPI 以及 waybar

本文来自依云's Blog,转载请注明。

这几天完成了一个很重要的功能:我让 Xwayland 支持 HiDPI 了!

实际上让 Xwayland 支持 HiDPI 的补丁早就有了,但是我当时尝试的时候补丁并不能很好地应用,我手动修了修,不明不白地应用上之后,并没有能够正常使用。现象是,DPI 是对了,但是窗口大小会不断地缩为原来的四分之一(长宽都减半),全屏时也只占左上角的四分之一。

这几天我给 xorg-xwayland 打上了新版补丁,然后在一番理解之后,给 wlroots 写好了相应的补丁,现在 Xwayland 终于也可以看清晰了!

这两个补丁,xwayland 那边是通过一个 X 窗口属性来设置缩放倍数,然后 xwayland 会告诉混成器自己的窗口使用了对应的缩放倍数,这样混成器就不会当它不支持缩放、强行给拉伸一下了。当然还有输入坐标的转换之类的。缩放倍数为 2 时,X 客户端会看到之前两倍的显示大小,并且 X 使用的坐标是 Wayland 这边的两倍,所以 Wayland 的输入事件从 X 服务器传给 X 客户端的时候需要乘以 2。

混成器这边,需要了解客户端传过来的 X 坐标和 Wayland 坐标不再相同,需要进行相应的转换。没有进行转换的结果就是,客户端告诉混成器说自己是 1024x1024 的窗口大小,然后实际上创建出来是 512x512 的。混成器再告诉客户端你现在只有这么大,然后客户端说好,我调整一下。于是又变小了……

两个补丁打上之后,由于头文件有变化,混成器可能需要重新编译一遍。然后按 X 的方式设置 HiDPI,比如设置 Xft.dpi: 192 或者 winecfg 里设置 dpi 为 192。如果有运行于 Xwayland 的 GTK 3 程序,也要设置 GDK_SCALE=2 GDK_DPI_SCALE=0.5。然后执行以下命令设置 X 属性,让 Xwayland 做相应调整:

xprop -root -format _XWAYLAND_GLOBAL_OUTPUT_SCALE 32c -set _XWAYLAND_GLOBAL_OUTPUT_SCALE 2

接下来就能愉快地 wine 和 gimp 啦~

这几天做的另一个比较大的动作是配置好了 waybar。我也不知道这个组件叫什么好,很多地方都叫面板(panel),i3 / sway 那边直接叫 bar。它现在经常出现在屏幕顶部所以我也有时叫它顶栏。总之就是显示窗口信息、系统托盘和状态指示器啥的那一条。

我是从它自带的配置文件修改的,但是风格给完全改掉了。原本的风格是一块一块的彩色背景的字,我嫌太过显眼,经过一番调整之后,给改成了黑底上的彩色字,跟我原来的 Awesome 差不多,也和我显示器的黑边挺配的。指示器的放置也是差不多的。十分遗憾的是并没有合适的窗口列表小部件可用。它自带的那个 wlr/taskbar 会把所有工作区的窗口全部显示出来,很挤。而且不知道为什么,一旦加上它之后就最小要占用 34px 的高度,太占空间了,所以作罢。我打算以后自己实现一个,现在就拿正在播放的媒体凑一下吧。它现在长这样:

我的 waybar

左边就是使用 playerctl 做的媒体信息。左键可暂停播放,滚轮切歌。字的颜色是和窗口边框匹配的。

中边留着给窗口标题。

右边依次是:

  • idle 禁制器。点一下眼睛亮起来,禁用无活动时自动休眠。
  • CPU 和 load 信息。
  • CPU 温度。太高了会变红。
  • 内存使用率。
  • 电池信息。充满电又插着电源线,它就隐藏起来了。预期充电或者使用的时候图标会出现,并且可以看到剩余时间。如果在放电并且电量低,应该会变红并且闪烁。这设定跟我 Awesome 的那个一样,不知道等到什么时候才能用上,到时候才能看到效果了。
  • 音量。左键单击是切换静音,滚轮调节音量。图标会显示设备类型(我这里有内建、HDMI(实际上是走的 DP)、蓝牙三种)。麦克风静音的时候也会显示图标。
  • 系统托盘。它终于可以在多个屏幕上同时显示啦~
  • 时钟。

我最终还是用上了那个包名为「otf-font-awesome」的图标字体。

waybar 比 Awesome 的 bar 好配置多了。很方便使用外部程序来定义。也不一定要用定时器。程序可以一直跑着,一行一条状态更新,就不需要在「更新不及时」和「更新太频繁消耗资源、干扰调试」之间抉择了。

我把 wayfire、waybar 以及其它一些东西的配置文件上传到 GitHub dotconfig 仓库了。XDG 标准路径挺好的。

还有一些小的更新——

壁纸我使用了 swaybg,因为它支持不同显示器使用不同的壁纸,这样我的 e-ink 墨水屏就可以独享纯白壁纸了~或者什么时候我专门找张合适的黑白壁纸也挺好的。

fcitx5 输入条的文字 padding 太大。鉴于我现在日常使用 Wayland 了,我改了我这个主题,适配 Wayland。X 那边也没有太难看。

fcitx5-paste-primary 已经添加了 Wayland 支持,虽然实现很不优雅……

看图软件,使用 imv(同时支持 Wayland 和 X)取代了 sxiv。许多图片要预览的话,thunar 或者 geeqie 也挺好的。

以及一些已经报告的 bug:

还有一些未报告和未调查清楚的 bug,等事情明了之后我再更新啦~

Category: Linux | Tags: Wayland wayfire | Read Count: 29907
muwuren 说:
Nov 21, 2021 12:12:17 AM

感谢仙子,终于把这个xwayland补丁打好了,好激动

muwuren 说:
Nov 21, 2021 01:20:22 AM

好吧,还是有问题,太激动了看错了Emmmm

muwuren 说:
Nov 21, 2021 01:33:57 AM

可以介绍一下补丁具体怎么打吗?需要把包管理器的xorg-wayland卸载吗?试了很多次都有问题

Avatar_small
依云 说:
Nov 21, 2021 10:24:02 AM

是的。我都是直接在 Arch 的 PKGBUILD 上改然后覆盖安装的。

WeepingDogel 说:
Nov 28, 2021 01:12:59 PM

捕捉~

顺便作为一只用N卡的笨狗来羡慕一下

小伙子 说:
May 07, 2022 05:34:10 PM

仙子请问wine微信在waybar的tray不显示,有解决办法吗

Avatar_small
依云 说:
May 08, 2022 10:26:52 AM

显示在单独的窗口里了,因为 Wine 的托盘用的 X 的协议,Wayland 里不支持。

我打算给微信设置个自定义通知声,然后用 inotify 监控对这个文件的读取来提示新消息。不过还没有做。

止息 说:
May 29, 2022 09:05:58 PM

感谢仙子。现在用上wayfire-lily-git和xorg-xwayland-lily了,目前xwayland下面HiDPI是正常了。不过似乎在xwayland下面的鼠标大小和fcitx5候选框都变为原来的一半大小了,我调大了输入法的候选框和鼠标大小。

突然发现wayland下面超大的输入法候选框还挺舒服(

Avatar_small
依云 说:
May 30, 2022 11:27:01 AM

嗯,鼠标光标的大小没法保持一致(同一个环境变量,不同程序的理解就是不一样)。

fcitx5 候选框应该可以基本大小一致的。可能要开那个按 dpi 缩放的选项。

zccrs 说:
Jun 02, 2022 11:38:34 AM

wlroots的补丁没有提交到上游吗

Avatar_small
依云 说:
Jun 03, 2022 11:58:57 AM

没有,因为它依赖的 xwayland 补丁还没合并呢(而且看起来 kde 也跟从了 gnome 的方案,有空我可能给 wlroots 提那个方案)。

voyage200 说:
Feb 13, 2024 12:23:37 AM

请问 GNOME桌面环境的archlinux 如何应用您的“Xwayland 支持 HiDPI”这个补丁呢?
我使用 yay -S xorg-xwayland-hidpi-xprop
(我配置了archlinuxcn软件源,所以这个命令给我安装了archlinuxcn/xorg-xwayland-lily 23.2.4-2)
,然后控制台 xprop -root -format _XWAYLAND_GLOBAL_OUTPUT_SCALE 32c -set _XWAYLAND_GLOBAL_OUTPUT_SCALE 2

重启发现没有作用,Xwayland仍然模糊QAQ

voyage200 说:
Feb 13, 2024 01:29:15 AM

哦哦哦,还得mutter支持才行:https://gitlab.gnome.org/GNOME/mutter/-/issues/478

voyage200 说:
Feb 13, 2024 02:04:25 AM

*好像是“得”,不是“还得”


登录 *


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

| Theme: Aeros 2.0 by TheBuckmaker.com