Sway

来自 阿尔派 Linux

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 管理器 调解。

配置 seatdelogind 中的任一者,因为两者都受支持。但是,同时使用两者可能会导致冲突。

安装字体

安装 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 wikiGentoo Wiki。

启动 sway

手动启动 sway

您可以通过从 TTY 发出命令 sway 来启动 sway。

$ sway

在 TTY 登录时自动启动 sway

注意: D-Bus 是 Firefox 和 Chromium 中 PipeWire 和屏幕共享所必需的。使用 dbus-run-session 运行是一个方便的包装器,它将显式导出会话总线的路径。

将以下行添加到您的 ~/.profile 将仅在 tty1 中使用 D-Bus 自动启动 Sway

内容 ~/.profile

export XDG_VTNR=$(basename "$(tty)" | sed 's/tty//') if [ -z "$WAYLAND_DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then exec dbus-run-session sway fi

使用 Wrapper 脚本启动 sway

可以使用包装器脚本 sway-run 从 TTY 和轻量级显示管理器 greetd 启动 sway,而不是使用 ~.profile 设置环境变量。这是一个 示例 包装器脚本

内容 /usr/local/bin/sway-run

#!/bin/sh # Session export XDG_SESSION_TYPE=wayland export XDG_SESSION_DESKTOP=sway export XDG_CURRENT_DESKTOP=sway # Wayland stuff export MOZ_ENABLE_WAYLAND=1 export QT_QPA_PLATFORM=wayland export SDL_VIDEODRIVER=wayland export _JAVA_AWT_WM_NONREPARENTING=1 # If using seatd instead of elogind uncomment the below line # export LIBSEAT_BACKEND=seatd # Launch Sway with a D-Bus server available, use: dbus-run-session -- sway

使文件可执行: # 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

屏幕锁定和挂起到内存

提示: 对于 seat 管理器和 de/wm 不可知工具,请考虑 zzz 实用程序或 powerctl 实用程序,这些实用程序在 testing 仓库中可用,用于管理挂起和休眠。

使用 Elogindloginctl suspend 命令使系统进入睡眠状态需要提升的权限或额外的配置。

要使系统在 600 秒后进入睡眠状态,请使用

exec swayidle -w timeout 600 'doas /bin/loginctl suspend'

如果程序正在全屏运行,则不锁定屏幕

for_window [app_id="^.*"] inhibit_idle fullscreen
待办事项: 需要测试以下与 wayland-pipewire-idle-inhibit 相关的选项。如果您发现以下选项有效,请删除此待办事项。


如果您不希望在使用 PipeWire 播放媒体时锁定屏幕,请安装 wayland-pipewire-idle-inhibit 软件包,并将以下内容添加到 sway config 文件中

exec wayland-pipewire-idle-inhibit

如果需要,请根据 项目网站,更改配置文件 ~/.config/wayland-pipewire-idle-inhibit/config.toml

Elogind 和 swayidle

swayidleelogind 集成,可以处理 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_SIZEecho $XCURSOR_THEME 检查它们的值。如果重新加载配置没有导致更改,请尝试注销并重新登录。

注意: Wayland 允许客户端光标。应用程序可能不评估 $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,libinputx11(如果您在启动 Sway 后无法使用鼠标和键盘,也在此处添加 libinput)。后者也适用于 AMD/ATI 显卡(确保首先安装 libinput)。

参见