# pkg install xorg
第 5 章 X Window 系统
如果发现翻译错误,请直接 发起PR修改。
目录
5.1. 简介
使用 bsdinstall 安装 FreeBSD 时,不会自动安装图形用户界面。本章介绍了如何安装和配置 Xorg,它提供了用于提供图形环境的开源 X Window 系统。然后,它描述了如何查找和安装桌面环境或窗口管理器。
在阅读本章之前,您应该:
-
根据 安装应用程序:软件包和 Ports 中描述的方法,了解如何安装额外的第三方软件。
阅读完本章后,您将了解:
-
X Window 系统的各个组件以及它们之间的相互操作。
-
如何安装和配置 Xorg。
-
如何在 Xorg 中使用 TrueType® 字体。
-
如何设置系统以进行图形登录(XDM)。
5.2. 安装 Xorg
在 FreeBSD 上,Xorg 可以作为一个软件包或者端口进行安装。
二进制元包可以快速安装,但自定义选项较少:
任何一种安装方式都会导致完整的 Xorg 系统被安装。
当前用户必须是 video
组的成员。要将用户添加到 video
组中,请执行以下命令:
# pw groupmod video -m username
适用于有经验的用户的 X 系统的较小版本可在包: x11/xorg-minimal[] 中获得。大多数文档、库和应用程序将不会被安装。某些应用程序需要这些额外的组件才能正常运行。 |
视频卡、显示器和输入设备会被自动检测,不需要任何手动配置。除非自动配置失败,否则不要创建 |
5.3. 显卡驱动程序
下表显示了 FreeBSD 支持的不同图形卡,应安装的软件包及其对应的模块。
品牌 | 类型 | 包 | 模块 |
---|---|---|---|
Intel® |
开源 |
drm-kmod |
|
AMD® |
开源 |
drm-kmod |
|
NVIDIA® |
专有的 |
nvidia-driver |
|
VESA |
开源 |
xf86-video-vesa |
vesa |
SCFB |
开源 |
xf86-video-scfb |
scfb |
VirtualBox® |
开源 |
virtualbox-ose-additions |
VirtualBox® OSE 增加了 |
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 模块。 这个命令可以用来检查启动模式:
输出应该类似于以下内容: 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 可能会有所帮助。要安装该软件包,请执行以下命令:
|
5.3.2. AMD®
graphics/drm-kmod 包间接提供了一系列用于 AMD® 图形卡的内核模块。根据硬件的代数,可以使用 amdgpu
和 radeonkms
模块。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[]。那些使用较旧显卡的用户需要查看下面支持它们的版本。
包 | 支持的硬件 |
---|---|
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 软件包,则必须使用
|
5.4. Xorg 配置
Xorg 支持大多数常见的视频卡、键盘和指针设备。
视频卡、显示器和输入设备会被自动检测,不需要任何手动配置。除非自动配置失败,否则不要创建 xorg.conf 文件或运行 |
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® 驱动程序:
/usr/local/etc/X11/xorg.conf.d/20-intel.conf
Section "Device" Identifier "Card0" Driver "intel" EndSection
要在配置文件中配置 AMD® 驱动程序:
/usr/local/etc/X11/xorg.conf.d/20-radeon.conf
Section "Device" Identifier "Card0" Driver "radeon" EndSection
要在配置文件中配置 NVIDIA® 驱动程序:
/usr/local/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device" Identifier "Card0" Driver "nvidia" EndSection
x11/nvidia-xconfig 也可以用来对 NVIDIA 驱动程序中可用的配置选项进行基本控制。 |
要在配置文件中配置 VESA 驱动程序:
/usr/local/etc/X11/xorg.conf.d/20-vesa.conf
Section "Device" Identifier "Card0" Driver "vesa" EndSection
要在配置文件中配置 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
/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-1
、HDMI-2
、DP-1
、DP-2
和 DP-3
连接器上没有连接显示器。
可以使用 xrandr(1) 选择任何其他的显示模式。例如,要切换到 1280x1024 分辨率,刷新率为 60 Hz :
% xrandr --output LVDS-1 --mode 1280x720 --rate 60
5.4.5. 输入设备
Xorg 通过 x11/libinput 支持绝大部分输入设备。
一些桌面环境(如 KDE Plasma)提供了用于设置这些参数的图形界面。在尝试手动配置编辑之前,请检查是否有这样的界面。 |
例如,要配置键盘布局:
/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>
根据显示器的类型,可能需要将 |
有关在 FreeBSD 上安装和配置字体的更多信息,请阅读文章 字体和 FreeBSD。
上次修改时间: September 18, 2024 by fiercex