.. _freebsd_xfce4: ================== FreeBSD XFCE桌面 ================== .. note:: 目前我比较倾向于使用基于 :ref:`wayland` 的 :ref:`freebsd_sway` ,不过最近的实践配置存在问题( :strike:`已解决` 每次从头开始安装总会遇到意想不到的问题)所以目前采用 :ref:`xfce` 以便简化桌面复杂度,专注于后端服务器开发运维。 Xorg ======== - 安装Xorg: .. literalinclude:: freebsd_xfce4/install_xorg :caption: 安装Xorg 并将自己加入 ``video`` 组: .. literalinclude:: freebsd_wayland_sway/group_add_video :caption: 将 ``admin`` 用户加入 ``video`` 组(举例) .. note:: 目前XFCE 4.20 的几乎所有组件都能够运行在 :ref:`wayland` 窗口(实验性),并且依然保留了支持X11窗口。 ``libxfce4windowing`` 库引入来处理Wyaland和X11支持,现在已经不再需要XWayland。 不过,由于Xfce尚未正式确定何时在 ``Xfwm4`` 中添加Wayland支持同时依然保持X11功能,所以我目前不会尝试折腾(桌面实在太浪费时光了) 顺其自然,我暂时保留在X Window环境,专注于探索后端服务和开发。 NVIDIA显卡 ------------- .. note:: 我的 :ref:`mbp15_late_2013` 使用了Nvidia显卡 - :ref:`freebsd_nvidia-driver` 安装配置 .. literalinclude:: freebsd_nvidia-driver/install_nvidia :caption: 安装NVIDIA驱动 .. literalinclude:: freebsd_nvidia-driver/kld :caption: 配置启动时加载nvidia驱动 可选安装 ``nvidia-xconfig`` ,我实践发现如果没有为NVIDIA显卡创建 ``xorg.conf`` ,则启动XFce4时无法运行 :ref:`x_window` **不过这不是必须的,实际上可以手工配置** .. literalinclude:: freebsd_nvidia-driver/install_nvidia-xconfig :caption: 安装nvidia-xconfig 如果没有采用上述的 ``nvidia-xconfig`` ,也可以参考 `HOWTO: Setup Xorg with NVIDIA'driver `_ 简单配置一个 ``/usr/local/etc/X11/xorg.conf.d/driver-nvidia.conf`` 就可以正常运行Xorg: .. literalinclude:: freebsd_nvidia-driver/driver-nvidia.conf :caption: 配置一个 ``driver-nvidia.conf`` 引导Xorg正确使用NVIDIA驱动 Intel显卡 ----------- .. note:: 我的 :ref:`thinkpad_x220` 使用Intel显卡 :ref:`freebsd_sway` 过程安装了Intel显卡驱动,步骤如下; .. literalinclude:: freebsd_sway/intel_gpu :caption: Intel显卡内核模块加载 XFCE ========= - 安装XFCE: .. literalinclude:: freebsd_xfce4/install :caption: 安装Xfce4 .. note:: 参考 `FreeBSD从入门到跑路: 第 4.20 节 声卡设置 `_ **FreeBSD 大部分软件的音频输出驱动为 oss。有些默认是 pulseaudio(比如 firefox)** 安装了 ``xfce4-pulseaudio-plugin`` 可以很方便调整音频,特别是切换音频通道。不过,也可以通过命令行切换: .. literalinclude:: freebsd_xfce4/sndstat :caption: 检查当前声卡设备, ``default`` 行就是当前使用默认设备(音频从这个设备输出) :emphasize-lines: 5 .. literalinclude:: freebsd_xfce4/switch_snd :caption: 修改输出的设备。最后的数字是对应的 pcm 后面的数字 软件包说明: .. csv-table:: XFCE4软件包说明 :file: freebsd_xfce4/xfce4_pkg.csv :widths: 30, 70 :header-rows: 1 - XFCE需要系统挂载 ``/proc`` ,所以在 ``/etc/fstab`` 中添加以下内容以便在系统启动时挂载好: .. literalinclude:: freebsd_xfce4/fstab :caption: 配置 ``/etc/fstab`` 挂载 ``/proc`` - 安装XFCE会依赖安装 ``dbus-daemon`` ,并且需要在系统中激活 D-BUS : .. literalinclude:: freebsd_xfce4/dbus_enable :caption: 激活系统启动时启动dbus - 安装 ``x11/lightdm`` (一个轻量级显示管理器,使用内存很少且快速): .. literalinclude:: freebsd_xfce4/install_lightdm :caption: 安装 lightdm 异常排查 =========== .. note:: 本段异常排查是 :ref:`mbp15_late_2013` 的NVIDIA显卡异常 报错显示我的笔记本显卡太陈旧,只能使用 NVIDIA 470.xx 驱动,我安装了最新的 550.120 驱动启动时Xorg日志报错; - 启动:: startxfce4 报错,检查 ``/var/log/Xorg.0.log`` 有如下错误: .. literalinclude:: freebsd_nvidia-driver/version_error :caption: 提示需要使用旧版470.xx,直接忽略了错误的高版本550驱动 原来我的显卡 ``NVIDIA GeForce GT 750M GPU`` 太古老了,已经被最新的 ``510.60.02`` 放弃支持了,需要回退到 ``NVIDIA 470.xx Legacy drivers`` 。难怪之前 :ref:`freebsd_sway` 和 :ref:`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`` ): .. literalinclude:: freebsd_xfce4/install_nvidia-deiver-470 :caption: 安装 ``nvidia-driver-470`` 然后重启系统,再次重试成功 结束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`` 默认已经加载了 .. note:: 参考 `How To Fix No Screen Found Xorg Error On FreeBSD [Dual GPU] `_ 和 `xorg fails to start on freebsd even after installing nvidia and drm-kmod `_ 不过,虽然解决了 :ref:`freebsd_nvidia-driver` 的版本问题,但是运行 :ref:`freebsd_sway` 和 :ref:`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网站以及一些 :ref:`nodejs` 程序经常会使用emoji字体,系统如果不安装对应字体就会显示为奇怪的方框乱码。常用的emoji字体有 `Google Noto Color Emoji `_ 和 `EmojiOne Android `_ ,在FreeBSD平台可以直接安装 ``x11-fonts/noto-emoji`` 字体来实现展示: .. literalinclude:: freebsd_xfce4/install_emoji :caption: 安装emoji字体 安装以后firefox浏览器就能够显示WEB页面中的emoji字体,不过很奇怪的是 ``xfce4-terminal`` 却不能正常显示。虽然网上信息显示gnome-termianl和alacritty是支持emoji的,但是我尝试了以后依然没有解决。看起来这问题不是终端模拟器问题,而是 ``gtk`` 底层没有支持emoji,因为我发现安装了 ``noto-emoji`` 字体后,在一些XFCE的配置选择字体窗口,gtk显然没有正常渲染emoji,而在 :ref:`freebsd_chinese` 中我选择的 ``rime`` 输入法字体选择框中当出现emoji文字时也无法正常显示。这个共性问题集中显示在和gtk组件有关,从网上信息来看似乎和底层 ``libcairo`` 库有关。我不清楚为何在FreeBSD中存在问题,目前影响不大,暂时忽略。 参考 ====== - `Install FreeBSD with XFCE and NVIDIA Drivers [2021] `_ - `FreeBSD Handbook: Chapter 8. Desktop Environments `_ - `How to Install FreeBSD 14 on a 6th Generation Thinkpad `_ - `Emoji not displayed or overlapping text `_