序
前几天配置的 manjaro vbox 炸了,始终无法进入桌面。正好想试试 Sway,直接下了 Manjaro-sway,顺带测试声称要替代 Motrix 的 ImFile,有点一言难尽。UI 是不错,但下载地点没有 Motrix 那种下拉悬浮框,不能快速选择。报错也莫名其妙,还会漏,页面信息也被删减了很多,搞得有时候都不知道有没有成功添加任务,只有重启 app 才能看出来。还有 issue 区提到的批量删除任务,手动点三个我就累了……
Manjaro-sway
文档
- Manjaro Sway Edition: Download, GitHub
- Sway - Arch Wiki
- Wayland Support of VirtualBox Host Software?
- [SOLVED] running virtualbox under Wayland and sway
- Manjaro Sway: Is there a guide?
- Manjaro sway configuration manual
体验
下午稍微尝试了一下 Manjaro-sway,感觉这 wm 非常不错,日历都是用的 calcurse,我可太爱了。不过不知道能不能用 GUI 应用(mpv, Firefox 啥的),后面 host OS 打算直接整这个。于是花了一天时间从入门到火化。
- 安装软件包时遇到个奇怪的 Bug,暴力移除解决:
$ pamac install screenfetch
blahblah /var/tmp/pamac/dbs/sync: not a directory
rm /var/tmp/pamac/dbs/sync
mkdir -p /var/tmp/pamac/dbs/sync
$ pamac install screenfetch
echo "now it should work"
- 搞了半天都不能运行 Manjaro 普通镜像里的 Live installer,论坛也没啥有用的信息,还是 GPT-4o 靠谱,推荐了命令行安装工具 Manjaro Architect,硬盘占用只有 840KB,很惊艳,测试可用。后面就是重启照着 redacted重做一遍:
pamac update
pamac install manjaro-architect
sudo manjaro-architect
- 然鹅后面发现这玩意儿根本就是从头开始下各种软件包安装,拿来自制镜像倒是方便,但我已经在 live cd 里想要把本地的内容安装到硬盘上而已,这就没用了
- 最后还是直接暴力 dd,把 ISO 刻录到 VDI,就相当于安装了……结果一重启就丢失数据,白忙活🤷♂️
尝鲜之后准备实际上手自己搭建一个,开始前先来点背景知识(的链接),熟悉的可以直接跳到 #安装 部分。
文档
- 注意前文 Manjaro-sway 部分也有一些文档可以参考,主要是 VirtualBox 的部分
- Wayland - Void Linux Handbook,靠谱,就是内容少
- Running Sway on Void Linux (without SystemD),靠谱,但部分软件有更好的替代
- sway - i3 兼容 Wayland compositor,不是很靠谱,但涉及面稍微广一点点
- Sway 在 VF2-2311 工程版上丝滑流畅运行,RISC-V 架构 SBC VisionFive2 上运行 Sway 的体验,主要关注 Sway、Waybar 和中文输入的配置
- Use swaywm with Void Linux,seatd/elogind 讨论,我直接用的 elogind,一切正常
启动器
参考 sway wiki 提供的 已知兼容 sway 应用启动器列表,以及 Fuzzel: A great dmenu and rofi alternative for Wayland 有几个启动器的对比图,对长得还行的一个个试过去。
简单体验:
- sway-launcher-desktop: 感觉很不错,打包的发行版 很少,Manjaro-sway 用的?
- bemenu: 中规中矩吧,配置 Gist,默认在最底下太蠢
- tofi: 还行,和 bemenu 差不多,默认字体太大
- fuzzel: 还行,略丑
- wofi: 丑拒
- yofi: 同上
最后暂时停留在 tofi,之后会参考 Manjaro-sway 使用的方案进行定制。
快捷键
$mod
默认就是 Win,后者比较好打就直接写 Win 了。
- 终端,
没找到原来是 qterminal 默认不支持,需要设置环境变量 - 重新加载 sway 配置:Win + Shift + C
- 启动器:Win + D
- 其他一堆都记录在配置文件里,多看多用就熟了
安装
随后给 void-glibc 搞了个 snapshot,直接实操。
由于我之前已经配置好了 Xfce4,而且很多纯 cli 工具是在另一台使用 musl-libc 的机器中使用的,首先移除这些多余的东西 1:
# 移除一些仅用于 musl 的软件包
doas xbps-remove newsboat pandoc notmuch notmuch-python3 hugo afew buku
# Uninstall Xfce4
doas xbps-remove xfce4 lightdm
doas xbps-remove -R -oO
随后安装 Sway 相关软件包,xi
命令来自 Void 的 xtools
,软件包命名不同发行版也可能有所差异:
# 通用 GUI 程序
xi Thunar thunar-archive-plugin thunar-media-tags-plugin thunar-volman qterminal mpv
# Install sway along with other sway/wayland packages
xi elogind sway sakura swayimg wev qt6-wayland xorg-server-xwayland
# choose from one of those application launcher
xi tofi
# screen lock
xi swaylock swayidle
# screenshot
xi grim slurp wf-recorder
# status bar
xi Waybar font-awesome6
# notification
xi SwayNotificationCenter nerd-fonts-symbols
sudo reboot
刚开始没有卸载 LightDM,看到右上角 WM 正确识别出了 Sway 还以为支持,结果输了正确的密码也无法进入桌面。
无奈,查看日志:
$ cat ~/.xsession-errors
00:00:12.219 [ERROR] [wlr] [backend/backend.c:107] Timeout waiting session to become active
00:00:12.221 [ERROR] [wlr] [backend/backend.c:359] Failed to start a DRM session
00:00:12.221 [ERROR] [sway/server.c:137] Unable to create backend
搜到类似的 issue#3026,所以 VirtualBox 和 Intel 显卡我占了俩,就完全启动不了是吧。然鹅上面的 Manjaro-sway 就可以,很怪。issue#7240 可能也有关系,毕竟和显卡相关。最后还是自己动手,根据之前研究 DE 的经验,卸载了 Xfce4 残留的 LightDM(display manager),重启,这样启动就直接停留在 tty。然后手动运行 exec sway
,顺利进入桌面。
本来想在 ~/.profile
的最后加上这个,结果尝试后发现还是得手动登录账号,只是登录后省了一句 exec sway
而已,没什么卵用,遂移除:
# If running from tty1 start sway
if [ "$(tty)" = "/dev/tty1" ]; then
exec sway
fi
软件包
之前使用的 Xorg 或者 Sway 默认项目的替代方案(Void 中的软件包名,和 Debian 可能很不一样):
功能 | X11 DE | (Sway 默认 -> ) WM |
---|---|---|
终端 | Konsole/xfce-terminal/qterminal | foot -> qterminal + font-firacode |
启动器 | dmenu -> tofi | |
通知 | swaync + nerd-fonts-symbols-ttf | |
状态栏 | Waybar + font-awesome6 | |
剪切板 | cliphist | |
截图 | flameshot | grim + slurp + swappy |
录屏 | peek | wf-recorder |
锁屏 | swayidle + swaylock | |
图片查看 | ristretto | swayimg |
按键定义 | xev | wev |
Qt/KDE/Xorg 程序 Wayland 支持 | qt6-wayland/kwayland/xorg-server-xwayland |
空着的可能是 DE 集成,可能是懒得写(比如 Xfce4 的一大堆状态栏软件包),也可能是和右侧一致。因为我实际上这里做了两个迁移 2,一个是 Xorg -> Wayland,另一个是 DE -> WM (Sway) -> 用自定义软件包替代 Sway 的默认方案。
配置
Sway
# Copy example config
mkdir -p ~/.config/sway
cp /etc/sway/config ~/.config/sway/config
# Edit accordingly
vim ~/.config/sway/config
然后根据 Cloud Atlus 配置 Sway,一些附加命令,但 Void Linux Handbook 又给了不一样的解答,不知道该听谁的,有空多试试显然是后者的,Cloud Atlus 那个应该过时了,配置完 QTerminal 就正常了~
# GTK 应用默认启用 Wayland,无需配置
# QT 应用应用需要设置环境变量引导程序启用 Wayland
# cat "QT_QPA_PLATFORM=wayland" | sudo tee -a /etc/environment
VISUAL=vim sudo -e /etc/environment
# Sway/Wayland
QT_QPA_PLATFORM=wayland-egl
ELM_DISPLAY=wl
SDL_VIDEODRIVER=wayland
MOZ_ENABLE_WAYLAND=1
Sway 似乎默认给 Firefox 提供了一个 Firefox-wayland 启动方式,就不需要手动配置 MOZ_ENABLE_WAYLAND=1
环境变量。可以根据 about:support
页面 Window Protocol
变量的值来判断 Firefox 运行环境。
本来想照着 运行 sway 窗口管理器 - Chromium 配置 chromium-flags.conf
,结果搜到 ungoogled-chromium 的 issue,发现这玩意儿只有 Arch 包支持,于是不管。
Waybar
配置 status bar,可以用默认的 sway-bar,也可以用 Waybar,记录后者的命令:
xi Waybar font-awesome6
mkdir -p ~/.config/waybar
cp /etc/xdg/waybar/config.jsonc ~/.config/waybar/
cp /etc/xdg/waybar/style.css ~/.config/waybar/style.css
Swaync
至于 notification,参考 Fedora Sway Spin 的 dunst 的 issue#264,找到了 SwayNotificationCenter,Repology 打包情况良好,看截图挺不错,研究了一番:
xi SwayNotificationCenter
mkdir -p ~/.config/swaync
cp /etc/xdg/swaync/config.json ~/.config/swaync/config.json
同样还有 Waybar 配置,甚至可以根据提醒🔔️的内容,来运行自定义脚本,这个倒很实用。 搞了半天也没研究出来怎么安装这个 NotoSansMono Nerd Font,官方好像没有,然后手动改图标也没卵用,有空再研究吧…… 安装 nerd-fonts-symbols
3 有关内容:
- How to get the real name of font?
- swaync,Waybar 通知栏的主题,没啥用,默认的就还行了
"custom/notification": {
"tooltip": false,
"format": "{} {icon}",
"format-icons": {
"notification": "🔔️",
"none": "🔕",
"dnd-notification": "🔔️",
"dnd-none": "🔕",
"inhibited-notification": "<span foreground='red'><sup></sup></span>",
"inhibited-none": "🔕",
"dnd-inhibited-notification": "🔔️",
"dnd-inhibited-none": "🔕"
},
"return-type": "json",
"exec-if": "which swaync-client",
"exec": "swaync-client -swb",
"on-click": "swaync-client -t -sw",
"on-click-right": "swaync-client -d -sw",
"escape": true
},
Align with Manjaro-sway
折腾来折腾去,最后感觉自己做的还是没 Manjaro-sway 的好,于是参考 manjaro-sway/desktop-settings 的配置魔改一番。
首先把两台机器的配置都复制到本地:
rsync -avz --ignore-existing -e ssh void:~/.config/ ./config-void/
rsync -avz --ignore-existing -e ssh manjaro:~/.config/ ./config-manjaro/
然后先这样再那样,最后 就弄好了(ˉ﹃ˉ) 发现和系统耦合度实在太高,借鉴起来非常麻烦。
我花了四个多小时复刻了一个尽可能贴近的,但也不是尽善尽美。
Waybar 状态栏始终不能和 Manjaro-sway 保持一致,$term_float
选了 footclient 也不行,无奈放弃。
在 dotfiles 加了 SwayWM 分支, #有生之年 再继续。
# 配置过程中加入的相关软件包,不完整
xi brightnessctl pulsemixer pavucontrol
# 为了贴近 Manjaro-sway 而安装的软件包,仅安装 Sway 则不必要
xi seatd swappy foot
体验
安装、软件、配置都讲了,简单说说其他一些常用软件的适配情况:
- 命令行程序,完美运行,Xorg/Wayland 和 TTY 又有什么关系呢╮( ̄▽ ̄)╭
- Firefox,使用上文提到的 Sway 自带的 Firefox-wayland
- Chromium,理论上可以通过 flag 运行,但我没成功,基于 Firefox 的 Zotero 同理
- KeePassXC,Qt5 写的 GUI 运行不能,但可以用 keepassxc-cli
- Calibre/Remmina 都正常
排错
后面由于 Xfce 迁移过来的历史遗留软件包太多,VDI 高达 11G,决定删了重装。直接从不含桌面的 live CD 安装 Sway,第一次运行遇到和 Question Problems installing sway / wayland 一样的报错:
00:00:00.005 [ERROR] [wlr] [libseat] [libseat/backend/logind.c:660] Could not get primary session for user: No data available
00:00:00.007 [ERROR] [wlr] [libseat] [libseat/libseat.c:79] Backend 'logind' failed to open seat: No data available
00:00:00.007 [ERROR] [wlr] [backend/session/session.c:83] Unable to create seat: No data available
00:00:00.007 [ERROR] [wlr] [backend/session/session.c:248] Failed to load session backend
00:00:00.007 [ERROR] [wlr] [backend/backend.c:79] Failed to start a session
00:00:00.007 [ERROR] [wlr] [backend/backend.c:359] Failed to start a DRM session
00:00:00.007 [ERROR] [sway/server.c:137] Unable to create backend
根据 r/voidlinux 的帖子,找到 Void Linux Handbook 对应的 elogind 条目,发现是需要启用 D-Bus 服务。
# 在运行的系统启动
sudo ln -s /etc/sv/dbus /var/service/
# 在未运行的系统默认启动
sudo ln -s /etc/sv/<service> /etc/runit/runsvdir/default/
然后又安装了不知道有没有用的 dbus-elogind,重启:
xi dbus-elogind
sudo reboot
再次尝试 exec sway
,发现换了个报错:
[sway/server.c:143] Failed to create renderernitialize renderer
跟着 sway issue#3026 和 Reddit 说明安装 Mesa,重启:
xi mesa mesa-vulkan-intel
又是一个新报错……
[sway/server.c:143] Failed to create renderernitialize renderer(0x3001), message: "eglInitialize"o load driver
于是病急乱投医,又装上一堆驱动,这才想起来没装 virtualbox-ose,一起装上:
xi mesa-intel-dri mesa-opencl
xi linux-headers virtualbox-ose-guest virtualbox-ose-guest-dkms
重启后终于一切正常。 所以大概是 virtualbox-ose 的锅,毕竟官方(几年前)说不支持 VirtualBox,建议换 QEMU。不过当时还说不支持 Nvidia 显卡,现在其实可以通过实验性命令行参数支持。 浪费了一个 snapshot 实测发现确实还是显卡驱动的锅,反正这么一堆装上就能跑,能跑就不动,比起 Xfce 已经精简很多了。
后记
这篇是 5 月份随性而作,全文都是想到什么写什么,可能看着比较乱。由于 Sway 上手难度颇高,已经暂时回归 DE,等后面靠 i3 多加熟悉之后再次尝试。顺带一提,描述中的歌词来自 Applique 游戏五色浮影绽放于花之海洋(花の野に咲くうたかたの)由 Ayumi. 演唱的主题曲 华历(華暦),这也是我极少数因为 OP 而买的游戏……因为 SwayWM 的推荐贴中常常能看到 sakura,整理时刚好想到,顺势贴上。
实际操作中建议先安装 Sway,配置无误后再卸载原有的 DE 和 DM。这里我因为有 snapshot 就无所畏惧直接卸载了。实际上卸载 Xfce 后桌面就弹出来一堆报错,直接退到 LightDM,安装完 Sway 再卸载 LightDM,完了重启到 TTY 就说明一切正常。 ↩︎
其实是三个,还包括从 PulseAudio 迁移到 PipeWire。 ↩︎
不得不吐槽 Void 这个命名规则,像 ScreenFetch/SwayNotificationCenter 强制区分大小写,而字体文件命名更是五花八门,我一开始按照 Debian 的逻辑,搜到了
font-awesome6
,还以为全是这样的,看完font-
的补全也没找到,结果后来发现人家就叫nerd-fonts
……更生🌿️的是,这个完整软件包下载下来硬盘占用高达 6271MB!没有 SuperTTC,怎么也得发布个 TTC 吧……这大小太折磨了,于是选择安装只包含符号的nerd-fonts-symbols
↩︎