FreeBSD Sway桌面

sway - i3兼容Wayland compositor 是基于 wayland显示服务器协议 的轻量级图形管理器(和全功能的 xfce 不同)

准备工作

在安装 sway - i3兼容Wayland compositor 之前,首先需要为FreeBSD安装显卡驱动,这个安装是根据显卡硬件来决定的,例如我的 MacBook Pro 15” Late 2013 使用NVIDIA显卡,所以安装 FreeBSD NVIDIA驱动

如果是其他显卡芯片,例如Intel显卡,则需要 drm-kmod ,然后加载Intel i915驱动:

pkg install drm-fbsd13-kmod
kldload i915ksm

Sway安装

执行以下命令安装sway包:

sudo pkg install sway seatd
sudo service seatd onestart

sudo sysrc seatd_enable=YES

备注

seated是一个负责管理服务的daemon,对于运行sway必须,否则启动报错

Sway配置

最小化Sway配置 ~/.config/sway/config

input * xkb_rules evdev

不过,实际我采用 运行sway窗口管理器 方法,从系统安装包复制默认配置到用户目录:

mkdir -p ~/.config/sway
cp /usr/local/etc/sway/config ~/.config/sway/

修改 ~/.config/sway/config

# Logo key. Use Mod1 for Alt.
input * xkb_rules evdev
set $mod Mod4
# Your preferred terminal emulator
set $term alacritty
set $lock swaylock -f -c 000000
output "My Workstation" mode 1366x786@60Hz position 1366 0
output * bg ~/wallpapers/mywallpaper.png stretch
### Idle configuration
exec swayidle -w \
          timeout 300 'swaylock -f -c 000000' \
          timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
          before-sleep 'swaylock -f -c 000000'

需要配置一些环境变量以便用户能够运行sway,例如 XDG 运行目录。通常显示管理器会处理这些环境变量,但是从控制台终端启动时需要自己处理:

export XDG_RUNTIME_DIR=/tmp/`id -u`-runtime-dir
test -d "$XDG_RUNTIME_DIR" || \
{ mkdir "$XDG_RUNTIME_DIR" ; chmod 700 "$XDG_RUNTIME_DIR" ;  }

注意,如果使用 sh 作为SHELL,则编辑 ~/.shrc 添加:

export XDG_RUNTIME_DIR=/var/run/user/`id -u`

如果使用 tcsh 作为SHELL,则编辑 ~/.cshrc 添加:

setenv XDG_RUNTIME_DIR /var/run/user/`id -u`

备注

有用户报告在ZFS上使用Wayland客户端问题,原因是runtime目录需要访问 posix_fallocate() ,虽然作者没有重新问题,但是如果遇到类似问题,建议将运行目录改为 tmpfs

mount -t tmpfs tmpfs /var/run

安装Sway实用工具

  • 为了能够更好实用sway,安装一些和i3兼容的程序:

    # pkg install alacritty dmenu dmenu-wayland
    pkg install sway swayidle swaylock-effects alacritty dmenu-wayland dmenu
    

启动sway

  • 启动sway之前,需要将自己的id加入到 video 用户组(这个组可以访问 /var/run/seatd.sock ):

    pw groupmod video -m huatai
    
  • 启动:

    sway
    

可能出现报错:

...
00:00:10.109 [wlr] [backend/backend.c:217] Found 0 GPUs, cannot create backed
00:00:10.109 [wlr] [backend/backend.c:386] Failed to open any DRM device
00:00:10.109 [sway/server.c:56] Unable to create backend
...

太难了,我尝试参考 NVIDIA (495) on sway tutorial + questions (Arch-based distros) 做了各种尝试,例如配置:

export XDG_RUNTIME_DIR=/var/run/user/`id -u`


#export LIBVA_DRIVER_NAME=nvidia
#export MOZ_ENABLE_WAYLAND=1
#export GDK_BACKEND=wayland
#export QT_QPA_PLATFORM=wayland-egl
#export QT_WAYLAND_DISABLE_WINDOWDECORATION=1

export CLUTTER_BACKEND=wayland
export SDL_VIDEODRIVER=wayland
export XDG_SESSION_TYPE=wayland
export QT_QPA_PLATFORM=wayland
export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
export MOZ_ENABLE_WAYLAND=1
export GBM_BACKEND=nvidia-drm
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export WLR_NO_HARDWARE_CURSORS=1

但都没有解决这个问题

看了一下 FreeBSD Handbook: 5.10 Wayland on FreeBSD 提到有3种Wayland Compositor:

  • Wayfire

  • Hikari

  • Sway

其中 hikari - A Wayland Compositor 声明是在FreeBSD上开发,但也支持Linux。并且有人提到使用非常顺畅,所以我改为尝试 FreeBSD hikari桌面

参考