archlinux Sway图形桌面
我在 移动云架构 采用的 Asahi Linux 底层是arch linux,为了能够轻量级运行,采用 wayland显示服务器协议 核心的 sway - i3兼容Wayland compositor 图形桌面。
安装
建议同时安装:
pacman -S sway swaylock swayidle swaybg
安装 dmenu
wmenu
(dmenu
和rofi
虽然在sway环境工作良好,但是以来 Xwayland ,所以如果配置禁用 Xwayland,则推荐使用wmenu
)pacman -S wmenu
注意: 实际上 sway
现在默认推荐使用 wmenu
,所以模板配置中已经包含了使用 wmenu
而不是早期的 dmenu
,配置实际案例如下(默认配置无需修改):
wmenu
set $menu dmenu_path | wmenu | xargs swaymsg exec --
bindsym $mod+d exec $menu
( 由于alacritty不能很好支持中文输入,所以放弃 ) 安装alacritty作为终端 (参考 FreeBSD Sway桌面 ):
pacman -S alacritty
安装foot(默认sway轻量级终端):
pacman -S foot
安裝 swaybar:
pacman -S swaybar ttf-font-awesome
启动
Sway启动前需要访问硬件设备,例如键盘,鼠标和图形卡,这个硬件信息搜集称为一个 seat
(类似 FreeBSD Sway桌面)
设置访问方法一: polkit
(推荐)
如果系统同时安装了 systemd-logind
(不需要手工安装,默认 MacBook Air上运行Arch Linux 安装过程已经安装) 和 polkit
就能自动访问 seat
pacman -S polkit
设置访问方法二: 手工设置加入 seat
用户组
另一种方式是,如果没有安装 polkit
,则:
安装
seatd
pacman -S seatd
将自己加入 seat
用户组,然后激活和启动 seatd.service
usermod -aG seat admin
systemctl enable seatd.service
systemctl start seatd.service
如果没有将用户加入到 seat
组,则启动sway时候,终端会显示报错:
seat
组,则访问 /run/seatd.sock
无权限报错00:00:00.009 [wlr] [libseat] [libseat/backend/seatd.c:66] Could not connnect to sockt /run/seatd.sock: Permission denied
使用
启动sway
简单启动:
sway
(使用 polkit
)启动时终端提示:
polkit
直接使用 sway
启动终端输出00:00:00.124 [common/ipc-client.c:871] Unable to receive IPC response
dbus-run-session
启动sway(arch linxu似乎不需要)
警告
这次我绕了很多弯路, dbus-run-session
是我之前在 在Gentoo环境安装和使用Sway 中实践所使用的,但是我发现这次在arch linux中套用这个经验没有成功,阅读了arch linux wiki中有关sway的部分,也没有提到需要使用 dbus-run-session
,所以这段存留,但是 不要使用 。
如果 arch linux中文环境 ,启动时需要增加
dbus
支持:
dbus-run-session
启动 sway 这样能够正确获得 D-Bus session busdbus-run-session sway
(使用 polkit
)启动时终端提示:
polkit
使用 dbus-run-session
启动 sway 输出显示00:00:00.195 [wlr] [xwayland/server.c:454] Cannot find Xwayland binary "/usr/bin/Xwayland"
00:00:00:195 [sway/server.c:363] Failed to start Xwayland
2024-10:00 10:34:55 - [swayby-1.2.1/main.c:202] Found config * for output eDP-1 (Apple Computer inc 0x9CF4 0x01010102)
Environment variable $DISPLAY not set, ignoring.
Environment variable $XDG_CURRENT_DESKTOP not set, ignoring.
dbus-daemon[1943]: [session uid=505 pid=1943] Activating service name='org.freedesktop.systemd1' requested by ':1.0' (uid=505 pid=1964 comm="dbus-update-activation-environment --systemd DISPL")
dbus-daemon[1943]: [session uid=505 pid=1943] Activated service 'org.freedesktop.systemd1' failed: Process org.freedesktop.systemd1 exited with status 1
dbus-update-activation-environment: warning: error sending to systemd: org.freedesktop.DBus.Error.Spawn.ChildExited: Process org.freedesktop.systemd1 exited with status 1
00:00:00.061 [swaybar/tray/icon.c:340] Warning: no icon themes loaded
00:00:00.110 [common/ipc-client.c:87] Unable to receive IPC response
解决
安装
xwayland
pacman -S xorg-xwayland
备注
也可以不安装 xorg-xwayland
,上述报错只是因为arch linux默认的 sway
配置激活了 xwayland
,只需要禁止就可以阻止这个报错。也就是修改 ~/.config/sway/config
设置:
xwayland disable
可以 消除第1,2行有关xwayland错误 ,此时报错依然有关于dbus报错:
xwayland
后只解决了xwayland相关报错,但是dbus报错依旧2024-10:00 10:34:55 - [swayby-1.2.1/main.c:202] Found config * for output eDP-1 (Apple Computer inc 0x9CF4 0x01010102)
Environment variable $DISPLAY not set, ignoring.
Environment variable $XDG_CURRENT_DESKTOP not set, ignoring.
dbus-daemon[1943]: [session uid=505 pid=1943] Activating service name='org.freedesktop.systemd1' requested by ':1.0' (uid=505 pid=1964 comm="dbus-update-activation-environment --systemd DISPL")
dbus-daemon[1943]: [session uid=505 pid=1943] Activated service 'org.freedesktop.systemd1' failed: Process org.freedesktop.systemd1 exited with status 1
dbus-update-activation-environment: warning: error sending to systemd: org.freedesktop.DBus.Error.Spawn.ChildExited: Process org.freedesktop.systemd1 exited with status 1
00:00:00.061 [swaybar/tray/icon.c:340] Warning: no icon themes loaded
00:00:00.110 [common/ipc-client.c:87] Unable to receive IPC response
参考 process org.freedesktop.systemd1 exited with status 1 #5247 上述有关 org.freedesktop.systemd1
报错是由于 /usr/share/dbus-1/services/org.freedesktop.systemd1.service
有一段代码:
/usr/share/dbus-1/services/org.freedesktop.systemd1.service
执行 /bin/false
[D-BUS Service]
Name=org.freedesktop.systemd1
Exec=/bin/false
User=root
为何会出现调用 org.freedesktop.systemd1
呢,看起来这是一个检测功能。也就是说,当运行环境不满足 dbus
要求时候,就会走到调用这个注定返回 false
的子服务。会不会和上面两个没有设置的环境变量有关?
实践看来和这两个环境变量无关
参考 swaywm: XDG_CURRENT_DESKTOP not set ,我在执行 dbus-run-session sway
之前加上了一个环境变量:
XDG_CURRENT_DESKTOP
环境变量设置export XDG_CURRENT_DESKTOP=sway
可以消除环境变量错误,不过 dbus 相关的 org.freedesktop.systemd1
还是同样报错。
不过,仔细看了报错信息中有 dbus-update-activation-environment
,在 arch linux wiki: Sway #Configuration 有一段说明:
用户配置应该包含 include /etc/sway/config.d/*
以便引入配置片段。 sway
软件包提供了 50-systemd-user.conf
插入文件,该文件将多个环境变量导入 Systemd进程管理器 用户会话和 dbus
。这对于 xdg-desktop-portal-wlr
等多个应用程序是必须的。
想到之前在 在Gentoo环境安装和使用Sway 有设置环境变量 XDG_RUNTIME_DIR
经历,并且需要在 Gentoo xdg-desktop-portal 安装过对应的 xdg-desktop-portal-wlr
( wayland显示服务器协议 的 wlroots 后端xdg-desktop-portal ),所以参考上次实践也在 arch linux 中安装对应的 xdg-desktop-portal
:
xdg-desktop-portal
以及对应的后端 xdg-desktop-portal-wlr
+ xdg-desktop-portal-gtk
pacman -S xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk
我发现安装 xdg-desktop-portal-gtk
也会对应安装themes,所以能够消除上面找不到 icon themes
的报错(即消除了 Warning: no icon themes loaded
)
备注
暂时没有解决
配置
将sway系统配置复制过来修改:
cp /etc/sway/config ~/.config/sway/config
修改menu配置:
#set $term alacritty set $term foot set $menu dmenu_path | dmenu | xargs swaymsg exec --
还是没有解决dmenu唤起问题
(放弃)安装chrome和 VS Code
chrome很难支持中文输入,仅安装作为备用
vscode使用electron框架,实际上对中文输入支持也很差: 我决定回归到 Vim 进行开发
输入设备
支持配置touchpad: ~/.config/sway/config
:
input type:touchpad {
dwt enabled
tap enabled
natural_scroll enabled
middle_emulation enabled
}
备注
dwt
表示disable touchpad while typing
,这个功能非常有用,激活以后可以避免在sway中输入时候出现聚焦点漂移的问题。不过,我实践下来发现还是需要微调,对于Macbook Pro的touchpad过于灵敏DWT 可能对外接touchpad无效 DWT not working on Sway with Apple BT Trackpad + wireless keyboard
我参考 Disable Touchpad while typing not working 增加一个选项:
pointer_accel 0.6 # set mouse sensitivity (between -1 and 1)
如果要彻底关闭touchpad,参考 sway: Disabling Touchpad #1277
高分辨率屏幕
对于高分辨率屏幕(HiDPI),可以在 ~/.config/sway/config
中添加:
output <name> scale <factor>
这里 <name>
可以根据 swaymsg -t get_outputs
中输出显示设备名获得,而这里的 <factor>
通常可以设置为 2
。
注意,如果 factor
设置为非整数倍,则字体显示会有锯齿非常难看。
可以安装图形程序 wdisplays
( Arch Linux AUR 安装 )或者终端程序 wlr-randr
( Arch Linux AUR 安装 )来修改分辨率,旋转和排列显示器。
wdispalys
可以不用重新加载sway配置即时生效,但是和上文配置sway的 output <name> scale <factor>
类似,如果配置方法比率不是2或整数,则字体非常难看。
但是,放大比率2我感觉又有点过大了,所以我感觉还是采用调整终端字体以及配置浏览器的页面放大到 150% 较为合适。
锁屏
锁屏使用 swaylock
,并且可以参考 Script output over a random image in swaylock 切换锁屏图片 (尚未实践)
swaylock
结合 swaylock-effects
可以输出一些信息,如时间:
swaylock --clock --indicator --screenshots --effect-scale 0.4 --effect-vignette 0.2:0.5 --effect-blur 4x2 --datestr "%a %e.%m.%Y" --timestr "%k:%M"