Debian 上的 X 和 xrandr 問題
我遇到了一個我認為與我正在使用的 X、xrandr 和 WM 相關的問題。我在
- Debian 8 穩定版,已更新;
- 英特爾顯卡,
- i3wm,不是 DE
- lightDM(不確定這是否相關,但在某些時候我認為可能是相關的)。我在崩潰時使用了 GDM,然後嘗試安裝 lightdm。我不知道 DM 對 X 進行身份驗證的複雜性。
這是場景。我回到家,將筆記型電腦連接到兩台顯示器(VGA1 和 HDMI1),然後關閉 LVDS1。為此,我在 .bashrc 中有一個函式
function duo { xrandr --output HDMI1 --right-of LVDS1 xrandr --output LVDS1 --off # this is probably bad, but it still works thanks to xrandr xrandr --output HDMI1 --mode 1280x1024 xrandr --output HDMI1 --right-of VGA1 xrandr --output HDMI1 --rotate left xrandr --output VGA1 --mode 1280x1024 }
該功能很混亂,因為我正在試驗並試圖分解 xrandr 應該如何更改佈局。這在沒有問題的情況下 100% 有效。當我想斷開連接並返回“筆記型電腦”模式時,我拔出兩條電纜並按 Super+Shift+F8,這在我的 i3wm 中綁定到
xrandr --auto
,這應該斷開 VGA1 和 HDMI1,因為它們不再插入並且 i3wm 將移動所有工作區到單個螢幕。有時這可行,但幾乎經常 X 伺服器崩潰並進入 DM 提示登錄。所以我失去了所有打開的應用程序和可能的文件(儘管在保存方面我是強迫症)。這是一個系統日誌。它以我的腳本列印的一行開始,該行綁定到我的 i3wm 配置文件中的 Super+Shift+F8。這個快捷方式的原因是我沒有針對 VGA 或 HDMI 的 udev 規則。我有一個執行腳本的規則,但刪除了它。我可以發帖,但是文章已經很大了——不想弄亂它。所以當我拔下 HDMI 或 VGA 時,我的 LVDS 變黑了,這個腳本應該打開它。我也可以從 /var/log 發布 Xorg.log,但它似乎沒有任何用處(我會發布,但再次發布 - 它們很長 - 請讓我知道)。
現在很複雜:我安裝了 Debian 8 附帶的 Gnome 3。當我使用它並且沒有 i3wm 時 - 一切正常並且 X 不會崩潰!所以我可以插入 2 個顯示器,關閉 LVDS 並安全地拔掉插頭。並不是我不喜歡 Gnome,而是我非常習慣於 i3wm 和最小的燈光設置(在我的 Arch 桌面上使用相同的設置)。對於 Gnome3,筆記型電腦也很舊。我寧願不去嘗試其他DE。
#!/bin/bash # Super+Shift+F8 is bound to this script in WM function laptop() { xrandr --auto xrandr --output VGA1 --off xrandr --output HDMI1 --off } echo "running laptop script" laptop Oct 21 20:13:12 debianone /etc/gdm3/Xsession[8574]: running laptop script Oct 21 20:13:12 debianone /etc/gdm3/Xsession[8574]: xrandr: cannot find crtc for output LVDS1 Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) intel(0): Allocated new frame buffer 1024x1280 stride 4096, tiled Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: X Error of failed request: BadMatch (invalid parameter attributes) Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Major opcode of failed request: 140 (RANDR) Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Minor opcode of failed request: 21 (RRSetCrtcConfig) Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Serial number of failed request: 35 Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Current serial number in output stream: 35 Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: i3: No usable outputs available. Oct 21 20:13:13 debianone org.gtk.vfs.Daemon[8621]: A connection to the bus can't be made Oct 21 20:13:13 debianone org.gtk.vfs.Daemon[8621]: g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting. Oct 21 20:13:13 debianone org.a11y.Bus[8621]: g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting. Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: [9400:9400:1021/201313:ERROR:chrome_browser_main_extra_parts_x11.cc(57)] X IO error received (X server probably went away) Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: [libi3] libi3/font.c Using Pango font DejaVu Sans Mono, size 8 Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: [libi3] libi3/font.c X11 root window dictates 98.223565 DPI Oct 21 20:13:13 debianone org.a11y.atspi.Registry[8648]: XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0" Oct 21 20:13:13 debianone org.a11y.atspi.Registry[8648]: after 1608 requests (1608 known processed) with 0 events remaining. Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: drracket: Fatal IO error 11 (Resource temporarily unavailable) on X server :0. Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: [9434:9434:1021/201313:ERROR:x11_util.cc(82)] X IO error received (X server probably went away) Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Can't open display :0 Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Exiting due to signal. Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0" Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: after 2716 requests (2716 known processed) with 0 events remaining. Oct 21 20:13:13 debianone /etc/gdm3/Xsession[4989]: Process 8664 dead! Oct 21 20:13:13 debianone /etc/gdm3/Xsession[4989]: Warning: no target process found. Waiting for it... Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Process 8664 dead! Oct 21 20:13:13 debianone /etc/gdm3/Xsession[8574]: Warning: no target process found. Waiting for it... Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "synaptics" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: AT Translated Set 2 keyboard: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Asus WMI hotkeys: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: USB Camera: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Microsoft Microsoft® Nano Transceiver v1.0: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Microsoft Microsoft® Nano Transceiver v1.0: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Microsoft Microsoft® Nano Transceiver v1.0: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Logitech USB Keyboard: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Logitech USB Keyboard: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Sleep Button: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Video Bus: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) evdev: Power Button: Close Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (II) UnloadModule: "evdev" Oct 21 20:13:13 debianone gdm-Xorg-:0[8485]: (EE) Server terminated successfully (0). Closing log file.
我在 X、KDE、Debian 和 Ubuntu 中看到過關於類似問題的錯誤報告,它們顯示已修復。我肯定已更新到最新版本,但仍然崩潰。我需要向後移植更新的 X 嗎?或者是其他東西?
消息的快速連續性很可能會
xrandr
觸發 X 伺服器中的錯誤。我建議你做兩件事:
- 送出針對 X 伺服器的錯誤。無論您做什麼,它都不應該崩潰(最壞的情況下,它應該會產生錯誤消息)
- 更改您的腳本,使其
xrandr
僅呼叫一次:xrandr --output LVDS --off --output VGA1 --mode 1280x1024 --output HDMI1 --mode 1280x1024 --rotate left --right-of VGA1
這裡的重點是,您可以將每個輸出的多個命令傳遞給
xrandr
,以及多個輸出。我個人也會將其中一個輸出設置為主要輸出(帶有--primary
),但這並不重要。編輯:更詳細地查看日誌,我們看到:
Oct 21 20:13:12 debianone /etc/gdm3/Xsession[8574]: xrandr: cannot find crtc for output LVDS1
CRTC是顯示控制器晶片;將 GPU 生成的幀緩衝區轉換為掃描線的實際組件,然後通過選擇的任何輸出(VGA、DVI、HDMI、DisplayPort、yada yada)發送出去;該縮寫代表陰極射線管控制器,儘管該術語顯然有些過時。大多數 GPU 的輸出數量少於其輸出數量,而 CRTC 的數量通常是決定 GPU 卡可以同時控制多少顯示器的限制因素。直到幾年前,對於大多數英特爾的移動 GPU,這個數字還是兩個,儘管隨著 4K 螢幕的出現(每台顯示器需要兩個 CRTC),大多數現代移動 GPU 現在都有三個。
由於系統還討論了 LVDS(這是一個較舊的標準,現在被嵌入式顯示埠或 eDP 取代),假設您有兩個 CRTC 是一個相當安全的選擇。
我上面引用的錯誤消息的意思是,當您要求 X 伺服器啟用 LVDS 面板時,它會尋找可用的 CRTC,但找不到。然後事情似乎變得非常糟糕。因此,解決您的問題的方法是確保在您嘗試啟用外部顯示器時有可用的 CRTC,方法是在啟用內部輸出之前而不是之後禁用外部輸出*,**就像*您現在嘗試做的那樣。