5.4. Xorg 配置

5.4.1. 快速开始

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

提示

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

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

5.4.2. 图形加速的用户组

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

  1. # 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)

  1. 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-kmod 提供的以下驱动程序之一。这些驱动程序使用内核接口通常是私有的。因此,强烈建议通过ports系统用 PORTS_MODULES 变量编译驱动程序。每次使用 PORTS_MODULES 编译内核时,都会针对更新的源重新编译包含内核模块的相应 port(s) 。这确保了内核模块与内核本身保持同步。内核和 ports 树应该一起更新以获得最大的兼容性。你可以添加 PORTS_MODULES 到你的 /etc/make.conf 文件以确保你编译的所有内核都重编译此模块。高级用户可以使用 makeoptions 指令将其添加到他们的内核配置文件中 。如果运行 GENERIC 并使用 freebsd-update,可以在每次执行 freebsd-update install 后编译port graphics/drm-kmodx11/nvidia-driver

> >

/etc/make.conf

  1. SYSDIR=path/to/src/sys
  2. 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_unitshttps://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units 了解支持的 GPU 列表。

英特尔®

大多数英特尔® 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

英伟达

Ports 源代码库里的 x11 类别中提供几个 NVIDIA 驱动程序。安装与显卡匹配的驱动程序。

如需参考,请参阅 https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units

在port x11/nvidia-driverx11/nvidia-driver-xxx 中可以找到对 NVIDIA 卡的内核支持。新卡使用前者,旧卡使用port -xxx ,其中 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显示单元。英特尔®显卡可以与英特尔®驱动程序一起使用。

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® 计算机。

在文件中设置显卡驱动程序

在配置文件中设置英特尔® 驱动程序: > >

示例 1. 在文件中选择英特尔® 视频驱动程序

/usr/local/etc/X11/xorg.conf.d/driver-intel.conf

  1. Section "Device"
  2. Identifier "Card0"
  3. Driver "intel"
  4. # BusID "PCI:1:0:0"
  5. EndSection

如果存在多块显卡,可以取消 BusID 注释标识符并设置选择所需要的显卡。显卡总线 IDS 列表可以通过 pciconf -lv | grep -B3 display 来查看。

在配置文件中设置 Radeon 驱动程序: > >

示例 2. 在文件中选择 Radeon 显卡驱动程序

/usr/local/etc/X11/xorg.conf.d/driver-radeon.conf

  1. Section "Device"
  2. Identifier "Card0"
  3. Driver "radeon"
  4. EndSection

在配置文件中设置 VESA 驱动。 > >

例3. 在文件中选择 VESA 视频驱动程序

/usr/local/etc/X11/xorg.conf.d/driver-vesa.conf

  1. Section "Device"
  2. Identifier "Card0"
  3. Driver "vesa"
  4. EndSection

设置 scfb 驱动程序以与 UEFI 或 ARM® 计算机一起使用: > >

例4. 在文件中选择 scfb 视频驱动程序

  1. Section "Device"
  2. Identifier "Card0"
  3. Driver "scfb"
  4. EndSection

5.4.6. 显示器

几乎所有的显示器都支持扩展显示识别数据标准(EDID)。Xorg 使用 EDID 与显示器通信,检测支持的分辨率和刷新率。然后它选择最合适的设置组合来使用该显示器。

显示器支持的其他分辨率可以通过在配置文件中设置所需的分辨率来选择,或者在用 xrandr(1) 启动 X server 服务器之后。

使用 xrandr(1)

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

  1. % xrandr
  2. Screen 0: minimum 320 x 200, current 3000 x 1920, maximum 8192 x 8192
  3. DVI-0 connected primary 1920x1200+1080+0 (normal left inverted right x axis y axis) 495mm x 310mm
  4. 1920x1200 59.95*+
  5. 1600x1200 60.00
  6. 1280x1024 85.02 75.02 60.02
  7. 1280x960 60.00
  8. 1152x864 75.00
  9. 1024x768 85.00 75.08 70.07 60.00
  10. 832x624 74.55
  11. 800x600 75.00 60.32
  12. 640x480 75.00 60.00
  13. 720x400 70.08
  14. DisplayPort-0 disconnected (normal left inverted right x axis y axis)
  15. HDMI-0 disconnected (normal left inverted right x axis y axis)

这表明,DVI-0 在使用屏幕分辨率为 1920x1200 像素,刷新率约为 60 赫兹来进行显示输出。显示器没有连接到 DisplayPort-0HDMI-0 接口。

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

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

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

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

  1. % xrandr
  2. Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
  3. LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
  4. 1366x768 60.04*+
  5. 1024x768 60.00
  6. 800x600 60.32 56.25
  7. 640x480 59.94
  8. VGA1 connected (normal left inverted right x axis y axis)
  9. 1280x1024 60.02 + 75.02
  10. 1280x960 60.00
  11. 1152x864 75.00
  12. 1024x768 75.08 70.07 60.00
  13. 832x624 74.55
  14. 800x600 72.19 75.00 60.32 56.25
  15. 640x480 75.00 72.81 66.67 60.00
  16. 720x400 70.08
  17. HDMI1 disconnected (normal left inverted right x axis y axis)
  18. DP1 disconnected (normal left inverted right x axis y axis)

发现有四种输出:内置面板 LVDS1,以及外部 VGA1HDMI1DP1 连接器。

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

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

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

xrandr(1) 经常从 .xinitrc 运行,以便在 X 启动时设置适当的模式。

在文件中设置显示器分辨率

要在一个配置文件中设置 1024x768 的屏幕分辨率:

例5. 在文件中设置屏幕分辨率

/usr/local/etc/X11/xorg.conf.d/screen-resolution.conf

Section “Screen” Identifier “Screen0” Device “Card0” SubSection “Display” Modes “1024x768” EndSubSection EndSection

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

例6. 手动设置显示器频率

/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 键盘

键盘布局

键盘上按键的标准位置被称为 layout 布局。布局和其他可调整的参数在 xkeyboard-config(7) 中列出。

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

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

例7. 设置键盘布局

/usr/local/etc/X11/xorg.conf.d/keyboard-fr.conf

  1. Section "InputClass"
  2. Identifier "KeyboardDefaults"
  3. MatchIsKeyboard "on"
  4. Option "XkbLayout" "fr"
  5. EndSection

例8. 设置多个键盘布局

设置美国、西班牙和乌克兰的键盘布局。按 Alt+Shift 键可以循环切换这些布局。x11/xxkbx11/sbxkb 可以用来改进布局切换控制和当前布局指示。

  1. /usr/local/etc/X11/xorg.conf.d/kbd-layout-multi.conf
  2. Section "InputClass"
  3. Identifier "All Keyboards"
  4. MatchIsKeyboard "yes"
  5. Option "XkbLayout" "us, es, ua"
  6. EndSection

用键盘关闭 Xorg

X 可以用一个组合键关闭。默认情况下,该组合键没有被设置,因为它与某些应用程序的键盘命令相冲突。启用这个选项需要对键盘 InputDevice 部分进行修改。

例 9. 启用键盘退出 X 的功能

  1. /usr/local/etc/X11/xorg.conf.d/keyboard-zap.conf
  2. Section "InputClass"
  3. Identifier "KeyboardDefaults"
  4. MatchIsKeyboard "on"
  5. Option "XkbOptions" "terminate:ctrl_alt_bksp"
  6. 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:

例 10. 设置鼠标按键的数量
/usr/local/etc/X11/xorg.conf.d/mouse0-buttons.conf

  1. Section "InputDevice"
  2. Identifier "Mouse0"
  3. Option "Buttons" "7"
  4. EndSection

5.4.8 手动设置

在某些情况下,Xorg 的自动配置对特定的硬件不起作用,或者需要一个不同的配置。对于这些情况,可以创建一个自定义的配置文件。

警告:

除非必要,否则不要创建手动配置文件。不必要的手动配置会妨碍正常的操作。

Xorg 可以根据检测到的硬件来生成一个配置文件。这个文件通常是自定义配置的一个有用的开始。

生成一个 xorg.conf:

  1. # Xorg -configure

配置文件被保存到 /root/xorg.conf.new。做任何需要的修改,然后用以下方法测试该文件(使用 -retro,所以有一个可见的背景):

  1. # Xorg -retro -config /root/xorg.conf.new

在新的配置调整和测试完成后,可以将它分割成更小的文件,放在常用的位置 /usr/local/etc/X11/xorg.conf.d/ 中。