FreeBSD XFCE桌面

备注

目前我比较倾向于使用基于 wayland显示服务器协议FreeBSD Sway桌面 ,不过最近的实践配置存在问题( 已解决 每次从头开始安装总会遇到意想不到的问题)所以目前采用 xfce 以便简化桌面复杂度,专注于后端服务器开发运维。

Xorg

  • 安装Xorg:

安装Xorg
pkg install xorg

并将自己加入 video 组:

admin 用户加入 video 组(举例)
pw groupmod video -m admin

备注

目前XFCE 4.20 的几乎所有组件都能够运行在 wayland显示服务器协议 窗口(实验性),并且依然保留了支持X11窗口。 libxfce4windowing 库引入来处理Wyaland和X11支持,现在已经不再需要XWayland。

不过,由于Xfce尚未正式确定何时在 Xfwm4 中添加Wayland支持同时依然保持X11功能,所以我目前不会尝试折腾(桌面实在太浪费时光了)

顺其自然,我暂时保留在X Window环境,专注于探索后端服务和开发。

NVIDIA显卡

备注

我的 MacBook Pro 15" Late 2013 使用了Nvidia显卡

安装NVIDIA驱动
# 安装驱动
# pkg install nvidia-driver

# 我的笔记本显卡 "[GeForce GT 750M Mac Edition]" 太古老,只能使用指定的470.xx驱动
pkg install nvidia-driver-470
配置启动时加载nvidia驱动
sysrc kld_list+=nvidia-modeset

可选安装 nvidia-xconfig ,我实践发现如果没有为NVIDIA显卡创建 xorg.conf ,则启动XFce4时无法运行 X Window显示服务器协议 不过这不是必须的,实际上可以手工配置

安装nvidia-xconfig
pkg install nvidia-xconfig

# 生成配置
nvidia-xconfig

如果没有采用上述的 nvidia-xconfig ,也可以参考 HOWTO: Setup Xorg with NVIDIA'driver 简单配置一个 /usr/local/etc/X11/xorg.conf.d/driver-nvidia.conf 就可以正常运行Xorg:

配置一个 driver-nvidia.conf 引导Xorg正确使用NVIDIA驱动
Section "Device"
        Identifier "NVIDIA Card"
        VendorName "NVIDIA Corporation"
        Driver "nvidia"
EndSection

Intel显卡

备注

我的 ThinkPad X220笔记本 使用Intel显卡

FreeBSD Sway桌面 过程安装了Intel显卡驱动,步骤如下;

Intel显卡内核模块加载
pkg install drm-kmod
kldload i915kms

# 配置启动时加载intel显卡驱动
sysrc kld_list+=i915kms

XFCE

  • 安装XFCE:

安装Xfce4
# pkg install xorg xfce xfce4-goodies lightdm lightdm-gtk-greeter dbus

# 按照FreeBSD Handbook,安装xfce会自动安装依赖 dbus-daemon
pkg install xfce

# 安装xfce插件和应用
# firefox使用pulseaudio
pkg install xfce4-pulseaudio-plugin xfce4-screensaver ristretto

# 安装应用软件
# parole和pragha是Fedora选择的xfce配套程序,不过我选择vlc来兼顾
# remmina-lite 适配xfce,完整remmina依赖gnome
pkg install firefox keepassxc mupdf flameshot vlc remmina-lite

备注

参考 FreeBSD从入门到跑路: 第 4.20 节 声卡设置 FreeBSD 大部分软件的音频输出驱动为 oss。有些默认是 pulseaudio(比如 firefox)

安装了 xfce4-pulseaudio-plugin 可以很方便调整音频,特别是切换音频通道。不过,也可以通过命令行切换:

检查当前声卡设备, default 行就是当前使用默认设备(音频从这个设备输出)
nstalled devices:
pcm0: <NVIDIA (0x0042) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x0042) (HDMI/DP 8ch)> (play)
pcm2: <NVIDIA (0x0042) (HDMI/DP 8ch)> (play)
pcm3: <Cirrus Logic (0x4208) (Analog 4.0/2.0)> (play/rec) default
pcm4: <Cirrus Logic (0x4208) (Analog Headphones)> (play)
pcm5: <Cirrus Logic (0x4208) (Digital)> (play)
No devices installed from userspace.
修改输出的设备。最后的数字是对应的 pcm 后面的数字
sysctl hw.snd.default_unit=5

软件包说明:

XFCE4软件包说明

软件包

说明

xorg

X显示服务器

xfce

xfce桌面

xfce4-goodies

xfce桌面的应用以及美化

lightdm

图形桌面管理器

lightdm-gtk-greeter

传统GDM启发而来的高度可配置登陆屏幕

dbus

提供两个应用程序间一对一通讯

  • XFCE需要系统挂载 /proc ,所以在 /etc/fstab 中添加以下内容以便在系统启动时挂载好:

配置 /etc/fstab 挂载 /proc
# Device                Mountpoint      FStype  Options         Dump    Pass#
proc                    /proc           procfs  rw              0       0
  • 安装XFCE会依赖安装 dbus-daemon ,并且需要在系统中激活 D-BUS :

激活系统启动时启动dbus
sysrc dbus_enable="YES"
  • 安装 x11/lightdm (一个轻量级显示管理器,使用内存很少且快速):

安装 lightdm
pkg install lightdm lightdm-gtk-greeter

# 启动操作系统时自动启动lightdm
sysrc lightdm_enable="YES"

# 如果手工启动XFCE,则在 ~/.xinitrc 添加配置

异常排查

备注

本段异常排查是 MacBook Pro 15" Late 2013 的NVIDIA显卡异常

报错显示我的笔记本显卡太陈旧,只能使用 NVIDIA 470.xx 驱动,我安装了最新的 550.120 驱动启动时Xorg日志报错;

  • 启动:

    startxfce4
    

报错,检查 /var/log/Xorg.0.log 有如下错误:

提示需要使用旧版470.xx,直接忽略了错误的高版本550驱动
[    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 GeForce GT 750M GPU 太古老了,已经被最新的 510.60.02 放弃支持了,需要回退到 NVIDIA 470.xx Legacy drivers 。难怪之前 FreeBSD Sway桌面FreeBSD hikari桌面 都失败了

参考 NVIDIA Unix Driver Archive 可以看到,对于 FreeBSD x86 ,最新的 Latest Legacy GPU version (470.xx series) : 470.141.03

搜索一下,在FreeBSD仓库,则是 nvidia-driver-470-470.129.06 (之前安装了最新的 nvidia-driver-510.60.02 ):

安装 nvidia-driver-470
pkg delete nvidia-driver-510.60.02
pkg install nvidia-driver-470-470.129.06

然后重启系统,再次重试成功

结束X后黑屏

我遇到一个问题,就是启动 startxfce4 之后,结束会话会出现黑屏

  • 检查显卡所在pci位置:

    # pciconf -l | grep vga
    vgapci0@pci0:1:0:0:  class=0x030000 rev=0xa1 hdr=0x00 vendor=0x10de device=0x0fe9 subvendor=0x106b subdevice=0x0130
    

则修改 /etc/X11/xorg.conf

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    # 添加以下这行
    BusID          "PCI:1:0:0"
EndSection

添加 BusID 时候,不要在PCI 包含domain ID,也就是说 pci0:1:0:0 写成 PCI:1:0:0

不过,仅仅上述修改还没有解决问题,真正解决问题是修订了 /etc/rc.conf ,将:

kld_list="nvidia-modeset"

修改为:

linux_enable="YES"
dbus_enable="YES"
hald_enable="YES"
lightdm_enable="YES"
kld_list="nvidia nvidia-modeset linux"

才解决: 现在启动时候就是 lightdm ,并且退出也能够正常回到窗口管理器。我感觉关键行是:

dbus_enable="YES"
hald_enable="YES"

因为在此之前我检查过 kldstat 输出,原本就已经加载了:

linux
nvidia
nvidia-modeset

也就是说 kld_list 默认已经加载了

不过,虽然解决了 FreeBSD NVIDIA驱动 的版本问题,但是运行 FreeBSD Sway桌面FreeBSD hikari桌面 报错依旧

配置Greeter和LightDM

  • 修改 /usr/local/etc/lightdm/lightdm.conf 启用:

    greeter-session = lightdm-gtk-greeter
    
  • 修改 /etc/rc.conf 添加:

    lightdm_enable="YES"
    

Thunar

Xfce官方文档显示Thunar有一个插件 thunar-shares-plugin 可以使用Samba共享一个目录而无需root权限。但是我在FreeBSD中通过 pkg search thunar 没有找到该插件,似乎发行版没有提供这个插件。

emoji字体

在WEB网站以及一些 Node.js 程序经常会使用emoji字体,系统如果不安装对应字体就会显示为奇怪的方框乱码。常用的emoji字体有 Google Noto Color EmojiEmojiOne Android ,在FreeBSD平台可以直接安装 x11-fonts/noto-emoji 字体来实现展示:

安装emoji字体
pkg install x11-fonts/noto-emoji

安装以后firefox浏览器就能够显示WEB页面中的emoji字体,不过很奇怪的是 xfce4-terminal 却不能正常显示。虽然网上信息显示gnome-termianl和alacritty是支持emoji的,但是我尝试了以后依然没有解决。看起来这问题不是终端模拟器问题,而是 gtk 底层没有支持emoji,因为我发现安装了 noto-emoji 字体后,在一些XFCE的配置选择字体窗口,gtk显然没有正常渲染emoji,而在 FreeBSD中文环境 中我选择的 rime 输入法字体选择框中当出现emoji文字时也无法正常显示。这个共性问题集中显示在和gtk组件有关,从网上信息来看似乎和底层 libcairo 库有关。我不清楚为何在FreeBSD中存在问题,目前影响不大,暂时忽略。

参考