5.4.Xorg 配置

5.4.1. 快速开始

Xorg 支持大多数常规的显卡、键盘和鼠标等设备。

技巧

无需任何手动配置,显卡、显示器和输入设备就可以被自动识别。除非自动配置失败,否则不要创建 xorg.conf 或执行 -configure 这个操作。

  1. 如果以前在此计算机上使用过 Xorg,请移动或删除任何现有的配置文件:
# mv /etc/X11/xorg.conf ~/xorg.conf.etc
# mv /usr/local/etc/X11/xorg.conf ~/xorg.conf.localetc
  1. 将需要运行 Xorg 的用户添加到 videowheel 组,以在可用时启用 3D 加速。将用户 jru 添加到找到的组:
# pw groupmod video -m jru || pw groupmod wheel -m jru
  1. TWM 窗口管理器默认被安装。它在 Xorg 启动时启动:
% startx
  1. 在某些旧版本的 FreeBSD 上,必须先将系统控制台设置为 vt(4)open in new window,然后才能正常切换回文本控制台。请参阅 内核模式设置(KMS)open in new window

5.4.2. 图形加速的用户组

需要有访问 /dev/dri 的权限才能在显卡上实现 3D 加速。将需要运行 X 的用户添加到 videowheel 组通常是最简单的方式。在这里,pw(8)open in new window 用于将用户 slurms 添加到 video 组中,如果不存在 video 组,则添加到 wheel 组中:

# pw groupmod video -m slurms || pw groupmod wheel -m slurms

5.4.3. 内核模式设置(KMS)

当计算机从控制台显示切换到更高的 X 屏幕分辨率时,它必须设置视频输出的 模式Xorg 的最新版本由内核直接更有效地处理模式变更。旧版本的 FreeBSD 使用 sc(4)open in new window,并不支持 KMS。最终的结果是,在关闭 X 之后,系统控制台是空白的,即使它仍后台在工作。较新的 vt(4)open in new window 控制台则避免了这个问题。

将此行添加到 /boot/loader.conf 以启用 vt(4)open in new window

kern.vty=vt

5.4.4. 配置文件

通常不需要进行手动配置。除非自动配置不起作用,否则请不要手动创建配置文件。

5.4.4.1. 目录

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

将配置文件存储在以往的 /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-kmodopen in new window 提供的以下某个驱动程序。这些驱动程序使用内核接口通常是私有的。因此,强烈建议通过 ports 用 PORTS_MODULES 变量编译驱动程序。每次使用 PORTS_MODULES 编译内核时,都会针对更新的源重新编译包含内核模块的相应 port。这确保了内核模块与内核本身保持同步。应该同时更新内核和 ports 以获得最大的兼容性。你可以把 PORTS_MODULES 添加到你的 /etc/make.conf 文件中以确保你编译的所有内核都会重编译此模块。高级用户可以使用 makeoptions 指令将其添加到他们的内核配置文件中。如果你运行 GENERIC 内核并使用 freebsd-update 命令,可以在每次执行 freebsd-update install 后重新编译 graphics/drm-kmodx11/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_unitsopen in new windowhttps://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_unitsopen in new window 了解支持的 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_unitsopen in new window

AMD® Radeon

HD6000 系列以前(含HD6000系列)支持 2D 和 3D 加速功能。

驱动名称:radeon

如需参考,请参阅 https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_unitsopen in new window

NVIDIA

ports 里的 x11 类别中提供几个 NVIDIA 驱动程序。安装与显卡匹配的驱动程序。

如需参考,请参阅 https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_unitsopen in new window

在 port x11/nvidia-driverx11/nvidia-driver-xxx 中可以找到对 NVIDIA 卡的内核支持。新卡使用前者,旧卡使用带 -xxx 的 port,其中 xxx 是 304、340 或 390 之一,表示驱动程序的版本。对于这些具体的 -xxx,请参考支持的 NVIDIA GPU 产品open in new window 页面对应选取。此页面列出了不同版本的驱动程序支持的设备。旧版驱动程序可在 i386 和 amd64 上运行。当前驱动只支持 amd64。有关详细信息,请阅读 NVIDIA 驱动程序的安装和配置open in new window。虽然我们建议在每次内核重编译时都重新编译此驱动程序以获得最大的可靠性,但因为它几乎不使用私有内核接口,因此通常在内核更新时是不受影响的。

混合图形技术

一些笔记本电脑将额外的图形处理单元添加到芯片组或处理器中内置的图形处理单元。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-vesaopen in new window 驱动程序正常使用。此驱动程序由 x11/xorgopen in new window 安装。也可以通过手动安装 x11-drivers/xf86-video-vesaopen in new window。当没有为显卡找到特定的驱动程序时,Xorg 会尝试使用此驱动程序。

x11-drivers/xf86-video-scfbopen in new window 是一个类似的非专用显卡驱动程序,适用于许多 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 注释标识符并设置选择所需要的显卡。显卡总线 IDS 列表可以通过 pciconf -lv | grep -B3 display 来查看。

在配置文件中设置 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)open in new window

使用 xrandr(1)open in new window

在不加任何参数的情况下运行 xrandr(1)open in new window,可以看到一个视频输出和检测到的显示器模式的列表:

% 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-0HDMI-0 接口。

其他任何显示模式都可以用 xrandr(1)open in new window 选择。例如,要切换到 60 赫兹的 1280x1024:

% xrandr --output DVI-0 --mode 1280x1024 --rate 60

一个常见的任务是将笔记本电脑上的外部视频输出用于视频投影仪。

不同设备的输出连接器的类型和数量各不相同,而且每种输出的名称在不同的驱动程序中也不尽相同。一个驱动程序称为 HDMI-1,另一个可能称为 HDMI1。所以第一步是运行 xrandr(1)open in new window 来列出所有可用的输出:

% 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,以及外部 VGA1HDMI1DP1 连接器。

投影机已经连接到 VGA1 输出。现在用 xrandr(1)open in new window 将该输出设置为投影机的原始分辨率,并将额外的空间添加到桌面的右侧:

% xrandr --output VGA1 --auto --right-of LVDS1

--auto 选择由 EDID 检测到的分辨率和刷新率。如果不能正确检测到分辨率,可以用 --mode 而不是 --auto 语句给出一个固定值。例如,大多数投影仪可以使用 1024x768 的分辨率,可以用 --mode 1024x768 来设置。

xrandr(1)open in new window 经常从 .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

少数没有 EDID 的显示器可以通过设置 HorizSyncVertRefresh 到显示器支持的频率范围来配置。

例 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)open in new window 中列出。

默认是美国布局。要选择一个替代的布局,可以在 InputClass 中设置 XkbLayoutXkbVariant 选项。这将应用于所有符合该类别的输入设备。

这个例子选择了一个法语键盘布局。

例 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/xxkbopen in new windowx11/sbxkbopen in new window 来改进布局切换控制和当前布局指示。

/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-serveropen in new window 1.20.8 或更高版本,并且不使用 moused(8)open in new window,请在 /etc/sysctl.conf 中加入 kern.evdev.rcpt_mask=12

可以通过配置选项来调整许多鼠标的参数。参见 mousedrv(4)open in new window 以获得完整的列表。

鼠标按键

可以在 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/

Loading...