Xorg

出自 ArchWiki
(重定向自 Evdev

X.Org Server — 通常简称为 X — 是 X.Org 基金会 实现的 X 窗口系统X11)显示服务器,它是 Linux 用户中最流行的显示服务器。它的普及使其成为 GUI 应用程序的必备条件,从而被大多数发行版广泛采用。

有关替代品和后继者,请参阅 Wayland

安装

Xorg 可以通过 xorg-server 软件包安装

此外,xorg-apps 组中的某些软件包对于某些配置任务是必要的。它们在相关章节中指出。

最后,xorg 组也可用,其中包括 Xorg 服务器软件包、xorg-apps 组中的软件包和字体。

驱动程序安装

Linux 内核包含开源视频驱动程序和对硬件加速帧缓冲区的支持。但是,OpenGL 和 X11 中的 2D 加速需要用户空间支持。

首先,识别显卡(Subsystem 输出显示具体型号)

$ lspci -v -nn -d ::03xx
提示: 这里的 ::03 表示 “显示控制器 PCI 设备类”,xx 代表 “该类的任何子类”。

然后,安装合适的驱动程序。您可以搜索软件包数据库以获取开源视频驱动程序的完整列表

$ pacman -Ss xf86-video

Xorg 会自动搜索已安装的驱动程序

  • 如果找不到为硬件安装的特定驱动程序(如下所列),它首先搜索 fbdev (xf86-video-fbdev),它不包含任何 2D 或 3D 加速。
  • 如果找不到,它会搜索 vesa (xf86-video-vesa),通用驱动程序,它处理大量芯片组,但不包含任何 2D 或 3D 加速。
  • 如果找不到 vesa,Xorg 将回退到 内核模式设置,其中包括 GLAMOR 加速(参见 modesetting(4))。

为了使视频加速工作,并且通常为了公开 GPU 可以设置的所有模式,需要正确的视频驱动程序

品牌 类型 文档 驱动程序 OpenGL OpenGL (multilib) Vulkan Vulkan (multilib)
AMD (前 ATI) 开源 AMDGPU xf86-video-amdgpu mesa lib32-mesa vulkan-radeon / amdvlk4 lib32-vulkan-radeon / lib32-amdvlk4
ATI xf86-video-ati
专有 AMDGPU PRO xf86-video-amdgpu amdgpu-pro-oglpAUR lib32-amdgpu-pro-oglpAUR vulkan-amdgpu-proAUR lib32-vulkan-amdgpu-proAUR
英特尔 开源 英特尔显卡 xf86-video-intel2 mesamesa-amber3 lib32-mesa vulkan-intel lib32-vulkan-intel
英伟达 开源 Nouveau1 xf86-video-nouveau mesa lib32-mesa vulkan-nouveau lib32-vulkan-nouveau
专有 NVIDIA1 nvidianvidia-open5 nvidia-utils lib32-nvidia-utils nvidia-utils lib32-nvidia-utils
nvidia-470xx-dkmsAUR nvidia-470xx-utilsAUR lib32-nvidia-470xx-utilsAUR nvidia-470xx-utilsAUR lib32-nvidia-470xx-utilsAUR
nvidia-390xx-dkmsAUR nvidia-390xx-utilsAUR lib32-nvidia-390xx-utilsAUR nvidia-390xx-utilsAUR lib32-nvidia-390xx-utilsAUR
  1. 对于使用集成显卡和独立 GPU 的 NVIDIA Optimus 笔记本电脑,请参阅 NVIDIA Optimus
  2. 对于第 4 代及更高版本的英特尔显卡,请参阅 Intel graphics#Installation 以获取可用的驱动程序。
  3. 适用于旧硬件的经典 OpenGL(非 Gallium3D)驱动程序(Mesa 22.0 及更高版本已放弃对 i915 经典驱动程序的支持)
  4. vulkan-radeon / lib32-vulkan-radeon 推荐代替 amdvlk / lib32-amdvlk(参见 AMDGPU#Installation)。
  5. 有关 nvidianvidia-open 之间的区别,请参阅 NVIDIA#Installation

其他视频驱动程序可以在 xorg-drivers 组中找到。

Xorg 应该可以平稳运行,而无需闭源驱动程序,闭源驱动程序通常仅用于高级功能,例如用于游戏的快速 3D 加速渲染。此规则的例外是开源驱动程序不支持的最新 GPU(尤其是 NVIDIA GPU)。

AMD

有关型号名称(例如 Radeon RX 6800)到 GPU 架构(例如 RDNA 2)的翻译,请参阅 Wikipedia:List of AMD graphics processing units#Features overview

GPU 架构 开源驱动程序 专有驱动程序
RDNA 及更高版本 AMDGPU AMDGPU PRO
GCN 3 及更高版本
GCN 1&2 AMDGPU1 / ATI 不可用
TeraScale
及更旧版本
ATI 不可用
  1. 实验性。

运行

Xorg(1) 命令通常不直接运行。相反,X 服务器通过显示管理器xinit 启动。

提示: 您通常会寻求安装窗口管理器桌面环境来补充 X。

配置

注意: Arch 在 /usr/share/X11/xorg.conf.d/ 中提供默认配置文件,对于大多数设置来说,不需要额外的配置。

Xorg 使用名为 xorg.conf 的配置文件和以后缀 .conf 结尾的文件进行初始设置:这些文件搜索的完整文件夹列表可以在 xorg.conf(5) 中找到,以及所有可用选项的详细说明。

使用 .conf 文件

/etc/X11/xorg.conf.d/ 目录存储特定于主机的配置。您可以自由地在此处添加配置文件,但它们必须具有 .conf 后缀:文件按 ASCII 顺序读取,按照惯例,它们的名称以 XX- 开头(两位数字和一个连字符,例如 10 在 20 之前读取)。这些文件在 X 服务器启动时解析,并被视为传统 xorg.conf 配置文件的一部分。请注意,在配置冲突时,最后读取的文件将被处理。因此,最通用的配置文件应按名称首先排序。xorg.conf 文件中的配置条目在最后处理。

有关要设置的选项示例,请参阅 Fedora:Input device configuration#xorg.conf.d

使用 xorg.conf

Xorg 也可以通过 /etc/X11/xorg.conf/etc/xorg.conf 进行配置。您还可以使用以下命令为 xorg.conf 生成骨架

# Xorg :0 -configure

这应该在 /root/ 中创建一个 xorg.conf.new 文件,您可以将其复制到 /etc/X11/xorg.conf

提示: 如果您已在运行 X 服务器,请使用不同的显示器,例如 Xorg :2 -configure

或者,您的专有显卡驱动程序可能附带一个自动配置 Xorg 的工具:有关更多详细信息,请参阅您的视频驱动程序的文章,NVIDIAAMDGPU PRO

注意: 配置文件关键字不区分大小写,并且 "_" 字符将被忽略。大多数字符串(包括选项名称)也不区分大小写,并且不区分空格和 "_" 字符。

输入设备

对于输入设备,X 服务器默认使用 libinput 驱动程序 (xf86-input-libinput),但 xf86-input-evdev 和相关驱动程序也可用作替代方案。[1]

Udev(作为 systemd 依赖项提供)将检测硬件,并且这两个驱动程序都将充当几乎所有设备的热插拔输入驱动程序,这在 /usr/share/X11/xorg.conf.d/ 目录中的默认配置文件 10-quirks.conf40-libinput.conf 中定义。

启动 X 服务器后,日志文件将显示为各个设备热插拔的驱动程序(请注意,最新的日志文件名可能会有所不同)

$ grep -e "Using input driver " Xorg.0.log

如果两者都不支持特定设备,请从 xorg-drivers 组安装所需的驱动程序。如果您想使用另一个驱动程序,则同样适用。

要影响热插拔,请参阅 #配置

有关具体说明,另请参阅 libinput 文章、以下页面或 Fedora:Input device configuration 以获取更多示例。

输入识别

请参阅 Keyboard input#Identifying keycodes in Xorg

鼠标加速

请参阅 鼠标加速

额外的鼠标按键

请参阅 鼠标按键

触摸板

请参阅 libinputSynaptics

触摸屏

请参阅 触摸屏

键盘设置

请参阅 Keyboard configuration in Xorg

显示器设置

手动配置

注意
  • 较新版本的 Xorg 是自动配置的,因此应该不需要手动配置。
  • 如果 Xorg 无法检测到任何显示器或要避免自动配置,则可以使用配置文件。需要这样做的常见情况是无头系统,该系统在没有显示器的情况下启动,并自动从 虚拟控制台登录 时或从显示管理器启动 Xorg。

对于无头配置,xf86-video-dummy 驱动程序是必要的;安装它并创建一个配置文件,如下所示

/etc/X11/xorg.conf.d/10-headless.conf
Section "Monitor"
        Identifier "dummy_monitor"
        HorizSync 28.0-80.0
        VertRefresh 48.0-75.0
        Modeline "1920x1080" 172.80 1920 2040 2248 2576 1080 1081 1084 1118
EndSection

Section "Device"
        Identifier "dummy_card"
        VideoRam 256000
        Driver "dummy"
EndSection

Section "Screen"
        Identifier "dummy_screen"
        Device "dummy_card"
        Monitor "dummy_monitor"
        SubSection "Display"
        EndSubSection
EndSection

多显示器

有关一般信息,请参阅主文章 Multihead

超过一块显卡

您必须定义要使用的正确驱动程序,并放入显卡的总线 ID(以十进制表示)。

Section "Device"
    Identifier             "Screen0"
    Driver                 "intel"
    BusID                  "PCI:0:2:0"
EndSection

Section "Device"
    Identifier             "Screen1"
    Driver                 "nouveau"
    BusID                  "PCI:1:0:0"
EndSection

要获取您的总线 ID(以十六进制表示)

$ lspci -d ::03xx
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] (rev a1)

这里的总线 ID 是 0:2:01:0:0

显示尺寸和 DPI

默认情况下,自 2009-01-30 以来,Xorg 始终将 DPI 设置为 96。版本 21.1 对提供正确的 DPI 自动检测进行了更改,但已恢复

可以使用 -dpi 命令行选项设置 X 服务器的 DPI。

在需要精细细节(如字体渲染)的情况下,正确的 DPI 会很有帮助。以前,制造商试图为 96 DPI 创建标准(10.3 英寸对角线显示器为 800x600,13.2 英寸显示器为 1024x768)。如今,屏幕 DPI 各不相同,并且水平和垂直方向可能不相等。例如,19 英寸 1440x900 宽屏 LCD 的 DPI 可能为 89x87。

要查看您的显示尺寸和 DPI 是否正确

$ xdpyinfo | grep -B2 resolution

检查尺寸是否与您的显示器尺寸匹配。

如果您有关于屏幕物理尺寸的规格,则可以在 Xorg 配置文件中输入它们,以便计算正确的 DPI(调整标识符以匹配您的 xrandr 输出)

Section "Monitor"
    Identifier             "DVI-D-0"
    DisplaySize             286 179    # In millimeters
EndSection

如果您只想输入显示器的规格,而无需创建完整的 xorg.conf,请创建一个新的配置文件。例如 (/etc/X11/xorg.conf.d/90-monitor.conf)

Section "Monitor"
    Identifier             "<default monitor>"
    DisplaySize            286 179    # In millimeters
EndSection
注意: 如果您使用的是英伟达专有驱动程序,您可能需要在 DeviceScreen 部分下添加 Option "UseEdidDpi" "FALSE",以使其生效。

如果您没有物理屏幕宽度和高度的规格(如今大多数规格仅按对角线尺寸列出),您可以使用显示器的原生分辨率(或宽高比)和对角线长度来计算水平和垂直物理尺寸。在 13.3 英寸对角线长度屏幕上使用勾股定理,原生分辨率为 1280x800(或 16:10 宽高比)

$ echo 'scale=5;sqrt(1280^2+800^2)' | bc  # 1509.43698

这将给出像素对角线长度,通过此值,您可以发现物理水平和垂直长度(并将它们转换为毫米)

$ echo 'scale=5;(13.3/1509)*1280*25.4' | bc  # 286.43072
$ echo 'scale=5;(13.3/1509)*800*25.4'  | bc  # 179.01920
注意: 此计算适用于具有方形像素的显示器;但是,有少数显示器可能会压缩宽高比(例如,将 16:10 宽高比分辨率压缩到 16:9 显示器)。如果是这种情况,您应该手动测量屏幕尺寸。

手动设置 DPI

注意: 虽然您可以设置任何您喜欢的 DPI,并且使用 Qt 和 GTK 的应用程序将相应地缩放,但建议将其设置为 96(100%,无缩放)、120(高 25%)、144(高 50%)、168(高 75%)、192(高 100%)等,以减少使用位图的 GUI 的缩放伪影。将其降低到 96 DPI 以下可能不会减小 GUI 图形元素的大小,因为通常图标制作的最低 DPI 为 96。

对于符合 RandR 的驱动程序(例如开源 ATI 驱动程序),您可以通过以下方式进行设置

$ xrandr --dpi 144
注意: 符合此设置的应用程序不会立即更改。您必须重新启动它们。

要使其永久生效,请参阅 Autostarting#On Xorg startup

英伟达专有驱动程序

您可以通过在 DeviceScreen 部分下添加选项来手动设置 DPI

Option              "DPI" "96 x 96"
手动 DPI 设置注意事项

GTK 通常通过可选的 X 资源 Xft.dpi 覆盖服务器的 DPI。要了解这是否正在发生在您身上,请使用以下命令检查

$ xrdb -query | grep dpi

对于 3.16 以来的 GTK 库版本,当此变量未以其他方式显式设置时,GTK 会将其设置为 96。要使 GTK 应用程序遵守服务器 DPI,您可能需要显式地将 Xft.dpi 设置为与服务器相同的值。Xft.dpi 资源是一些桌面环境在个人设置中选择性地强制 DPI 为特定值的方法。其中包括 KDETDE

显示电源管理

DPMS 是一种允许显示器在计算机未使用时节省功耗行为的技术。这将允许您的显示器在预定义的时间段后自动进入待机状态。

复合

X 的 Composite 扩展导致窗口层次结构的整个子树被渲染到屏幕外缓冲区。然后,应用程序可以获取该缓冲区的内容并执行任何操作。屏幕外缓冲区可以自动合并到父窗口中,或者由称为合成管理器的外部程序合并。有关更多信息,请参阅 Wikipedia:Compositing window manager

某些窗口管理器(例如 CompizEnlightenment、KWin、Marco、Metacity、Muffin、Mutter、Xfwm)自行进行合成。对于其他窗口管理器,可以使用独立的合成管理器。

复合管理器列表

  • Picom — 轻量级合成器,具有阴影、高级模糊和淡入淡出效果。从 Compton 分叉而来。
https://github.com/yshui/picom || picom
  • Xcompmgr — 复合窗口效果管理器。
https://gitlab.freedesktop.org/xorg/app/xcompmgr/ || xcompmgr
  • Gamescope — Valve 的微型合成器,具有面向游戏的功能,例如 FSR 放大。从 steamos-compositor 分叉而来。
https://github.com/ValveSoftware/gamescope || gamescope
  • steamos-compositor-plus — Valve 的合成器,带有一些添加的调整和修复。
https://github.com/chimeraos/steamos-compositor-plus || steamos-compositor-plusAUR

技巧与窍门

自动化

本节列出了用于自动化键盘/鼠标输入和窗口操作(如移动、调整大小或提升)的实用程序。

工具 软件包 手册 Keysym
输入
窗口
操作
注意
xautomation xautomation xte(1) 还包含屏幕抓取工具。无法模拟 F13 及更高键。
xdo xdo xdo(1) 用于对窗口执行基本操作的小型 X 实用程序。
xdotool xdotool xdotool(1) 错误很多 且未积极开发,例如:CLI 解析已损坏。[2][3]
xvkbd xvkbdAUR xvkbd(1) 用于 Xorg 的虚拟键盘,还具有用于发送字符的 -text 选项。
AutoKey autokey-qtAUR autokey-gtkAUR 文档 更高级别、功能强大的宏和脚本实用程序,具有 Qt 和 Gtk 前端。

另请参阅 Clipboard#ToolsX 自动化工具概述

嵌套 X 会话

要运行另一个桌面环境的嵌套会话

$ /usr/bin/Xnest :1 -geometry 1024x768+0+0 -ac -name Windowmaker & wmaker -display :1

这将在当前 X 会话的 1024x768 窗口中启动 Window Maker 会话。

这需要安装 xorg-server-xnest 软件包。

一种更现代的方式来执行嵌套 X 会话是使用 Xephyr

在没有窗口管理器的情况下启动应用程序

请参阅 xinit#在没有窗口管理器的情况下启动应用程序

远程启动 GUI 程序

请参阅主文章:OpenSSH#X11 转发

按需禁用和启用输入源

借助 xinput,您可以临时禁用或启用输入源。例如,这在拥有多个鼠标的系统(如 ThinkPad)上可能很有用,您可能只想使用一个鼠标以避免不必要的鼠标点击。

安装 xorg-xinput 软件包。

查找您要禁用的设备的名称或 ID

$ xinput

例如,在联想 ThinkPad T500 中,输出如下所示

$ xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=11   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=10   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=12   [slave  keyboard (3)]

使用 xinput --disable device 禁用设备,其中 device 是您要禁用的设备的设备 ID 或名称。在本例中,我们将禁用 Synaptics 触摸板,ID 为 10

$ xinput --disable 10

要重新启用设备,只需发出相反的命令

$ xinput --enable 10

或者,使用设备名称,禁用触摸板的命令将是

$ xinput --disable "SynPS/2 Synaptics TouchPad"

永久禁用输入源

您可以使用配置代码片段禁用特定的输入源

/etc/X11/xorg.conf.d/30-disable-device.conf
Section "InputClass"
       Identifier   "disable-device"
       Driver       "driver_name"
       MatchProduct "device_name"
       Option       "Ignore" "True"
EndSection

device 是一个任意名称,而 driver_name 是输入驱动程序的名称,例如 libinputdevice_name 实际上是用于匹配正确设备的名称。 有关针对正确设备的其他方法,例如 libinputMatchIsTouchscreen,请查阅您的输入驱动程序的文档。 虽然此示例使用 libinput,但这是一种与驱动程序无关的方法,它只是阻止设备传播到驱动程序。

使用热键杀死应用程序

在热键上运行脚本

#!/bin/sh
windowFocus=$(xdotool getwindowfocus)
pid=$(xprop -id "$windowFocus" | grep PID)
kill -9 "$pid"

依赖项:xorg-xprop, xdotool

另请参阅 #可视化地杀死应用程序

阻止 TTY 访问

要在 X 中阻止 tty 访问,请将以下内容添加到 xorg.conf

Section "ServerFlags"
    Option "DontVTSwitch" "True"
EndSection

这可以用于帮助限制对非信任用户可访问的系统上的命令行访问。

阻止用户杀死 X

要防止用户在 X 运行时杀死 X,请将以下内容添加到 xorg.conf

Section "ServerFlags"
    Option "DontZap"      "True"
EndSection
注意: Ctrl+Alt+Backspace 快捷键不是直接触发杀死 X 服务器的原因,而是键盘映射中的 Terminate_Server 操作。 这通常不是默认设置,请参阅 Xorg/键盘配置#使用 Ctrl+Alt+Backspace 终止 Xorg

可视化地杀死应用程序

当应用程序行为异常或卡住时,与其从终端使用 killkillall 并需要查找进程 ID 或名称,xorg-xkill 允许您单击所述应用程序以关闭其与 X 服务器的连接。 许多现有应用程序在与 X 服务器的连接关闭时确实会中止,但有些应用程序可以选择继续运行。

无根 Xorg

Xorg 可以在标准用户权限而不是 root 权限下运行(所谓的“无根”Xorg)。 与以 root 身份运行相比,这是一个显着的安全改进。 请注意,某些流行的 显示管理器 不支持无根 Xorg(例如 LightDMXDM)。

您可以使用 ps -o user= -C Xorg 验证 Xorg 以哪个用户身份运行。

另请参阅 Xorg.wrap(1), systemd-logind(8), Systemd/User#Xorg 作为 systemd 用户服务, Fedora:Changes/XorgWithoutRootRightsFS#41257

使用 xinitrc

要使用 xinitrc 配置无根 Xorg

  • 将 startx 作为登录 shell 的子进程运行; 直接运行 startx,不要使用 exec startx
  • 确保 Xorg 使用虚拟终端,该虚拟终端的权限已设置,即由 logind 在 $XDG_VTNR 中通过 .xserverrc 传递。
  • 如果使用某些专有显示驱动程序,内核模式设置 自动检测 将会失败。 在这种情况下,您必须在 /etc/X11/Xwrapper.config 中设置 needs_root_rights = no

使用 GDM

当使用 内核模式设置 时,GDM 默认将以无 root 权限运行 Xorg。

会话日志重定向

当 Xorg 在无根模式下运行时,Xorg 日志将保存到 ~/.local/share/xorg/Xorg.log。 但是,来自 Xorg 会话的 stdout 和 stderr 输出不会重定向到此日志。 要重新启用重定向,请使用 -keeptty 标志启动 Xorg,并将 stdout 和 stderr 输出重定向到文件

startx -- -keeptty >~/.xorg.log 2>&1

或者,将 /etc/X11/xinit/xserverrc 复制到 ~/.xserverrc,并附加 -keeptty。 请参阅 [4]

以 Root 身份运行 Xorg

如上所述,在某些情况下,无根 Xorg 是默认设置。 如果您的配置是这种情况,并且您需要以 root 身份运行 Xorg,您可以配置 Xorg.wrap(1) 以要求 root 权限

警告: 以 root 身份运行 Xorg 会带来安全问题。 请参阅 #无根 Xorg 以进行进一步讨论。
/etc/X11/Xwrapper.config
needs_root_rights = yes

故障排除

通用

如果出现问题,请查看存储在 /var/log/ 或自 v1.16 以来的无根 X 默认设置中的 ~/.local/share/xorg/ 中的日志。 GDM 用户应检查 systemd 日志[5]

日志文件采用 Xorg.n.log 格式,其中 n 是显示编号。 对于具有默认配置的单用户计算机,适用的日志通常是 Xorg.0.log,但在其他情况下可能会有所不同。 为了确保选择正确的文件,查看 X 服务器会话启动的时间戳以及从哪个控制台启动可能会有所帮助。 例如

$ grep -e Log -e tty Xorg.0.log
[    40.623] (==) Log file: "/home/archuser/.local/share/xorg/Xorg.0.log", Time: Thu Aug 28 12:36:44 2014
[    40.704] (--) controlling tty is VT number 1, auto-enabling KeepTty
提示: 要使用人类可读的时间戳监控日志,tail(1) 的输出可以管道传输到 ts(1)(由 moreutils 软件包提供)。 这仅对在命令运行时添加到日志的行给出正确的时间戳。 例如
$ tail -f ~/.local/share/xorg/Xorg.0.log | ts
  • 然后在日志文件中注意任何以 (EE) 开头的行,这些行表示错误,以及 (WW),这些是可能指示其他问题的警告。
  • 如果您的 $HOME 中有一个 .xinitrc 文件,请删除或编辑它,以便 X 正常启动。 如果您不这样做,X 将显示一个空白屏幕,并且在您的 Xorg.0.log 中似乎没有错误。 简单地删除它将使其在默认 X 环境中运行。
  • 如果屏幕变黑,您仍然可以尝试切换到不同的虚拟控制台(例如 Ctrl+Alt+F6),并盲目地以 root 身份登录。 您可以通过键入 root(键入后按 Enter)并输入 root 密码(再次,键入后按 Enter)来完成此操作。
您也可以尝试使用以下命令杀死 X 服务器
# pkill -x X
如果这不起作用,请使用以下命令盲目重启
# reboot
  • 如果您在键盘、鼠标、触摸板等设备方面遇到问题,请查看 Category:输入设备 中的特定页面。
  • 在 AMDGPU、Intel 和 NVIDIA 文章中搜索常见问题。

黑屏,未指定协议,所有或某些用户的资源暂时不可用

X 在当前用户的主目录中创建配置和临时文件。 确保您的主目录所在的分区上有可用的磁盘空间。 不幸的是,在这种情况下,X 服务器没有提供任何更明显的关于磁盘空间不足的信息。

Matrox 显卡的 DRI 停止工作

如果您使用 Matrox 显卡并且在升级到 Xorg 后 DRI 停止工作,请尝试添加以下行

Option "OldDmaInit" "On"

xorg.conf 中引用显卡的 Device 部分。

帧缓冲区模式问题

X 启动失败,并显示以下日志消息

(WW) Falling back to old probe method for fbdev
(II) Loading sub module "fbdevhw"
(II) LoadModule: "fbdevhw"
(II) Loading /usr/lib/xorg/modules/linux//libfbdevhw.so
(II) Module fbdevhw: vendor="X.Org Foundation"
       compiled for 1.6.1, module version=0.0.2
       ABI class: X.Org Video Driver, version 5.0
(II) FBDEV(1): using default device

Fatal server error:
Cannot run in framebuffer mode. Please specify busIDs for all framebuffer devices

要纠正,请卸载 xf86-video-fbdev 软件包。

程序请求 "font '(null)'"

错误消息:无法加载字体 (null)

某些程序只能与位图字体一起使用。 两个主要的包含位图字体的软件包可用,xorg-fonts-75dpixorg-fonts-100dpi。 您不需要两者都安装; 安装其中一个就足够了。 要找出哪一个更适合您的情况,请尝试使用 xorg-xdpyinfo 中的 xdpyinfo,像这样

$ xdpyinfo | grep resolution

并使用更接近显示值的值。

恢复:在 GUI 登录之前禁用 Xorg

如果 Xorg 设置为自动启动,并且由于某种原因,您需要在登录/显示管理器出现之前阻止它启动(如果系统配置错误,并且 Xorg 无法识别您的鼠标或键盘输入,例如),您可以使用两种方法完成此任务。

  • 将默认目标更改为 rescue.target。 请参阅 systemd#更改默认目标以启动进入
  • 如果您不仅有一个有故障的系统导致 Xorg 无法使用,而且您还设置了 GRUB 菜单等待时间为零,或者无法以其他方式使用 GRUB 来阻止 Xorg 启动,您可以使用 Arch Linux live CD。 按照 安装指南 了解如何挂载并 chroot 到已安装的 Arch Linux。 或者尝试使用 Ctrl+Alt + 功能键(通常从 F1F7,具体取决于哪个未被 X 使用)切换到另一个 tty,以 root 身份登录并按照以下步骤操作。

根据设置,您将需要执行以下一个或多个步骤

  • 禁用显示管理器。
  • 禁用 X 的自动启动
  • 重命名 ~/.xinitrc 或注释掉其中的 exec 行。

使用 "su" 启动的 X 客户端失败

如果您收到 Client is not authorized to connect to server,请尝试添加以下行

session        optional        pam_xauth.so

/etc/pam.d/su/etc/pam.d/su-l。 然后 pam_xauth 将正确设置环境变量并处理 xauth 密钥。

X 启动失败:键盘初始化失败

如果文件系统(特别是 /tmp)已满,startx 将会失败。 日志文件将包含

(EE) Error compiling keymap (server-0)
(EE) XKB: Could not compile keymap
(EE) XKB: Failed to load keymap. Loading default keymap instead.
(EE) Error compiling keymap (server-0)
(EE) XKB: Could not compile keymap
XKB: Failed to compile keymap
Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config.
Fatal server error:
Failed to activate core devices.
...

在相关文件系统上释放一些空间,X 将会启动。

每当尝试观看视频时出现绿屏

您的颜色深度设置错误。 例如,它可能需要设置为 24 而不是 16。

SocketCreateListener 错误

如果 X 终止并显示错误消息 SocketCreateListener() failed,您可能需要删除 /tmp/.X11-unix 中的套接字文件。 如果您之前以 root 身份运行过 Xorg(例如,生成 xorg.conf),则可能会发生这种情况。

尝试以 root 身份运行程序时出现无效的 MIT-MAGIC-COOKIE-1 密钥

该错误意味着只有当前用户有权访问 X 服务器。 解决方案是授予 root 访问权限

$ xhost +si:localuser:root

该行也可以用于授予 X 访问权限给 root 以外的其他用户。

Xorg-server 致命服务器错误:(EE) AddScreen/ScreenInit

如果 Xorg 服务器随机无法工作,并且您在 Xorg 日志中看到

systemd-logind: failed to take device /dev/dri/card0: Operation not permitted
...
AddScreen/ScreenInit failed for driver 0

那么,此问题可能是由 systemd 问题 13943 引起的。 设置 提前 KMS 启动

另请参阅