跳至內容
出自 Arch Linux 中文维基

X.Org 伺服器 — 通常簡稱為 X — 是 X.Org 基金會 實現的 X 窗口系統 (X11) 顯示伺服器,它是 Linux 用戶中最流行的顯示伺服器。它的普及使其成為圖形用戶界面應用程式的必備條件,因此大多數發行版都廣泛採用了它。

有關替代和潛在繼任者,參見 Wayland

安裝

Xorg 可以通過安裝 xorg-server 包來安裝。

此外,xorg-apps包組 組中的一些軟體包對於某些特定的配置任務是必要的。它們會在相關部分中指出。

軟體包組 xorg包組 包含了 Xorg 伺服器、xorg-apps包組 中的軟體包以及字體。

驅動安裝

Linux 內核包含了開源的視頻驅動,支持硬體加速。然而,OpenGLVulkan 和 X11 的 2D 加速還需要用戶空間工具。

首先,識別顯卡(Subsystem 輸出顯示具體型號):

$ lspci -v -nn -d ::03xx
提示:::03 在這裡表示 "顯示控制器 PCI 設備類",而 xx 代表 "該類的任何子類"。

然後,安裝適當的驅動。您可以在包資料庫中搜索完整的開源 Device Dependent X (DDX) 驅動列表:

$ pacman -Ss xf86-video

然而,特定硬體的 DDX 如今可以看作是遺留方案。xorg-server 中有一個通用的 modesetting(4) DDX 驅動,它使用內核級顯示模式設置(KMS)並且在現代硬體上工作得很好。這個 modesetting DDX 驅動使用 Glamor[1] 來提供 2D 加速,而 Glamor 需要使用 OpenGL。

如果您想要安裝另一個 DDX 驅動,請注意 Xorg 會自動搜索已安裝的驅動:

  • 如果無法找到設備在下表中列出的驅動,會首先檢查是否安裝了不支持 2D 和 3D 加速的 fbdev (xf86-video-fbdev).
  • 如果依然沒有找到,會搜索 vesa (xf86-video-vesa),這是一個支持大部分顯卡的通用驅動,不提供任何 2D 和 3D 加速功能。
  • 如果沒有找到 vesa,Xorg 會回退到 modesetting(4) DDX 驅動.

為了充分發揮顯卡性能,請按下表安裝驅動程序。推薦先使用開源驅動,這些驅動出問題的可能性較小。

廠商 類型 文檔 DRM 驅動 OpenGL OpenGL (multilib) Vulkan Vulkan (multilib) DDX 驅動
AMD (原 ATI) 開源 AMDGPU 包含在 Linux 當中 mesa 3 lib32-mesa 3 vulkan-radeon / amdvlk4 lib32-vulkan-radeon / lib32-amdvlk4 xf86-video-amdgpu
ATI xf86-video-ati
閉源 AMDGPU PRO amdgpu-pro-oglpAUR lib32-amdgpu-pro-oglpAUR vulkan-amdgpu-proAUR lib32-vulkan-amdgpu-proAUR xf86-video-amdgpu
Intel 開源 Intel graphics mesa 3 lib32-mesa 3 vulkan-intel lib32-vulkan-intel xf86-video-intel2
NVIDIA 開源 Nouveau1 mesa 3 lib32-mesa 3 vulkan-nouveau lib32-vulkan-nouveau xf86-video-nouveau
閉源 NVIDIA1 nvidianvidia-open5 nvidia-utils lib32-nvidia-utils nvidia-utils lib32-nvidia-utils nvidia-utils
nvidia-535xx-dkmsAUR nvidia-535xx-utilsAUR lib32-nvidia-535xx-utilsAUR nvidia-535xx-utilsAUR lib32-nvidia-535xx-utilsAUR nvidia-535xx-utilsAUR
nvidia-470xx-dkmsAUR nvidia-470xx-utilsAUR lib32-nvidia-470xx-utilsAUR nvidia-470xx-utilsAUR lib32-nvidia-470xx-utilsAUR nvidia-470xx-utilsAUR
nvidia-390xx-dkmsAUR nvidia-390xx-utilsAUR lib32-nvidia-390xx-utilsAUR nvidia-390xx-utilsAUR lib32-nvidia-390xx-utilsAUR nvidia-390xx-utilsAUR
  1. 對於使用集成顯卡和獨立顯卡的 NVIDIA Optimus 筆記本,請參考 NVIDIA Optimus
  2. 對於第四代及更新的 Intel 顯卡,推薦使用 modesetting DDX 驅動。參閱:Intel 圖形處理器#安裝
  3. 對舊硬體來說,mesa-amber / lib32-mesa-amber 當中的經典 OpenGL 驅動(非 Gallium3D 驅動)也許會有用(Mesa 22.0 及更高版本不再支持經典非 Gallium3D 驅動),參閱 OpenGL#安裝
  4. 相比 amdvlk / lib32-amdvlk 更推薦 vulkan-radeon / lib32-vulkan-radeon (參閱 AMDGPU#安裝)。
  5. 有關 nvidianvidia-open 之間的區別,請參閱 NVIDIA#安裝

其它 DDX 驅動也都位於 xorg-drivers包組 軟體包組中。

沒有閉源驅動,Xorg 也應正常工作。閉源驅動的典型用途是某些高級圖形功能例如為遊戲提供 3D 渲染加速。某些例外是某些最新的 GPU(尤其是 NVIDIA 的 GPU),它們不受開源驅動支持。

AMD

GPU 架構 開源驅動 非開源驅動
RDNA 及之後 AMDGPU AMDGPU PRO
GCN 3 及之後
GCN 1和2 AMDGPU1 / ATI 不支持
TeraScale 及之前 ATI 不支持
  1. AMD GPU 實驗支持

運行

Xorg(1) 命令通常不直接運行。而是使用顯示管理器或者xinit來啟動 X server。

提示:用戶通常需要選擇安裝窗口管理器桌面環境以配合使用 X。

配置

注意:Arch 提供了位於 /usr/share/X11/xorg.conf.d 的默認配置文件。通常情況下,用戶無需進行額外的配置與修改即可正常使用。

Xorg 使用名為 xorg.conf 的配置文件和後綴為 .conf 的文件作為它的初始設置。這些文件的位置的完整列表可以在xorg.conf(5)中找到,其中還附有全部可用選項的詳盡解釋。

使用 .conf 文件

/etc/X11/xorg.conf.d/ 目錄保存主機特有設置,你可以創建自己的配置文件,需要以 XX- 開頭(兩個數字和一個連接符)並以 .conf 結尾。X 伺服器啟動時會解析這些文件,將其視為 xorg.conf 的一部分進行處理。如果配置之間有衝突,將會使用最後被處理的文件。所以通用的設置應該放到前面。最後會解析 xorg.conf 文件。

有關配置選項請參考 Fedora wiki

使用 xorg.conf

可以通過 /etc/X11/xorg.conf/etc/xorg.conf 配置 Xorg,用下面命令可以生成 xorg.conf 模板:

# Xorg :0 -configure

執行後會在 /root/ 生成 xorg.conf.new 文件,然後你可以將它複製到 /etc/X11/xorg.conf

提示:如果已經運行了 X 伺服器,請使用不同的 display,例如 Xorg :2 -configure

或者,顯卡的專有驅動可能也提供了自動配置 Xorg 的工具,詳情請參考 NVIDIAAMDGPU PRO

注意:配置文件關鍵字是大小寫敏感的,"_" 字符會被忽略。配置,包括選項名也是大小寫敏感的,會自動忽略空白和 "_"。

輸入設備

對於輸入設備,X 伺服器默認使用 libinput 驅動 (xf86-input-libinput),但 xf86-input-evdev 和相關驅動也可作為替代方案。[2]

Udev,作為 systemd 的依賴項被提供,將會檢測硬體。這兩個驅動程序將作為幾乎所有設備的熱插拔輸入驅動,它們的行為定義在位於 /usr/share/X11/xorg.conf.d/ 的默認配置文件 10-quirks.conf40-libinput.conf 中。

在啟動 X server 後,日誌文件將會為每個設備顯示發生了什麼熱插拔(注意最近的日誌名稱可能有所不同):

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

如果兩個驅動都不支持您的設備, 請從 xorg-drivers包組 組安裝需要的驅動程序。如果你想要使用其他驅動,也可以這樣做。

想要干預熱插拔,請參考 #配置

更詳細的信息,請參考 libinput 文後的連結和 Fedora wiki

輸入映射

參考鍵盤按鍵#映射按鍵碼

滑鼠加速

滑鼠加速

擴展滑鼠按鍵

滑鼠按鍵

觸摸板

參考 LibinputTouchpad_Synaptics

觸控螢幕

觸控螢幕

鍵盤設置

參考 Xorg/鍵盤設置英語Xorg/Keyboard_configuration

顯示器設置

手動配置

注意:
  • 新的 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

多個顯示器

參考主要文章多頭了解通用信息。

多於一個顯卡

你必須指定正確的驅動,輸入你的顯卡的 bus 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

為了獲取 BusID (十六進制):

$ 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)

這個示例的BusID是 0:2:01:0:0

顯示大小和 DPI

默認情況下,Xorg 自 2009-01-30 起始終將 DPI 設置為 96。版本 21.1 時有一個自動偵測的修改,但是被 回退 了。

通過 -dpi 命令行選項可以設置 X 伺服器的DPI。

在需要精細細節(如字體渲染)的情況下,擁有正確的DPI尤其必要。此前,製造商試圖為96 DPI(10.3英寸對角線顯示器為800x600,13.2英寸顯示器為1024x768)創建一個標準。如今,屏幕 DPI 各不相同,在水平和垂直方向上可能不相等。例如,1440x900的19英寸寬屏LCD的DPI可能為89x87。

要查看您的顯示大小和 DPI 是否正確:

$ xdpyinfo | grep -B2 resolution

如果明確知道顯示器的物理尺寸規格,可以在Xorg配置文件中設置,這樣就可以計算出合適的DPI。

Section "Monitor"
    Identifier             "Monitor0"
    DisplaySize             286 179    # 單位:毫米
EndSection

如果你只想設置顯示器的物理尺寸的規格,不用從頭到尾創建新的完整 xorg.conf 配置文件的話,可以在 /etc/X11/xorg.conf.d/90-monitor.conf 中設置屏幕的規格:

Section "Monitor"
    Identifier             "<default monitor>"
    DisplaySize            286 179    # In millimeters
EndSection
注意:如果你使用的是專有 NVIDIA 驅動程序,你可能需要把 Option "UseEdidDpi" "FALSE" 放在 DeviceScreen 部分下才能生效。

如果你沒有屏幕的物理寬度和高度的規格(現在大多數規格只按對角線尺寸列出)的話,可以使用顯示器的原始解析度(或長寬比)和對角線長度來計算水平和垂直的物理尺寸。

勾股定理(畢達哥拉斯定理)計算一個對角線長度為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#Xorg 使其永久化保存.

專有的NVIDIA驅動程序

您可以通過在DeviceScreen部分下添加選項來手動設置DPI:

Option              "DPI" "96 x 96"
手動DPI設置的注意事項

GTK 經常通過可選的 X resource Xft.dpi 覆蓋X伺服器的DPI。 可以通過這個來檢查當前的DPI:

$ xrdb -query | grep dpi

對於 3.16 版本之後的 GTK 庫,當此變量未明確設置時,GTK 會將其設置為 96。要讓 GTK 應用程式遵守X伺服器 DPI設置,你可能需要將 Xft.dpi 顯式設置為與伺服器相同的值。 Xresource Xft.dpi是一些桌面環境在個人設置中強制設置DPI到一個特定值的方法。 其中包括 KDETDE

DPMS

DPMS (顯示器電源管理信號) 是一種技術,可以在計算機不使用時,可以使用顯示器的省電行為. 這將允許您的顯示器在預定時間段後自動進入待機。

合成

X 的合成擴展使窗口層次結構的整個子樹呈現到屏幕外的緩衝區。應用程式可以獲取緩衝區的內容並執行它們喜歡的任何操作。屏幕外的緩衝區可以自動合併到父窗口中,也可以被稱為合成管理器的外部程序合併。要了解更多信息,參考compositing window manager

某些窗口管理器(例如 Compiz, Enlightenment, KWin, Marco, Metacity, Muffin, Mutter, Xfwm)自己完成這些合成。對於其他窗口管理器,可以使用一個獨立的合成管理器。

合成管理器列舉

  • Picom — 支持陰影、高級模糊和漸變的輕量級合成管理器。
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

技巧和技巧

自動化

這一節列出用於鍵盤、滑鼠輸入和窗口操作自動化的實用程序(例如移動、調整大小和層級)。

工具 軟體包 手冊 keyboard input 窗口操作
xautomation xautomation xte(1) 也包含 screen scraping tools。無法模擬 F13+.
xdo xdo xdo(1) 用於執行基本窗口操作的輕量級X實用工具
xdotool xdotool xdotool(1) 充滿 Bug 且開發不活躍,比如說CLI解析錯誤。[3][4]
xvkbd xvkbdAUR xvkbd(1) 面向 Xorg 的虛擬鍵盤,在發送字母時也有 -text 選項。
AutoKey autokey-qtAUR autokey-gtkAUR 文檔 強大的宏和腳本工具,有Qt和Gtk兩種前端。

也可以參考 Clipboard#Tools and an overview of X automation tools.

嵌套 X 會話

在嵌套的 X 的會話中啟動其他桌面環境:

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

這會在你當前的 X 會話中啟動一個1024 × 768大小的 Window Maker 會話。

需要安裝xorg-server-xnest

Xephyr 是一個更新的方法。

遠程啟動 GUI 程序

查看主條目:X11轉發

按需禁用和啟用輸入源

利用xinput你可以您可以暫時禁用或啟用輸入源。這可能很有用,例如,在具有多個滑鼠的系統上(如ThinkPad),可以只使用一個滑鼠以避免不必要的點擊。

official repositories安裝 xorg-xinput

找到要禁用的設備的ID:

$ xinput

例如在Lenovo 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_id禁用設備,device_id是你要禁用的設備的ID。在此示例中,我們將禁用ID為10的Synaptics觸摸板:

$ xinput --disable 10

要重新啟用該設備,只需發出相反的命令:

$ xinput --enable 10

持久禁用輸入源

你可以使用配置片段來禁用特定的輸入源:

/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-xpropxdotool

阻止 TTY 訪問

這篇文章的某些內容需要擴充。

原因:為什麼需要這麼做呢? (在 Talk:Xorg 中討論)

要在X中阻止tty訪問,請將以下內容添加到xorg.conf

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

防止用戶結束 X

要防止用戶在運行時被結束,請將以下內容添加到xorg.conf

Section "ServerFlags"
    Option "DontZap"      "True"
EndSection
注意:The Ctrl+Alt+Backspace shortcut is not directly what triggers killing the X server, but the Terminate_Server action from the keyboard map. This is usually not set by default, see Xorg/Keyboard configuration#Terminating Xorg with Ctrl+Alt+Backspace.

可視化結束應用程式

當應用程式行為異常或卡住時,與其從終端使用 killkillall 並查找進程 ID 或名稱,不如使用 xorg-xkill 點擊該應用程式以關閉其與 X 伺服器的連接。許多現有應用程式確實會在與 X 伺服器的連接關閉時中止,但有些應用程式可能會選擇繼續運行。

沒有 root 權限的 Xorg

Xorg 可以使用標準用戶權限而不是 root 來運行(所謂的「rootless」 Xorg)。這對於用 root 權限運行是很大的安全性提升。注意大多數顯示管理器都不支持 rootless Xorg。

你可以用 ps -o user $(pgrep Xorg) 來驗證 Xorg 在以什麼用戶的身份運行。

也可參考Xorg.wrap(1), systemd-logind(8), Systemd/用戶#Xorg_as_a_systemd_user_service, [5]FS#41257

使用 xinitrc

要配置「rootless」的Xorg xinitrc:

  • 將startx作為當前登錄shell的子進程運行;直接運行{ic | startx}},不要使用{ic | exec startx}}
  • 確保 Xorg 使用已設置權限的虛擬終端,即通過 logind 通過 .xserverrc$XDG_VTNR 中傳遞。
  • 如果使用某些專有的驅動程序, kernel mode setting 自動檢測將失效. 在這種情況下, 必須在 /etc/X11/Xwrapper.config 中設置needs_root_rights = no

使用 GDM

在使用kernel mode setting時,Xorg將在沒有root權限的情況下運行GDM

重定向Xorg會話日誌

當Xorg在沒有root權限的情況下運行時,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來啟動Xorg。參閱[6]

Xorg as Root

As explained above, there are circumstances in which rootless Xorg is defaulted to. If this is the case for your configuration, and you have a need to run Xorg as root, you can configure Xorg.wrap(1) to require root:

警告:Running Xorg as root poses security issues. See #Rootless Xorg for further discussion.
/etc/X11/Xwrapper.config
needs_root_rights = yes

故障和修復

一般問題

如果你在使用Xorg中遇到問題,請查看位於 /var/log/ 的日誌,或者對於從 v1.16 起的沒有 root 權限的 Xorg,日誌文件位於 ~/.local/share/xorg/GDM 用戶應當檢查 systemd journal. [7]

日誌文件的格式為 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 ) 然後輸入密碼(同樣地,輸入後按下 Enter )。
你也可以嘗試使用以下命令殺死 X server:
# pkill -x X
如果不行的話,直接重啟:
# reboot

黑屏,沒有指定協議..,資源暫時不可用等問題

X在當前用戶的主目錄中創建配置和臨時文件。確保主目錄所在的分區上有可用的可用磁碟空間。然而,在這種情況下,X伺服器不提供有關磁碟空間不足的更明顯信息。

Matrox顯卡的DRI功能失效

如果你使用的是Matrox顯卡,在升級到Xorg7後它的DRI功能失效,試著在xorg.conf的顯卡設備設置段Device section中加入下面一行:

Option "OldDmaInit" "On"

無法運行在frambuffer模式下

如果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就可以了。

無法加載'(null)'字體

  • 一些程序無法運行,提示無法加載`(null)'字體.

這些軟體包可能需要一些額外的字體。某些程序只能使用位圖字體。 目前有兩種主要的位圖字體包:xorg-fonts-75dpixorg-fonts-100dpi。選擇其中一個就可以了。通過下面這個命令查看顯示設置:

$ xdpyinfo | grep resolution

根據顯示信息選擇合適dpi的字體即可(用75 或 100 代替XX):

# pacman -S xorg-fonts-XXdpi

修復:在出現GUI登錄界面之前,不啟動Xorg

如果Xorg設置為自動啟動並且出於某些原因你不想讓它出現在 登錄/顯示 管理器之前,有兩種辦法:

  • 將啟動目標修改為 rescue.target. 參閱 systemd#Change default target to boot into.
  • 如果 X 無法啟動,而且 GRUB 超時時間設置成了 0,無法進 Grub 禁止 Xorg boot. 可以使用 Arch CD 啟動,然後掛載配置文件所在分區,
可以以root用戶使用命令
# fdisk -l
來查看你的全部分區。通常你所要的那個是形如 /dev/sda1 這樣的東東。然後,使用命令
# mount /dev/sda1 /mnt

掛載該分區至 /mnt。 這樣你的文件系統就掛載在了 /mnt 下。例如,可以刪除 gdm 來阻止Xorg正常啟動,或者做其他一些必需的改動。

無法用"su"以root身份啟動X客戶端

如果你遇到"Client is not authorized to connect to server",嘗試將以下內容

 session        optional        pam_xauth.so

加入到/etc/pam.d/su文件中。pam_xauth 就可以正常設置環境變量以及處理 xauth 密鑰了。

X 啟動失敗:鍵盤初始化失敗

遇到「X failed to start : Keyboard initialization failed」。 如果您的硬碟已滿,startx將失敗。 /var/log/Xorg.0.log 的末尾會是:

 (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 error

如果 X 結束,伴隨著錯誤信息 "SocketCreateListener() failed",你可能需要刪除位於 /tmp/.X11-unix 的 socket 文件。這有可能在你先前以 root 身份運行 Xorg (例如想要生成 xorg.conf)後發生。

想要以 root 權限運行程序時出現 無效的 MIT-MAGIC-COOKIE-1 密鑰

這個錯誤意味著只有當前用戶有權訪問 X server。解決辦法是將訪問權授予 root:

$ xhost +si:localuser:root

這條命令也可以將 X server 訪問權授予其他用戶。

另請參閱