为 borked X 显示进行通用屏幕重置?

为 borked X 显示进行通用屏幕重置?

是否有一种通用方法可以在中断的 X 会话上重置显示?假设您在笔记本电脑进入睡眠状态后打开它的屏幕,并且显示屏是空白的,或者乱码到看不见。您可以按ctrlaltf1并看到 X 会话正在运行,但由于某种原因,您看不到屏幕。

对于中断的终端,您可以键入resetstty sanexrefresh将重新绘制屏幕,​​但这无助于解决由显卡引起的显示问题。

在 Gnome 3 中,gnome --replace会这样做,但我正在运行 XFCE4,老实说,这是一个全局问题......是否有一个xdg-*orx-*包装器?我正在寻找可以在我使用的任何平台上设置键绑定的东西。

答案1

没有类似的机制,因为原因完全不同。

乱码文本终端来自于多个源都写入终端,而它们之间没有协调。因此,您最终会得到不属于它的文本,这可以通过使您希望看到其文本的应用程序重新显示它想要的内容来解决。xrefresh与此类似。它很少需要,因为 X 服务器已经管理应用程序之间的协调:每个应用程序应该只在自己的窗口中绘制。xrefresh仅当应用程序表现不佳时才需要 - 与文本终端中的情况相反,在文本终端中没有办法表现得更好。

至于stty sane恢复输入设置的等效项,这通常不适用,因为应用程序不应该修改全局参数——这里每个应用程序都应该只弄乱自己的窗口。出现了一些不好的事情,例如抓取指针或键盘的应用程序xdotool key XF86Ungrab,或Ctrl+ Alt+Keypad/如果启用)。

如果由于驱动程序错误导致显示屏保持空白或混乱,则没有通用的恢复机制。任何认真编程过的人都知道,错误发生后不存在完全通用的恢复机制,因为错误根据定义是意外的事情,并且由于您无法预测检测到错误后系统的状态,因此无法确定无论你做什么都会按预期恢复它。从错误中恢复的唯一可靠的方法是向上级机构求助:例如,如果在进程中检测到错误,则将其杀死(由于进程隔离,错误应限制在该进程中)并启动一个新实例。如果在内核中检测到错误,则更高权限将是硬件 - 重新启动计算机。如果出现显示驱动程序错误,通常受影响的只是 GPU 的状态,因此重置 GPU 就足够了。据我所知,没有通用的方法可以告诉 X.org 驱动程序重置 GPU 并根据自己的喜好重新初始化它。您可以尝试以下几种方法,但它们并不总是有效:

  • 切换到文本控制台 ( Ctrl++ ) AltF1然后切换回来 ( Ctrl++ Alt) F7。如果错误严格存在于 GPU 状态中,那么应该可以解决它,因为在切换回来时,X 服务器应该将 GPU 重置到之前的状态。但是,如果该错误还影响驱动程序的内部结构,或者驱动程序在切换时备份了无效状态,那就无济于事了。
  • 切换到文本控制台启动另一个 X 服务器实例,终止它,然后切换回来。如果错误是驱动程序修改了某些设置而无法正确重新初始化,即使上面的更简单的变体不起作用,这也可能起作用。另一种变体是保持另一个实例运行;根据错误的性质,这也有帮助。
  • 尝试使用 禁用所有显示xrandr,例如

    export DISPLAY=:0
    xrandr
    # see what displays are listed, e.g. “DVI-0 connected …”
    xrandr --output DVI-0 --off
    xrandr --output DVI-0 --auto
    

    这偶尔会有所帮助,但并不经常,因为错误通常发生在驱动程序和 GPU 之间,并且不受显示器的影响。

  • 如果您正在运行 Compiz,请终止它(如果确实需要,请重新启动它)。杀死窗口管理器不太可能有帮助xrefresh,所以我怀疑如果gnome3 --replace有帮助,那是因为它重新启动了 Compiz。

相关内容