# pkg install xorg
第 5 章. X 窗口系统
目录
5.1. 概要
使用 bsdinstall 安装 FreeBSD 不会自动安装图形用户界面。本章介绍如何安装和配置 Xorg,它提供了用于提供图形环境的开源 X Window 系统。然后描述如何查找和安装桌面环境或窗口管理器。
在阅读本章之前,您应该
了解如何安装其他第三方软件,如安装应用程序:软件包和端口中所述。
阅读本章后,您将了解
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® 显卡是指与 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 可能会有所帮助。要安装软件包,请执行以下命令
|
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.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 (调整大小和旋转)
运行 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 @ 60Hz
% 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® 字体复制到此目录中。请记住,不能直接从 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>
根据显示器的类型,可能需要将 |
有关如何在 FreeBSD 上安装和配置字体的更多信息,请阅读文章 字体和 FreeBSD。
上次修改时间:2024 年 9 月 20 日,作者:Fernando Apesteguía