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
...
终于找到原因了 说来也简单,但是折腾了我好久。我在两次尝试FreeBSD sway失败后,考虑到自己主要是做后端开发运维,在桌面花费太多时间了,所以改为部署 FreeBSD XFCE桌面 。因为XFce4对 wayland显示服务器协议 还是试验性支持,FreeBSD更是演进缓慢,所以实际上XFce4是传统的 X Window显示服务器协议 ,也就是通过 Xorg 运行。我猛然发现,原来在安装了 FreeBSD NVIDIA 之后,Xorg居然也不能启动。还好Xorg有一个详细的启动日志检查 /var/log/Xorg.0.log
会看到如下错误:
[ 33.248] (WW) NVIDIA(0): The NVIDIA GeForce GT 750M GPU installed in this system is
[ 33.248] (WW) NVIDIA(0): supported through the NVIDIA 470.xx Legacy drivers. Please
[ 33.248] (WW) NVIDIA(0): visit http://www.nvidia.com/object/unix.html for more
[ 33.248] (WW) NVIDIA(0): information. The 550.120 NVIDIA driver will ignore this
[ 33.248] (WW) NVIDIA(0): GPU. Continuing probe...
[ 33.248] (EE) No devices detected.
[ 33.248] (EE)
Fatal server error:
[ 33.248] (EE) no screens found(EE)
[ 33.248] (EE)
太乌龙了,原来解决的方法就是简单回滚安装旧版本 nvidia-driver
:
nvidia-driver
到 470.161.03
版本以适配 GeForce GT 750M Mac Edition
pkg remove nvidia-driver
pkg install nvidia-driver-470
看了一下 FreeBSD Handbook: 5.10 Wayland on FreeBSD 提到有3种Wayland Compositor:
Wayfire
Hikari
Sway
其中 hikari - A Wayland Compositor 声明是在FreeBSD上开发,但也支持Linux。并且有人提到使用非常顺畅,后续我也将尝试 FreeBSD hikari桌面