第 5 章. X 窗口系统

5.1. 概要

使用 bsdinstall 安装 FreeBSD 不会自动安装图形用户界面。本章介绍如何安装和配置 Xorg,它提供了用于提供图形环境的开源 X Window 系统。然后描述如何查找和安装桌面环境或窗口管理器。

在阅读本章之前,您应该

阅读本章后,您将了解

  • X Window 系统的各个组件以及它们如何相互交互。

  • 如何安装和配置 Xorg。

  • 如何在 Xorg 中使用 TrueType® 字体。

  • 如何为图形登录 (XDM) 设置系统。

5.2. 安装 Xorg

在 FreeBSD 上,Xorg 可以作为软件包或端口安装。

二进制元软件包可以快速安装,但自定义选项较少

# pkg install xorg

这两种安装方式都会安装完整的 Xorg 系统。

当前用户必须是 video 组的成员。要将用户添加到 video 组,请执行以下命令

# pw groupmod video -m username

适用于经验丰富的用户的较小版本的 X 系统可在 x11/xorg-minimal 中找到。大多数文档、库和应用程序将不会安装。某些应用程序需要这些其他组件才能运行。

视频卡、显示器和输入设备会自动检测,不需要任何手动配置。除非自动配置失败,否则不要创建 xorg.conf 或运行 -configure 步骤。

5.3. 显卡驱动程序

下表显示了 FreeBSD 支持的不同显卡、应安装的软件包及其对应的模块。

表 1. 显卡软件包
品牌类型软件包模块

Intel®

开源

drm-kmod

i915kms

AMD®

开源

drm-kmod

amdgpuradeonkms

NVIDIA®

专有

nvidia-driver

nvidianvidia-modeset

VESA

开源

xf86-video-vesa

vesa

SCFB

开源

xf86-video-scfb

scfb

VirtualBox®

开源

virtualbox-ose-additions

VirtualBox® OSE 附加组件包括 vboxvideo 驱动程序。

VMware®

开源

xf86-video-vmware

vmwgfx

可以使用以下命令识别系统中安装了哪个显卡

% pciconf -lv|grep -B4 VGA

输出应类似于以下内容

vgapci0@pci0:0:2:0:     class=0x030000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a42 subvendor=0x17aa subdevice=0x20e4
    vendor     = 'Intel Corporation'
    device     = 'Mobile 4 Series Chipset Integrated Graphics Controller'
    class      = display
    subclass   = VGA

如果显卡不受 Intel®、AMD® 或 NVIDIA® 驱动程序的支持,则应使用 VESA 或 SCFB 模块。在 BIOS 模式下启动时必须使用 VESA 模块,在 UEFI 模式下启动时必须使用 SCFB 模块。

可以使用此命令检查启动模式

% sysctl machdep.bootmethod

输出应类似于以下内容

machdep.bootmethod: BIOS

5.3.1. Intel®

Intel® 显卡是指与 Intel® CPU 在同一芯片上集成的图形芯片类别。维基百科提供了 对 Intel HD 显卡几代所用变体和名称的良好概述

graphics/drm-kmod 软件包间接提供了一系列内核模块,用于与 Intel® 显卡一起使用。可以通过执行以下命令安装 Intel® 驱动程序

# pkg install drm-kmod

然后将模块添加到 /etc/rc.conf 文件中,执行以下命令

# sysrc kld_list+=i915kms

如果注意到 CPU 使用率过高或 HD 视频出现过度撕裂,则安装 multimedia/libva-intel-driver 可能会有所帮助。要安装软件包,请执行以下命令

# pkg install libva-intel-driver mesa-libs mesa-dri

5.3.2. AMD®

graphics/drm-kmod 软件包间接提供了一系列内核模块,用于与 AMD® 显卡一起使用。可以根据硬件的代数使用 amdgpuradeonkms 模块。FreeBSD 项目维护了一个 AMD 显卡支持矩阵,以确定必须使用哪个驱动程序

可以通过执行以下命令安装 AMD® 驱动程序

# pkg install drm-kmod

对于 HD7000 或 Tahiti 之后的显卡,请将模块添加到 /etc/rc.conf 文件中,执行以下命令

# sysrc kld_list+=amdgpu

对于较旧的显卡(HD7000 或 Tahiti 之前),请将模块添加到 /etc/rc.conf 文件中,执行以下命令

# sysrc kld_list+=radeonkms

5.3.3. NVIDIA®

FreeBSD 支持不同版本的专有 NVIDIA® 驱动程序。较新显卡的用户应安装 x11/nvidia-driver 软件包。使用较旧显卡的用户需要检查下面哪个版本支持它们。

表 2. 支持的 NVIDIA® 驱动程序版本
软件包支持的硬件

x11/nvidia-driver-304

支持的硬件

x11/nvidia-driver-340

支持的硬件

x11/nvidia-driver-390

支持的硬件

x11/nvidia-driver-470

支持的硬件

x11/nvidia-driver

支持的硬件

NVIDIA® 显卡驱动程序的版本 304 (nvidia-driver-304) 不支持 xorg-server 1.20 或更高版本。

可以通过运行以下命令安装最新的 NVIDIA® 驱动程序

# pkg install nvidia-driver

然后将模块添加到 /etc/rc.conf 文件中,执行以下命令

# sysrc kld_list+=nvidia-modeset

如果已安装 x11/nvidia-driver-304 或 x11/nvidia-driver-340 软件包,则必须使用 nvidia 驱动程序。

# sysrc kld_list+=nvidia

5.4. Xorg 配置

Xorg 支持大多数常见的视频卡、键盘和指向设备。

视频卡、显示器和输入设备会自动检测,不需要任何手动配置。除非自动配置失败,否则不要创建 xorg.conf 或运行 Xorg -configure 步骤。

5.4.1. 配置文件

Xorg 在几个目录中查找配置文件。/usr/local/etc/X11/ 是 FreeBSD 上这些文件的推荐目录。使用此目录有助于将应用程序文件与操作系统文件分开。

5.4.2. 单个或多个文件

使用每个文件配置特定设置的多个文件比传统的单个 xorg.conf 更容易。这些文件存储在 /usr/local/etc/X11/xorg.conf.d/ 子目录中。

传统的单个 xorg.conf 仍然有效,但不如 /usr/local/etc/X11/xorg.conf.d/ 子目录中的多个文件清晰或灵活。

5.4.3. 视频卡

可以在 /usr/local/etc/X11/xorg.conf.d/ 目录中指定显卡的驱动程序。

要在配置文件中配置 Intel® 驱动程序

示例 1. 在文件中选择 Intel® 视频驱动程序

/usr/local/etc/X11/xorg.conf.d/20-intel.conf

Section "Device"
	Identifier "Card0"
	Driver     "intel"
EndSection

要在配置文件中配置 AMD® 驱动程序

示例 2. 在文件中选择 AMD® 视频驱动程序

/usr/local/etc/X11/xorg.conf.d/20-radeon.conf

Section "Device"
	Identifier "Card0"
	Driver     "radeon"
EndSection

要在配置文件中配置 NVIDIA® 驱动程序

示例 3. 在文件中选择 NVIDIA® 视频驱动程序

/usr/local/etc/X11/xorg.conf.d/20-nvidia.conf

Section "Device"
	Identifier "Card0"
	Driver     "nvidia"
EndSection

x11/nvidia-xconfig 也可以用于对 NVIDIA 驱动程序中可用的配置选项进行基本控制。

要在配置文件中配置 VESA 驱动程序

示例 4. 在文件中选择 VESA 视频驱动程序

/usr/local/etc/X11/xorg.conf.d/20-vesa.conf

Section "Device"
	Identifier "Card0"
	Driver     "vesa"
EndSection

要在配置文件中配置 SCFB 驱动程序

示例 5. 在文件中选择 SCFB 视频驱动程序

/usr/local/etc/X11/xorg.conf.d/20-scfb.conf

Section "Device"
	Identifier "Card0"
	Driver     "scfb"
EndSection

要配置多个视频卡,可以添加 BusID。可以通过执行以下操作显示视频卡总线 ID 列表

% pciconf -lv | grep -B3 display

输出应类似于以下内容

vgapci0@pci0:0:2:0:     class=0x030000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a42 subvendor=0x17aa subdevice=0x20e4
    vendor     = 'Intel Corporation'
    device     = 'Mobile 4 Series Chipset Integrated Graphics Controller'
    class      = display
--
vgapci1@pci0:0:2:1:     class=0x038000 rev=0x07 hdr=0x00 vendor=0x8086 device=0x2a43 subvendor=0x17aa subdevice=0x20e4
    vendor     = 'Intel Corporation'
    device     = 'Mobile 4 Series Chipset Integrated Graphics Controller'
    class      = display
示例 6. 在文件中选择 Intel® 视频驱动程序和 NVIDIA® 视频驱动程序

/usr/local/etc/X11/xorg.conf.d/20-drivers.conf

Section "Device"
	Identifier "Card0"
	Driver     "intel"
	BusID     "pci0:0:2:0"
EndSection

Section "Device"
	Identifier "Card0"
	Driver     "nvidia"
	BusID     "pci0:0:2:1"
EndSection

5.4.4. 显示器

几乎所有显示器都支持扩展显示识别数据标准 (EDID)。Xorg 使用 EDID 与显示器通信并检测支持的分辨率和刷新率。然后,它选择最合适的设置组合与该显示器一起使用。

可以通过在配置文件中设置所需的分辨率,或在 X 服务器启动后使用 xrandr(1) 选择显示器支持的其他分辨率。

5.4.4.1. 使用 RandR (调整大小和旋转)

运行 xrandr(1) 而不带任何参数即可查看视频输出和检测到的显示器模式列表

% xrandr

输出应类似于以下内容

Screen 0: minimum 320 x 200, current 2560 x 960, maximum 8192 x 8192
LVDS-1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 261mm x 163mm
   1280x800      59.99*+  59.81    59.91    50.00
   1280x720      59.86    59.74
   1024x768      60.00
   1024x576      59.90    59.82
   960x540       59.63    59.82
   800x600       60.32    56.25
   864x486       59.92    59.57
   640x480       59.94
   720x405       59.51    58.99
   640x360       59.84    59.32
VGA-1 connected primary 1280x960+1280+0 (normal left inverted right x axis y axis) 410mm x 257mm
   1280x1024     75.02    60.02
   1440x900      74.98    60.07
   1280x960      60.00*
   1280x800      74.93    59.81
   1152x864      75.00
   1024x768      75.03    70.07    60.00
   832x624       74.55
   800x600       72.19    75.00    60.32    56.25
   640x480       75.00    72.81    66.67    59.94
   720x400       70.08
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)

这表明 VGA-1 输出用于显示 1280x960 像素的屏幕分辨率,刷新率约为 60 Hz。LVDS-1 用作辅助显示器,以显示 1280x800 像素的屏幕分辨率,刷新率约为 60 Hz。显示器未连接到 HDMI-1HDMI-2DP-1DP-2DP-3 连接器。

可以使用 xrandr(1) 选择任何其他显示模式。例如,要切换到 1280x1024 @ 60Hz

% xrandr --output LVDS-1 --mode 1280x720 --rate 60

5.4.4.2. 使用 Xorg 配置文件

监视器配置也可以在配置文件中设置。

要在配置文件中设置 1024x768 的屏幕分辨率

示例 7. 在文件中设置屏幕分辨率

/usr/local/etc/X11/xorg.conf.d/10-monitor.conf

Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	SubSection "Display"
	Modes      "1024x768"
	EndSubSection
EndSection

5.4.5. 输入设备

Xorg 通过 x11/libinput 支持绝大多数输入设备。

某些桌面环境(例如 KDE Plasma)提供图形用户界面来设置这些参数。在诉诸手动配置编辑之前,请检查是否如此。

例如,要配置键盘布局

示例 8. 设置键盘布局

/usr/local/etc/X11/xorg.conf.d/00-keyboard.conf

Section "InputClass"
        Identifier "Keyboard1"
        MatchIsKeyboard "on"
        Option "XkbLayout" "es, fr"
        Option "XkbModel" "pc104"
        Option "XkbVariant" ",qwerty"
        Option "XkbOptions" "grp:win_space_toggle"
EndSection

5.5. 在 Xorg 中使用字体

Xorg 附带的默认字体对于典型的桌面出版应用程序来说并不理想。大型演示文稿字体显示出锯齿状和不专业的视觉效果,而小字体几乎完全无法理解。但是,有几种免费的高质量 Type1(PostScript®)字体可用,并且可以轻松地与 Xorg 一起使用。

5.5.1. Type1 字体

URW 字体集 (x11-fonts/urwfonts) 包括标准 Type1 字体(Times Roman™、Helvetica™、Palatino™ 等)的高质量版本。Freefonts 集合 (x11-fonts/freefonts) 包含更多字体,但其中大多数旨在用于 Gimp 等图形软件,并且不完整到足以用作屏幕字体。此外,Xorg 可以配置为使用 TrueType® 字体,只需付出最少的努力。有关此的更多详细信息,请参阅 X(7) 手册页或 TrueType® 字体

要从二进制包安装上述 Type1 字体集合,请运行以下命令

# pkg install urwfonts

同样,使用 freefont 或其他集合。要让 X 服务器检测到这些字体,请在 X 服务器配置文件 (/usr/local/etc/X11/xorg.conf.d/90-fonts.conf) 中添加一条适当的行,内容如下

Section "Files"
  FontPath "/usr/local/share/fonts/urwfonts/"
EndSection

或者,在 X 会话中的命令行中运行

% xset fp+ /usr/local/share/fonts/urwfonts
% xset fp rehash

这将有效,但在关闭 X 会话时会丢失,除非将其添加到启动文件(对于正常的 startx 会话,为 ~/.xinitrc,或者在通过图形登录管理器(如 XDM)登录时为 ~/.xsession)。第三种方法是使用新的 /usr/local/etc/fonts/local.conf,如 抗锯齿字体 中所示。

5.5.2. TrueType® 字体

Xorg 内置支持渲染 TrueType® 字体。有两个不同的模块可以启用此功能。本例中使用 freetype 模块,因为它与其他字体渲染后端更加一致。要启用 freetype 模块,只需将以下行添加到 /usr/local/etc/X11/xorg.conf.d/90-fonts.conf"Module" 部分。

Load  "freetype"

现在为 TrueType® 字体创建一个目录(例如,/usr/local/share/fonts/TrueType),并将所有 TrueType® 字体复制到此目录中。请记住,不能直接从 Apple® Mac® 中获取 TrueType® 字体;它们必须采用 UNIX®/MS-DOS®/Windows® 格式才能供 Xorg 使用。将文件复制到此目录后,使用 mkfontscale 创建一个 fonts.dir,以便 X 字体渲染器知道已安装这些新文件。mkfontscale 可以作为包安装

# pkg install mkfontscale

然后在目录中创建 X 字体文件的索引

# cd /usr/local/share/fonts/TrueType
# mkfontscale

现在将 TrueType® 目录添加到字体路径。这与 Type1 字体 中描述的相同

% xset fp+ /usr/local/share/fonts/TrueType
% xset fp rehash

或在 xorg.conf 中添加 FontPath 行。

现在,Gimp、LibreOffice 和所有其他 X 应用程序都应该识别已安装的 TrueType® 字体。现在,极小的字体(例如网页上高分辨率显示屏上的文本)和极大的字体(在 LibreOffice 中)看起来会好得多。

5.5.3. 抗锯齿字体

Xorg 中在 /usr/local/share/fonts/~/.fonts/ 中找到的所有字体都会自动提供给支持 Xft 的应用程序进行抗锯齿处理。大多数最新的应用程序都支持 Xft,包括 KDE、GNOME 和 Firefox。

要控制哪些字体进行抗锯齿处理,或配置抗锯齿属性,请创建(或编辑,如果已存在)文件 /usr/local/etc/fonts/local.conf。可以使用此文件调整 Xft 字体系统的几个高级功能;本节仅描述一些简单的可能性。有关更多详细信息,请参阅 fonts-conf(5)

此文件必须采用 XML 格式。请仔细注意大小写,并确保所有标签都正确关闭。文件以通常的 XML 标头开头,后跟 DOCTYPE 定义,然后是 <fontconfig> 标签

<?xml version="1.0"?>
      <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
      <fontconfig>

如前所述,/usr/local/share/fonts/ 以及 ~/.fonts/ 中的所有字体都已提供给支持 Xft 的应用程序。要添加这两个目录树之外的其他目录,请在 /usr/local/etc/fonts/local.conf 中添加如下所示的行

<dir>/path/to/my/fonts</dir>

添加新字体,尤其是新字体目录后,请重建字体缓存

# fc-cache -f

抗锯齿使边框略微模糊,这使得非常小的文本更易读,并从大型文本中去除“阶梯”,但如果应用于普通文本,可能会导致眼睛疲劳。要将小于 14 点的字体大小排除在抗锯齿之外,请包含以下行

	<match target="font">
	    <test name="size" compare="less">
		<double>14</double>
	    </test>
	    <edit name="antialias" mode="assign">
		<bool>false</bool>
	    </edit>
	</match>
	<match target="font">
	    <test name="pixelsize" compare="less" qual="any">
		<double>14</double>
	    </test>
	    <edit mode="assign" name="antialias">
		<bool>false</bool>
	    </edit>
	</match>

某些等宽字体的间距在使用抗锯齿时也可能不合适。这似乎是 KDE 特有的问题。一个可能的解决方法是强制此类字体的间距为 100。添加以下行

	<match target="pattern" name="family">
	   <test qual="any" name="family">
	       <string>fixed</string>
	   </test>
	   <edit name="family" mode="assign">
	       <string>mono</string>
	   </edit>
	</match>
	<match target="pattern" name="family">
	    <test qual="any" name="family">
		<string>console</string>
	    </test>
	    <edit name="family" mode="assign">
		<string>mono</string>
	    </edit>
	</match>

(这将固定字体的其他常用名称作为 "mono" 的别名),然后添加

	<match target="pattern" name="family">
	     <test qual="any" name="family">
		 <string>mono</string>
	     </test>
	     <edit name="spacing" mode="assign">
		 <int>100</int>
	     </edit>
	 </match>

某些字体,例如 Helvetica,在抗锯齿时可能存在问题。通常,这表现为字体似乎垂直切成两半。在最坏的情况下,它可能会导致应用程序崩溃。为了避免这种情况,请考虑将以下内容添加到 local.conf

	<match target="pattern" name="family">
	     <test qual="any" name="family">
		 <string>Helvetica</string>
	     </test>
	     <edit name="family" mode="assign">
		 <string>sans-serif</string>
	     </edit>
	 </match>

编辑 local.conf 后,请确保以 </fontconfig> 标签结束文件。如果不这样做,更改将被忽略。

用户可以通过创建自己的 ~/.config/fontconfig/fonts.conf 来添加个性化设置。此文件使用上面描述的相同 XML 格式。

最后一点:使用 LCD 屏幕时,可能需要进行子像素采样。这基本上是分别处理(水平分离的)红色、绿色和蓝色组件以提高水平分辨率;结果可能非常显著。要启用此功能,请在 local.conf 中的某个位置添加以下行

	 <match target="font">
	     <test qual="all" name="rgba">
		 <const>unknown</const>
	     </test>
	     <edit name="rgba" mode="assign">
		 <const>rgb</const>
	     </edit>
	 </match>

根据显示器的类型,可能需要将 rgb 更改为 bgrvrgbvbgr:进行实验并查看哪种效果最佳。

有关如何在 FreeBSD 上安装和配置字体的更多信息,请阅读文章 字体和 FreeBSD


上次修改时间:2024 年 9 月 20 日,作者:Fernando Apesteguía