设置Alpine Linux的sway桌面

安装显卡驱动

NVIDIA显卡

我的 MacBook Air 11" Late 2010 使用的是 NVIDIA 显卡硬件,在Alpine Linux平台只能使用 Nouveau 开源驱动,原因是NVIDIA GPU的私有驱动不提供Alpine Linux的 musl C库驱动。

  • 安装 xf86-video-nouveau :

安装 Nouveau 驱动
apk add xf86-video-nouveau
  • 由于我准备使用 wayland显示服务器协议 ,所以需要安装以下软件包:

    • mesa-dri-gallium : Mesa驱动所需

    • mesa-va-gallium : VA-API驱动,用于硬件加速的视频编码和解码

安装mesa驱动依赖软件包
apk add mesa-dri-gallium mesa-va-gallium
  • 重启系统,然后通过 lspci -vv 检查,确保显卡使用的驱动是 nouveau

Intel显卡

备注

MacBook Air 13" Early 2014 使用的是 Intel 显卡(CPU集成的iGPU),但是处理器是早期的 Haswell 架构,内置的iGPU不支持 x265 (HEVC)硬件加速,所以在VLC播放当前主流的x265编码mkv视频会非常卡顿,无法观看。所以需要在高端GPU环境做视频转换为 x264 mp4格式来兼容播放,或者使用 Jellyfin - 开源媒体系统(服务) 来在线转换播放

我组装的服务器使用了 Intel Xeon E-2274G 是第八代Cofee Lake 微处理器架构,则内置支持 x265 硬件加速视频解码

  • 首先安装Mesa驱动:

安装mesa驱动依赖软件包
apk add mesa-dri-gallium mesa-va-gallium
  • 按照Intel不同CPU/iGPU安装以下驱动之一:

    • intel-media-driver : VAAPI驱动,用于硬件加速视频编码和解码,用于Intel Broadwell(第五代CPU, 2014年10月27日发布)及更新

    • libva-intel-driver : VAAPI驱动,用于早于Broadwell的设备,例如我的 MacBook Air 13" Early 2014 是 HASWELL 处理器,就使用这个驱动

      • Intel显卡通过 VA-API 来加速视频解码,所以当使用 VLC 来播放视频时,需要系统安装好 libva-intel-driver

      • 相关信息也可以参考 Fedora 43 Post Install Guide

    • linux-firmware-i915 : 如果在dmesg中出现i915驱动报有关firmware错误,则安装这个软件包

安装intel显卡驱动
# 我的iGPU是Haswell
apk add libva-intel-driver
  • 对于Intel显卡还需要设置一个环境变量来让显卡正常工作

Haswell 及早期显卡(我的 MacBook Air 13" Early 2014 intel显卡选这个):

Haswell 及早期显卡需要环境变量
export MESA_LOADER_DRIVER_OVERRIDE=crocus

较新的Intel显卡则选择 Iris 驱动(Broadwell处理器及更新代):

Broadwell 及更新的显卡需要环境变量
export MESA_LOADER_DRIVER_OVERRIDE=iris

sway

自动安装方式

alpine linux 提供了一个结合使用 eudevelogind 的自动化Sway桌面安装:

自动化方式安装sway
setup-desktop sway

我发现上述安装命令实际上在后台执行了如下安装:

自动化方式安装sway执行的命令
apk add elogind polkit-elogind eudev firefox font-dejavu foot grim i3status sway \
        swayidle swaylockd util-linux-login wl-clipboard wmenu xwayland

安装过程有提示

自动化方式安装sway执行过程的提示
...
(72/106) Installing icu-data-en (76.1-r1)
Executing icu-data-en-76.1-r1.post-install
*
* If you need ICU with non-English locales and legacy charset support, install
* package icu-data-full.
*
(73/106) Installing icu-libs (76.1-r1)
...
 * Starting udev ...                                             [ ok ]
 * Generating a rule to create a /dev/root sym                   [ ok ]
 * Populating /dev with existing devices throu                   [ ok ]
 * Waiting for uevents to be processed ...                       [ ok ]
 * service cgroups added to runlevel default
 * /run/dbus: creating directory
 * /run/dbus: correcting owner
 * Starting System Message Bus ...                               [ ok ]
 * service dbus added to runlevel default
 * service acpid deleted from runlevel default

手工安装方式

备注

第一次在alpine linux上 手动配置没有成功 (启动 sway 出现segment fault),所以改为采用自动配置方法完成。 自动化步骤采用了 eudevelogind ,和我的手工步骤不同。

不过,因为后来在 FreeBSD Sway桌面 实践时最终解决了安装运行和中文输入,并且手工安装非常精简,所以我重新尝试在alpine linux采用手工安装方式。

  • 安装sway桌面:

安装 sway 桌面
apk add sway
安装设置seatd
# 安装seatd 
sudo apk add seatd

# 配置服务启动
sudo rc-update add seatd
sudo rc-service seatd start

# 将当前用户(admin)加入seat组
doas adduser $USER seat

配置环境变量(现在可能不需要了,seatd会自动处理):

设置 $XDG_RUNTIME_DIR 环境变量
export XDG_RUNTIME_DIR="/tmp/user/"`id -u`
if [ ! -d $XDG_RUNTIME_DIR ]; then
    mkdir -p $XDG_RUNTIME_DIR
    chmod 0700 $XDG_RUNTIME_DIR
fi

sway配置

  • 安装一些辅助工具:

安装 sway 桌面 工具
# 第一次实践时采用的安装方法
apk add foot        \ # 默认终端
        wmenu       \ # 默认原生菜单
        swaylock swaylockd   \ # 屏幕锁定,swaylockd是后台daemon,确保swaylock持续运行(即使崩溃也能立即恢复)
        swaybg      \ # 墙纸显示
        swayidle    \ # 系统进入idle一段时间后运行一个命令,典型的如锁定屏幕或者关闭显示屏
        wl-clipboard \ # 剪贴板管理器,建议结合 cliphist (没有apk包,需要go编译源码,有点重)使用
        i3status      # 提供丰富状态,比默认swaybar更好

# 现在采用的更为精简的安装方法
apk add foot        \ # 默认终端
	swaylock-effects \ # 会同时自动安装swaylock
        swaybg      \ # 墙纸显示
        swayidle    # 系统进入idle一段时间后运行一个命令,典型的如锁定屏幕或者关闭显示屏

# dmenu-wl 目前位于 testing 仓库
apk add dmenu-wl --update-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing

  • 复制配置以便定制:

复制配置文件
mkdir -p ~/.config/sway
cp /etc/sway/config ~/.config/sway/
sway配置touchpad
input type:touchpad {
    dwt enabled
    tap enabled
    natural_scroll enabled
    middle_emulation enabled
}

PipeWire配置(可能不需要)

Sway compositor 不参与音频播放,并且屏幕共享功能需要 PipeWire,所以为了实现音频播放,建议同时安装PipeWire。Alpine Linux v3.22版本开始,提供了脚本可以在OpenRC中将PipeWire作为用户服务启动。

从屏幕共享的角度来看,应用程序分为两类:

  • 使用原生 Wayland wlr-screencopy 协议的应用程序

  • 使用 Flatpak xdg-desktop-portal API 的应用程序(原生非 Flatpak 应用程序也使用这个portal)

第一类应用无需额外设置,第二类应用程序(包括Firefox和chromium)除了PipeWire,还需要设置 xdg portal

我这里按照 Alpine Linux wiki: Sway 文档设置

  • 安装 xdg portal :

安装 xdg portal
apk add xdg-desktop-portal xdg-desktop-portal-wlr
  • 对于使用 dbus-run-session 包装运行Sway,需要设置环境变量才能使portal和screensharing功能工作,所以设置 ~/.config/sway/config 在开头添加一行:

设置 ~/.config/sway/config 在开头添加一行环境变量配置
exec dbus-update-activation-environment WAYLAND_DISPLAY DISPLAY XDG_CURRENT_DESKTOP=sway SWAYSOCK I3SOCK XCURSOR_SIZE XCURSOR_THEME

启动sway

第一次失败的排查

  • 首先尝试直接启动 sway 命令

我遇到一个报错:

启动 sway 出现Segmentation fault
Segmentation fault5 - [main.c:5711 wl_display_roundtrip failedialize backend.ES=1 to suppress this check

检查系统 dmesg 日志显示:

dmesg 日志显示sway段错误
[ 5715.147674] sway[2952]: segfault at 8 ip 00007ff10ef30777 sp 00007ffe593833f8 error 6 in libwayland-server.so.0.23.1[6777,7ff10ef2e000+6000] likely on CPU 0 (core 0, socket 0)
[ 5715.147699] Code: 00 00 48 8b 44 24 08 48 83 c4 10 5d 41 5c 41 5d c3 48 8b 47 08 48 8d 77 10 48 8b 78 08 ff 25 e0 95 00 00 48 8b 47 08 48 8b 17 <48> 89 42 08 48 89 10 31 c0 48 89 47 08 48 89 07 c3 48 83 c7 20 ff
[ 7870.482773] perf: interrupt took too long (5092 > 5051), lowering kernel.perf_event_max_sample_rate to 39000

警告

我发现自动安装步骤比我手工安装步骤要完整,并且没有遇到启动问题。所以我重新用自动安装方法安装,这个crash问题就没有了

第二次排查(成功)

我在最近一次 MacBook Air 11" Late 2010 手工部署sway最终成功,不过也在启动say时候遇到过如下报错:

启动sway显示renderer错误
019 [sway/server.c:236] Failed to create renderernitialize renderer(0x3001), message: "eglInitialize"o load driver"n"

这个错误实际上就是手册 Alpine Linux wiki: NVIDIA 提到的 driver auto-selection does not work 只不过我的现象和手册说的不一样(手册举例的现象是看不到鼠标指针,而我遇到的是压根进不了sway),通过在环境配置 ~/.profile 添加如下配置解决:

添加环境变量强制使用 nouveau 驱动
# 避免自动选择驱动失败,强制指定nouveau
export MESA_LOADER_DRIVER_OVERRIDE=nouveau

# 配置VA-API也使用nouveau
export LIBVA_DRIVER_NAME=nouveau

配置自动登录sway

  • 终端自动启动,配置 ~/.profile :

配置在终端tty1自动启动sway
...
# If running from tty1 start sway
if [ "$(tty)" = "/dev/tty1" ]; then
     exec dbus-run-session sway
fi

中文环境

备注

好消息!

我在alpine linux 3.22 上实践验证(2025/11/1),现在 fcitx 5 在 sway 环境已经非常完善,甚至连 feet 终端也能够直接使用,不再像以前需要补丁才能终端输入中文。

  • 安装中文字体 Noto Sans CJK(思源黑体)

Noto Sans CJK(思源黑体) 字体是Adobe和Google联合开发的字体家族,其设计目的是支持中文、日文和韩文(CJK)。思源黑体的设计现代、清晰,并提供多种字重(粗细)选择。比早期Linux发行版使用的 文泉驿正黑(WenQuanYi Zen Hei) 包含更多且支持所有CJK自负,并未一些扩展区自负提供支持

alpine linux 提供了2个 Noto Sans CJK(思源黑体) 字体软件包: font-noto-cjkfont-noto-cjk-extra

安装 Noto Sans CJK(思源黑体) 字体
apk add font-noto-cjk
  • 安装fcitx5中文输入法:

安装中文输入法
apk add fcitx5 fcitx5-rime \
        fcitx5-gtk3 \           # firefox中文输入框需要fcitx5-gtk3
        rime-plum-data          # 相当于arch linux的 librime-data 元软件包,包含了rime的输入方案 "明月拼音"

备注

如果要交互配置,可以补充安装 fcitx5-configtool 工具包,等配置完成后再卸载

不过更简单的方法是从其他相似环境中复制配置,例如 FreeBSD中文环境 我采用从 Arch Linux 上复制已经通过 fcitx5-configtool 配置好的配置文件(同样采用 fcitx5-rime ): fcitx5.tar.gz

添加fcitx配置
export MESA_LOADER_DRIVER_OVERRIDE=crocus

export MOZ_DBUS_REMOTE=1
export GTK_USE_PORTAL=0
export XMODIFIERS=@im=fcitx

# Enable Wayland support for Mozilla Firefox
export MOZ_ENABLE_WAYLAND=1

# If running from tty1 start sway
if [ "$(tty)" = "/dev/tty1" ]; then
     exec dbus-run-session sway
fi

这里配置和我在 FreeBSD Sway桌面 中有点不同,不过验证是正常工作的,完整配置如下( MacBook Air 11" Late 2010 ):

完整 ~/.profile 配置
export MESA_LOADER_DRIVER_OVERRIDE=nouveau
export LIBVA_DRIVER_NAME=nouveau

export MOZ_DBUS_REMOTE=1
export GTK_USE_PORTAL=0
export XMODIFIERS=@im=fcitx

# Enable Wayland support for Mozilla Firefox
export MOZ_ENABLE_WAYLAND=1

if [ "$(tty)" = "/dev/tty1" ]; then
     exec dbus-run-session sway 
fi
  • 修订 ~/.config/sway/config :

在 ~/.config/sway/config 中 最后 添加运行 fcitx5 的配置
exec_always --no-startup-id  fcitx5 -d

rime候选字框

我遇到一个问题是虽然安装了 fcitx-gtk3 ,已经看到状态栏显示了 rime 图标,并且按下 ctrl+space 也确实看到了 enrime图标 来回切换,但是就是不出现候选字符框

按照 arch linux wiki: Rime 提示,如果使用 fcitx5-rime 则rime的配置文件位于 ~/.local/share/fcitx5/rime/ 。我确实找到这个目录,但是没有看到其中有配置输入法内容。按照arch linux wiki说明: Rime 需要输入方案才能工作,用户可以定制输入方案。默认情况下,一些方案随着 librime-data 元软件包一起安装,因为它是 librime 的依赖项

另外 arch linux 将 rime 官方输入方案分为多个软件包,例如我以前用的 rime-luna-pinyin 明月拼音

不过,在 alpine linux 中, 我不知道哪个软件包对应 我终于尝试出了,原来需要安装 rime-plum-data 软件包。安装以后退出重新登陆,再次用 ctrl+space 就能够看到明月输入法的候选字框

备注

我尝试了rime激活时,按下 super+~ ,能够出现 Quick Phrase 框,看起来确实没有安装 rime-luna-pinyin 明月拼音这样的软件包

搜索发现似乎是 rime-plum-data 说明为 Rime configuration manager and input schemas (input schemas) 東風破 是 中州韻輸入法引擎 的配置管理工具: GitHub: rime/plum 这个管理工具可以用来安装不同的输入方案,例如 bash rime-install luna-pinyin 安装明月拼音:

The one-liner runs the rime-install script to download preset packages and install source files to Rime user directory. (Yet it doesn't enable new schemas for you)

经过尝试,我发现在 alpine linux 中安装 rime-plum-data 就相当于 arch linux 中安装 librime-data 软件包(根据arch linux wiki说明,该元软件包是librime的依赖项,会随之安装输入方案)

桌面应用

参考