Sway
Sway 是一个平铺式 Wayland 合成器,并且是 i3 窗口管理器的直接替代品。它可以与您现有的 i3 配置一起工作,并支持 i3 的大部分功能,以及一些额外的功能。
Setup-desktop 脚本会自动启用 community 仓库。
使用 setup-desktop 安装
用于快速设置桌面环境的 Alpine Linux 脚本是 setup-desktop。
# setup-desktop
运行上述命令后,系统将提示您选择桌面环境。
选择哪个桌面环境? ('gnome', 'plasma', 'xfce', 'mate', 'sway', 'lxqt' 或 'none') [none]
选择桌面环境后,此脚本将安装所选桌面以及必要的软件包、firefox 浏览器,并添加必要的服务以在启动时运行。完成后您可以重启,系统将启动进入图形登录界面,显示桌面环境。根据选择的桌面,脚本还会激活必要的服务,如 dbus、elogind、登录管理器等。
要查看脚本为所选桌面安装的所有软件包,您可以发出以下命令
# cat /usr/sbin/setup-desktop
在启动 sway 之前,请为您的硬件安装合适的视频驱动程序。没有图形驱动程序可能会发生错误。
手动安装
以下安装步骤允许您为您的 Sway 桌面选择各种组件。
添加普通用户
使用 setup-user
添加一个非系统普通用户来运行 Sway。
# setup-user
设置 eudev
建议在 Alpine Linux 的桌面系统上设置 eudev。如果没有功能齐全的 设备管理器,用户将无法连接到输入设备。alpine-conf 软件包提供了 setup-devd 脚本,可轻松安装和设置设备管理器。
设置 eudev。
# setup-devd udev
有关更多详细信息和其他选项,请参阅 eudev。
安装图形驱动程序
为您的视频硬件安装 图形驱动程序。如果没有合适的驱动程序,Sway 将无法启动。
设置 seat 管理器
Wayland 合成器需要对输入和输出设备的原始访问权限。这由 seat 管理器 调解。
配置 seatd 或 elogind 中的任一者,因为两者都受支持。但是,同时使用两者可能会导致冲突。
安装字体
安装 DejaVu 字体,它具有良好的 Unicode 覆盖率
# apk add font-dejavu
安装 Sway
# apk add sway \ xwayland \ # 如果您需要 xserver foot \ # 默认终端模拟器。在配置中修改 $term 以使用不同的终端模拟器。 wmenu \ # 用于选择程序和屏幕共享监视器的默认 wayland 原生菜单 swaylock swaylockd \ # 锁屏工具 swaybg \ # 显示壁纸 grim \ # 屏幕截图工具 wl-clipboard \ # 剪贴板管理 i3status \ # 简单状态栏 swayidle # 空闲管理 (DPMS) 守护程序
有关补充软件替代方案,请参阅 sway wiki 或 Gentoo Wiki。
启动 sway
手动启动 sway
您可以通过从 TTY 发出命令 sway
来启动 sway。
$ sway
在 TTY 登录时自动启动 sway
dbus-run-session
运行是一个方便的包装器,它将显式导出会话总线的路径。将以下行添加到您的 ~/.profile 将仅在 tty1 中使用 D-Bus 自动启动 Sway
内容 ~/.profile
使用 Wrapper 脚本启动 sway
可以使用包装器脚本 sway-run
从 TTY 和轻量级显示管理器 greetd 启动 sway
,而不是使用 ~.profile 设置环境变量。这是一个 示例 包装器脚本
内容 /usr/local/bin/sway-run
使文件可执行: # chmod +x /usr/local/bin/sway-run
配置
Sway 配置文件
将默认 sway 配置文件复制到 ~/.config/sway/config,以便可以按用户自定义
$ mkdir -p ~/.config/sway $ cp /etc/sway/config ~/.config/sway/
通读它以了解默认的键绑定。Sway 配置在很大程度上与 i3 的配置向后兼容,如果您正在寻找特定问题的解决方案,您也可以尝试检查是否已为 i3WM 提供了解决方案。
有关其他信息,请从 man 5 sway
开始,并阅读 上游 wiki。
PipeWire 和屏幕共享
sway 合成器不参与音频播放。为了使屏幕共享工作,需要 pipewire。因此,也建议安装 PipeWire 以进行音频播放。
通过将以下内容添加到 sway config 文件中,使用 Sway 启动 PipeWire
exec /usr/libexec/pipewire-launcher
从屏幕共享的角度来看,应用程序分为两类
- 那些使用原生 wayland 协议 wlr-screencopy 的应用程序
- 那些使用来自 Flatpak 的
xdg-desktop-portal
的 API 的应用程序(此门户也供原生非 Flatpak 应用程序使用)。
第一组中的应用程序不需要额外的设置。第二组中的应用程序(包括 Firefox 和 Chromium)除了 PipeWire 之外,还需要设置 xdg 门户。
# apk add xdg-desktop-portal xdg-desktop-portal-wlr
如果您使用 dbus-run-session
包装器启动 sway,您还需要设置 D-Bus 变量,以便门户和屏幕共享功能通过将以下内容添加到 sway config 文件中来工作
exec dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
屏幕锁定和挂起到内存
使用 Elogind 的 loginctl suspend
命令使系统进入睡眠状态需要提升的权限或额外的配置。
要使系统在 600 秒后进入睡眠状态,请使用
exec swayidle -w timeout 600 'doas /bin/loginctl suspend'
如果程序正在全屏运行,则不锁定屏幕
for_window [app_id="^.*"] inhibit_idle fullscreen

如果您不希望在使用 PipeWire 播放媒体时锁定屏幕,请安装 wayland-pipewire-idle-inhibit 软件包,并将以下内容添加到 sway config 文件中
exec wayland-pipewire-idle-inhibit
如果需要,请根据 项目网站,更改配置文件 ~/.config/wayland-pipewire-idle-inhibit/config.toml。
Elogind 和 swayidle
swayidle
与 elogind
集成,可以处理 before-sleep
事件。
如果使用 swayidle before-sleep
,则会存在竞争条件,以便当您从挂起状态恢复计算机时,屏幕会在显示实际锁定屏幕之前显示一秒钟未锁定屏幕的内容。这可能是一个隐私问题。
要解决此问题,请执行以下操作
创建此文件 /etc/elogind/system-sleep/10-swaylock.sh
,然后将以下脚本添加到此文件中
#!/bin/sh if [ "${1}" == "pre" ]; then touch /tmp/swaylock-sleep sleep 1 fi
然后将其设置为可执行。
稍后,一旦安装了 sway,将以下行添加到 sway config 文件中
exec touch /tmp/swaylock-sleep && inotifyd swaylock /tmp/swaylock-sleep
使用此行,屏幕将在挂起到内存开始之前立即锁定。
亮度控制
有关亮度控制实用程序的信息,包括流行的 brightnessctl 实用程序,请参阅 背光。
高分辨率显示器的输出缩放
如果没有进一步的配置,程序界面在高分辨率显示器上可能会太小而无法使用。
Sway 支持每个显示器的配置
- 分数缩放(例如,1.5 倍),以及
- 整数缩放(例如,2 倍)
但是,不建议使用分数缩放,因为它会影响性能并产生模糊的输出。在这种情况下,如果 1 倍缩放太小而 2 倍缩放太大,则建议使用特定于程序的基于 GTK/QT 的缩放。请参见下文。
要启用 Sway 缩放,用户可以首先使用 wdisplays
软件包预览不同的缩放因子。记下输出名称 (eDP-1, LVDS-1) 并尝试应用缩放因子,例如 1 和 2。要使更改永久生效,请将以下内容添加到 sway config 文件中。
output <name> scale <factor>
要使用工具包缩放,请使用
# 对于基于 GTK 的程序,如 firefox 和 emacs: export GDK_DPI_SCALE=2 # 对于基于 QT 的程序 export QT_WAYLAND_FORCE_DPI="physical" # 或者如果仍然太小,请使用自定义 DPI export QT_WAYLAND_FORCE_DPI=192 # 2x 缩放 export QT_QPA_PLATFORM="wayland-egl"
屏幕截图
在 Wayland 下运行良好的一个简单工具是 Grimshot。示例键绑定
bindsym Print exec grimshot copy area bindsym Shift+Print exec grimshot copy screen bindsym Control+Print exec grimshot save area ~/Pictures/$(date +%d-%m-%Y-%H-%M-%S).png bindsym Control+Shift+Print exec grimshot save screen ~/Pictures/$(date +%d-%m-%Y-%H-%M-%S).png
有关屏幕截图工具列表,请参阅 sway wiki 的文章。
使剪贴板内容持久化
默认情况下,剪贴板内容在程序终止后不会持久化:您从 Firefox 复制一些文本,然后退出 Firefox,复制的文本也会丢失。
从 testing 仓库安装 clipman,并将以下内容添加到 sway config 文件中
exec wl-paste --type text/plain --watch clipman store --histpath="~/.local/state/clipman-primary.json" bindsym $mod+h exec clipman pick --tool wofi --histpath="~/.local/state/clipman-primary.json"
Firefox 画中画模式/浮动窗口
将此添加到您的 sway 配置文件中(修改数值以适合您的需求和显示器)
for_window [app_id="firefox" title="^Picture-in-Picture$"] floating enable, move position 877 450, sticky enable, border none
启动时启用 NumLock
将此添加到您的 sway 配置文件中
input type:keyboard xkb_numlock enabled
更改鼠标光标主题和大小
添加到您的 sway config 文件中
seat seat0 xcursor_theme my_cursor_theme my_cursor_size
例如,使用 GNOME Adwaita 主题设置鼠标光标
seat seat0 xcursor_theme Adwaita 16
您可以使用 echo $XCURSOR_SIZE
和 echo $XCURSOR_THEME
检查它们的值。如果重新加载配置没有导致更改,请尝试注销并重新登录。
$XCURSOR_SIZE
和 $XCURSOR_THEME
的值。自定义键盘布局
要使用自定义键盘布局,只需使用
input type:keyboard { xkb_file /path/to/my/custom/layout }
故障排除
如果遇到任何问题,请尝试运行 sway -Vc /etc/sway/config
。它将使用默认配置文件运行 sway,并将输出设置为更详细。通常,最好使用 git 跟踪您的配置文件(当且仅当您使用远程仓库时,出于安全原因,请保持其私有)。
要捕获 sway 错误日志到文件中以进行故障排除,请在您的启动文件中将 sway
替换为 sway -d 2> ~/sway_error.log
。
或者,您也可以从 TTY 发出以下命令。
$ sway -d 2> ~/sway_error.log
视频驱动程序问题
安装 sway 后,首次启动时,缺少合适的视频驱动程序会导致各种错误消息,例如
- “无法创建后端”
- “创建渲染器失败”
请为您的显卡安装必要的驱动程序,以便 sway 正常工作。
Flatpak
由于其沙盒化,flatpak 需要使用门户前端 (xdg-desktop-portal) 和后端(如 xdg-desktop-portal-wlr、xdg-desktop-portal-gtk、xdg-desktop-portal-gnome)来实现这些方法。如有疑问,请安装多个后端。有关后端的更多信息,请参阅 flatpak 关于此主题的页面。除了“Firefox 屏幕共享”部分下的步骤外,可能还需要在您的 Sway 配置文件中启动其他后端。否则,您可能会遇到 GDBus 错误,因为您的 flatpak 无法与门户交互。这可能会导致诸如从 flatpak 应用程序打开文件目录的问题。
安装不同的后端后,您可能需要将相关的后端添加到您的 sway 配置文件中,类似于上面的“Firefox 屏幕共享”部分。例如,您的 sway config 文件的自动启动部分可能包括
exec /usr/libexec/xdg-desktop-portal-gtk exec /usr/libexec/xdg-desktop-portal-wlr exec /usr/libexec/xdg-desktop-portal-gnome
只有当它们不是通过其他方式自动启动时才需要这样做。
Firefox (Flatpak) 和/或 GTK 应用
光标消失
您可能需要从 Pling 商店 获取图标包和主题,并设置 GTK_THEME
环境变量。或者,您可以为所有用户安装主题(在 Alpine Linux 软件包 中搜索 *-icon-theme),使用 apk add
。
缺少文件选择器/无法下载
转到 about:config 并将 widget.use-xdg-desktop-portal.file-picker
设置为 0。
Nvidia 问题
截至 2022 年 12 月 31 日,Nvidia 仍然没有完全支持 Wayland。因此,可能的解决方案如链接中所述,或将您的 WLR_BACKENDS 环境变量设置为 drm,libinput
或 x11
(如果您在启动 Sway 后无法使用鼠标和键盘,也在此处添加 libinput)。后者也适用于 AMD/ATI 显卡(确保首先安装 libinput)。