Debian 上的 X 和 xrandr 问题

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 吗?或者是其他东西?

答案1

快速连续的消息可能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您启用内部的而不是像您现在尝试做的那样之后启用。

相关内容