5.4.Xorg 配置
5.4.1. 快速开始
Xorg 支持大多数常见的显卡、键盘和定点设备。
技巧
无需任何手动配置,就可以自动识别显卡、显示器和输入设备。除非自动配置失败,否则不要创建 xorg.conf 或执行
-configure
这个操作。
- 如果以前在此计算机上使用过 Xorg,请移动或删除任何现有的配置文件:
# mv /etc/X11/xorg.conf ~/xorg.conf.etc # mv /usr/local/etc/X11/xorg.conf ~/xorg.conf.localetc
- 将需要运行 Xorg 的用户添加到
video
或wheel
组,以在可用时启用 3D 加速。将用户 jru 添加到可用的组:# pw groupmod video -m jru || pw groupmod wheel -m jru
- 默认安装了
TWM
窗口管理器。它在 Xorg 启动时启动:% startx
- 在某些旧版本的 FreeBSD 上,必须先将系统控制台设置为 vt(4),然后才能正常切换回文本控制台。请参阅内核模式设置(KMS)。
5.4.2. 图形加速组
需要有访问 /dev/dri 的权限才能在显卡上实现 3D 加速。将需要运行 X 的用户添加到 video
或 wheel
组通常是最简单的方式。在这里,pw(8) 用于将用户 slurms 添加到 video
组中,如果不存在 video
组,则添加到 wheel
组中:
# pw groupmod video -m slurms || pw groupmod wheel -m slurms
5.4.3. 内核模式设置(KMS)
当计算机从控制台显示切换到更高的 X 屏幕分辨率时,它必须设置视频输出的 模式。最近版本的 Xorg
使用内核内中一个系统来更有效地切换这些模式。旧版本的 FreeBSD 使用 sc(4),并不支持 KMS。最终的结果是,在关闭 X 之后,系统控制台是空白的,即使它仍后台在工作。较新的 vt(4) 控制台则避免了这个问题。
将此行添加到 /boot/loader.conf 以启用 vt(4):
kern.vty=vt
5.4.4. 配置文件
通常不需要进行手动配置。除非自动配置不起作用,否则请不要手动创建配置文件。
5.4.4.1. 目录
Xorg 在多个目录中查找配置文件。FreeBSD 推荐将这些文件存放于 /usr/local/etc/X11/。使用此目录有助于将应用程序文件与操作系统文件分离。
将配置文件存储在以往的 /etc/X11/ 中仍然有效。但是,这会将应用程序文件与 FreeBSD 基本系统的文件混合在一起,因此不建议这样做。
5.4.4.2. 单个或多个文件
使用多个文件,每个文件配置一个特定的设置,比使用传统的单一 xorg.conf 更简单。这些文件存储在主配置文件目录的 xorg.conf.d/ 子目录中。完整路径通常是 /usr/local/etc/X11/xorg.conf.d/。
这些文件的示例将在本节后面展示。
传统的单一 xorg.conf 仍然有效,但不像 xorg.conf.d/ 子目录中的多个文件那样清晰和灵活。
5.4.5. 显卡
ports 框架提供了在最新的硬件上进行 X11 操作所需的 drm 图形驱动程序。用户可以使用 graphics/drm-kmod 提供的以下某个驱动程序。这些驱动程序使用内核接口通常是私有的。因此,强烈建议通过 ports 用 PORTS_MODULES
变量编译驱动程序。每次使用 PORTS_MODULES
编译内核时,都会针对更新的源代码重新编译包含内核模块的相应 port。这确保了内核模块与内核本身保持同步。应该同时更新内核和 ports 以获得最大的兼容性。你可以把 PORTS_MODULES
添加到你的 /etc/make.conf 文件中以确保编译的所有内核都会重编译此模块。高级用户可以使用 makeoptions
指令将其添加到他们的内核配置文件中。如果你运行 GENERIC 内核并使用 freebsd-update
命令,可以在每次执行 freebsd-update install
后重新编译 graphics/drm-kmod 或 x11/nvidia-driver 这些 port。
/etc/make.conf
SYSDIR=path/to/src/sys PORTS_MODULES=graphics/drm-kmod x11/nvidia-driver
这将重编译所有内容,但可以根据你拥有的某个 GPU/显卡进行选择。
Intel KMS 驱动程序、Radeon KMS 驱动程序、AMD KMS 驱动程序
大多数 Intel KMS 驱动程序都支持 Intel 显卡的 2D 和 3D 加速功能。
驱动名称: i915kms
大多数较老的 Radeon KMS 驱动程序都支持 AMD 显卡的 2D 和 3D 加速功能。
驱动名称:radeonkms
大多数较新的 AMD KMS 驱动程序都支持 AMD 显卡的 2D 和 3D 加速功能。
驱动名称:amdgpu
如需参考,请参阅 https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units 和 https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units 了解支持的 GPU 列表。
Intel®
大多数 Intel® Ivy Bridge(HD Graphics 2500、4000 和 P4000)以前显卡都支持 3D 加速功能,包括 Iron Lake(HD Graphics)和 Sandy Bridge(HD Graphics 2000)。
驱动名称:intel
如需参考,请参阅 https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units。
AMD® Radeon
HD6000 系列以前(含HD6000系列)支持 2D 和 3D 加速功能。
驱动名称:radeon
如需参考,请参阅 https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units。
NVIDIA
ports 里的 x11 类别中提供了几个 NVIDIA 驱动程序。请安装与显卡匹配的驱动程序。
如需参考,请参阅 https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units。
在 port x11/nvidia-driver 或 x11/nvidia-driver-xxx 中可以找到对 NVIDIA 卡的内核支持。新卡使用前者,旧卡使用带 -xxx
的 port,其中 xxx 是 304、340 或 390 之一,表示驱动程序的版本。对于这些具体的 -xxx
,请参考支持的 NVIDIA GPU 产品 页面对应选取。此页面列出了不同版本的驱动程序支持的设备。旧版驱动程序可在 i386 和 amd64 上运行。当前驱动只支持 amd64。有关详细信息,请阅读 NVIDIA 驱动程序的安装和配置。虽然我们建议在每次内核重编译时都重新编译此驱动程序以获得最大的可靠性,但因为它几乎不使用私有内核接口,因此通常在内核更新时是不受影响的。
混合图形技术
一些笔记本电脑将额外的图形处理单元添加到芯片组或处理器中内置的图形处理单元。Optimus 结合了 Intel® 和 NVIDIA 的硬件。可切换显卡 或 混合显卡 是 Intel® 或 AMD® 处理器与 AMD® Radeon GPU 显示芯片的组合单元。
这些混合图形显示系统的实现各不相同,FreeBSD 中的 Xorg 不能驱动所有这些组合版本。
一些计算机提供 BIOS 选项,以禁用其中一个图形适配器或选择 分离 模式,用于某一标准显卡驱动程序。例如,有时可以在 Optimus 系统中禁用 NVIDIA GPU
显示单元。Intel® 显卡可以与 Intel® 驱动程序一起使用。
BIOS
设置与计算机型号有关。在某些情况下,两个 GPU
显示单元都可以保持启用状态,但是在 Device
设备层面创建一个只使用主 GPU
显示单元的配置文件就足以使系统正常运行了。
其他显卡
可以在 ports 的 x11-drivers
目录中查找一些不太常见的显卡的驱动程序。
某个驱动程序不支持的显卡可能仍可用 x11-drivers/xf86-video-vesa 正常驱动。此驱动程序由 x11/xorg 安装。也可以通过手动安装 x11-drivers/xf86-video-vesa。当没有为显卡找到特定的驱动程序时,Xorg 会尝试使用此驱动程序。
x11-drivers/xf86-video-scfb 是一个类似的非专用显卡驱动程序,适用于许多 UEFI
和 ARM® 计算机。
在文件中设置显卡驱动程序
在配置文件中设置 Intel® 驱动程序:
例 14. 在文件中选择 Intel® 显卡驱动程序
/usr/local/etc/X11/xorg.conf.d/driver-intel.conf
Section "Device" Identifier "Card0" Driver "intel" # BusID "PCI:1:0:0" EndSection
如果存在多块显卡,可以取消
BusID
注释标识符并设置选择所需要的显卡。可以通过pciconf -lv | grep -B3 display
来查看显卡总线IDS
的列表。
在配置文件中设置 Radeon 驱动程序:
例 15. 在文件中选择 Radeon 显卡驱动程序
/usr/local/etc/X11/xorg.conf.d/driver-radeon.conf
Section "Device" Identifier "Card0" Driver "radeon" EndSection
在配置文件中设置 VESA
驱动:
例 16. 在文件中选择
VESA
显卡驱动程序/usr/local/etc/X11/xorg.conf.d/driver-vesa.conf
Section "Device" Identifier "Card0" Driver "vesa" EndSection
设置 scfb
驱动程序以与 UEFI
或 ARM® 计算机一起使用:
例 17. 在文件中选择
scfb
显卡驱动程序/usr/local/etc/X11/xorg.conf.d/driver-scfb.conf
Section "Device" Identifier "Card0" Driver "scfb" EndSection
5.4.6. 显示器
几乎所有的显示器都支持扩展显示识别数据标准(EDID)。Xorg 使用 EDID 与显示器通信,检测支持的分辨率和刷新率。然后它选择最合适的设置组合来使用该显示器。
显示器支持的其他分辨率可以通过在配置文件中设置所需的分辨率来选择,或者在启动 X server 服务器之后用 xrandr(1)。
使用 xrandr(1)
在不加任何参数的情况下运行 xrandr(1),可以看到视频输出和检测到的显示器模式的列表:
% xrandr
Screen 0: minimum 320 x 200, current 3000 x 1920, maximum 8192 x 8192
DVI-0 connected primary 1920x1200+1080+0 (normal left inverted right x axis y axis) 495mm x 310mm
1920x1200 59.95*+
1600x1200 60.00
1280x1024 85.02 75.02 60.02
1280x960 60.00
1152x864 75.00
1024x768 85.00 75.08 70.07 60.00
832x624 74.55
800x600 75.00 60.32
640x480 75.00 60.00
720x400 70.08
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 disconnected (normal left inverted right x axis y axis)
这表明,DVI-0
在使用屏幕分辨率为 1920x1200 像素,刷新率约为 60 赫兹来进行显示输出。显示器没有连接到 DisplayPort-0
和 HDMI-0
接口。
其他任何显示模式都可以用 xrandr(1) 选择。例如,要切换到 60 赫兹的 1280x1024:
% xrandr --output DVI-0 --mode 1280x1024 --rate 60
一个常见的需求是把笔记本电脑上的外部视频输出到视频投影仪。
不同设备的输出连接器的类型和数量各不相同,而且每种输出的名称在不同的驱动程序中也不尽相同。一个驱动程序称为 HDMI-1
,另一个可能称为 HDMI1
。所以第一步是运行 xrandr(1) 来列出所有可用的输出:
% xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
1366x768 60.04*+
1024x768 60.00
800x600 60.32 56.25
640x480 59.94
VGA1 connected (normal left inverted right x axis y axis)
1280x1024 60.02 + 75.02
1280x960 60.00
1152x864 75.00
1024x768 75.08 70.07 60.00
832x624 74.55
800x600 72.19 75.00 60.32 56.25
640x480 75.00 72.81 66.67 60.00
720x400 70.08
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)
发现有四种输出:内置面板 LVDS1
,以及外部 VGA1
、HDMI1
和 DP1
连接器。
投影机已经连接到 VGA1
输出。现在用 xrandr(1) 将该输出设置为投影机的原始分辨率,并将额外的空间添加到桌面的右侧:
% xrandr --output VGA1 --auto --right-of LVDS1
--auto
选择由 EDID
检测到的分辨率和刷新率。如果不能正确检测到分辨率,可以用 --mode
而不是 --auto
语句给出一个固定值。例如,大多数投影仪可以使用 1024x768 的分辨率,可以用 --mode 1024x768
来设置。
xrandr(1) 经常从 .xinitrc
运行,以便在 X 启动时设置适当的模式。
在文件中设置显示器分辨率
要在配置文件中设置 1024x768 的屏幕分辨率:
例 18. 在文件中设置屏幕分辨率
/usr/local/etc/X11/xorg.conf.d/screen-resolution.conf
Section "Screen" Identifier "Screen0" Device "Card0" SubSection "Display" Modes "1024x768" EndSubSection EndSection
可以通过设置 HorizSync
和 VertRefresh
到显示器支持的频率范围来配置少数不支持 EDID
的显示器。
例 19. 手动设置显示器频率
/usr/local/etc/X11/xorg.conf.d/monitor0-freq.conf
Section "Monitor" Identifier "Monitor0" HorizSync 30-83 # kHz VertRefresh 50-76 # Hz EndSection
5.4.7 输入设备
5.4.7.1 键盘
键盘布局
键盘上按键的标准位置被称为 布局。布局和其他可调整的参数在 xkeyboard-config(7) 中列出。
默认是美国布局。要选择其他的布局,可以在 InputClass
中设置 XkbLayout
和 XkbVariant
选项。这将应用于所有符合该类别的输入设备。
这个例子选择了法语键盘布局。
例 20. 设置键盘布局
/usr/local/etc/X11/xorg.conf.d/keyboard-fr.conf
Section "InputClass" Identifier "KeyboardDefaults" MatchIsKeyboard "on" Option "XkbLayout" "fr" EndSection
例 21. 设置多个键盘布局
设置美国、西班牙和乌克兰的键盘布局。按
Alt
+Shift
键可以循环切换这些布局。可以用 x11/xxkb 或 x11/sbxkb 来改进布局切换控制和当前布局指示。/usr/local/etc/X11/xorg.conf.d/kbd-layout-multi.conf
Section "InputClass" Identifier "All Keyboards" MatchIsKeyboard "yes" Option "XkbLayout" "us, es, ua" EndSection
用键盘关闭 Xorg
可以用一个组合键关闭 X。默认情况下,未设置该组合键,因为它与某些应用程序的键盘命令相冲突。启用这个选项需要对键盘 InputDevice
部分进行修改。
例 22. 启用通过键盘关闭 X 的功能
/usr/local/etc/X11/xorg.conf.d/keyboard-zap.conf
Section "InputClass" Identifier "KeyboardDefaults" MatchIsKeyboard "on" Option "XkbOptions" "terminate:ctrl_alt_bksp" EndSection
5.4.7.2 鼠标和定点设备
重要
如果在 FreeBSD 12.1 下使用 xorg-server 1.20.8 及更高版本,并且未使用 moused(8),请在 /etc/sysctl.conf 中加入
kern.evdev.rcpt_mask=12
。
可以通过配置选项来调整许多鼠标的参数。参见 mousedrv(4) 以获得完整的列表。
鼠标按键
可以在 xorg.conf 的鼠标 InputDevice
部分设置鼠标上的按键数。如要将按钮的数量设置为 7:
例 23. 设置鼠标按键的数量
/usr/local/etc/X11/xorg.conf.d/mouse0-buttons.conf
Section "InputDevice" Identifier "Mouse0" Option "Buttons" "7" EndSection
5.4.8 手动设置
在某些情况下,Xorg 的自动配置对特定的硬件不起作用,或者需要不同的配置。对于这些情况,可以创建一个自定义的配置文件。
警告
除非必要,否则不要手动创建配置文件。不必要的手动配置会妨碍正常的操作。
Xorg 可以根据检测到的硬件来生成一个配置文件。这个文件通常对自定义配置有所帮助。
要生成一个 xorg.conf:
# Xorg -configure
保存配置文件到 /root/xorg.conf.new。修改后,用以下方法测试该文件(使用 -retro
,将有一个可见的背景):
# Xorg -retro -config /root/xorg.conf.new
调整和测试新的配置完成之后,可以将其分割为多个小文件,放在常用的位置 /usr/local/etc/X11/xorg.conf.d/。