第 5 章 X Window 系统

如果发现翻译错误,请直接 发起PR修改

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® Graphics 指的是与 Intel® CPU 集成在同一芯片上的图形芯片类别。维基百科提供了 一个关于 Intel HD Graphics 各个世代的变体和命名的良好概述

graphics/drm-kmod 包间接提供了一系列用于 Intel® 图形卡的内核模块。可以通过执行以下命令来安装 Intel® 驱动程序:

# pkg install drm-kmod

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

# sysrc kld_list+=i915kms

如果注意到高 CPU 使用率或高清视频出现过多的撕裂现象,安装 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 在多个目录中查找配置文件。在 FreeBSD 上,推荐使用目录 /usr/local/etc/X11/ 来存放这些文件。使用这个目录可以将应用程序文件与操作系统文件分开。

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 (Resize and Rotate)

运行 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 分辨率,刷新率为 60 Hz :

% 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® 字体复制到该目录中。请记住,TrueType® 字体不能直接从 Apple® Mac® 中获取;它们必须以 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-aware 的应用程序进行反锯齿处理。大多数最新的应用程序都支持 Xft-aware,包括 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-aware 的应用程序中使用。如果要添加一个位于这两个目录树之外的目录,可以在 /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


上次修改时间: September 18, 2024 by fiercex