禁用未插电显示器(xrandr)

禁用未插电显示器(xrandr)

我有一台笔记本电脑,有两个视频输出,我在家时会用到(HDMI1、VGA1)。要启用它们,我执行以下操作:

xrandr --output HDMI1 --right-of LVDS1 --auto
xrandr --output LVDS1 --off
xrandr --output VGA1 --right-of HDMI1 --auto

当我想去上班时,我会带着笔记本电脑,但首先运行以下命令:

xrandr --output VGA1 --off
xrandr --output LVDS1 --left-of HDMI1 --auto
xrandr --output HDMI1 --off

然后这会使我的笔记本电脑显示屏保持活动状态,就像它应该的那样。

我遇到的问题是,有时我上班前忘记禁用两个屏幕。上班后,我尝试了各种组合--output--off但无法重新启用屏幕。

这是我运行时得到的输出xrandr,没有显示任何内容:

Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192
LVDS1 connected (normal left inverted right x axis y axis)
   1366x768       60.0 +
   1024x768       60.0··
   800x600        60.3     56.2··
   640x480        59.9··
VGA1 disconnected 1920x1080+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
HDMI1 disconnected 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
DP1 disconnected (normal left inverted right x axis y axis)
  1920x1080 (0x4c)  148.5MHz
        h: width  1920 start 2008 end 2052 total 2200 skew    0 clock   67.5KHz
        v: height 1080 start 1084 end 1089 total 1125           clock   60.0Hz

我尝试过的几乎每个命令都会返回:

xrandr: Configure crtc 2 failed
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  21 (RRSetCrtcConfig)
  Serial number of failed request:  40
  Current serial number in output stream:  40

这就像两个显示器不会放弃它们的 CRTC,而且由于我的硬件只支持 2 个,所以它被锁定,直到我插入这些显示器并禁用它们。

答案1

您可以将所有配置放在一个命令中,例如:

xrandr --output VGA1 --off --output HDMI1 --off --output LVDS1 --left-of HDMI1 --auto

这应该可以完成工作,而且由于命令很难写(太长),您可以创建一个脚本来测试当前连接的屏幕并进行所需的设置。(您可以添加到快捷键)

if [ -z `xrandr --query | grep "HDMI1 connected"` ]
then
    xrandr --output DP2 --off --output DP1 --off --output HDMI2 --off \
        --output HDMI1 --off \
        --output LVDS1 --mode 1366x768 --pos 0x0 --rotate normal \
        --output VGA1 --off
else
    xrandr --output DP2 --off --output DP1 --off --output HDMI2 --off \
        --output HDMI1 --mode 1920x1080 --pos 0x0 --rotate normal --primary \
        --output LVDS1 --off --output VGA1 --off
fi

这不是一个花哨的脚本,但可能对你有用。

答案2

我知道这是一个非常老套的话题,但我想分享我如何解决这个问题,使用您关于打开和关闭显示器然后断开连接的信息。我使用了一个名为自动随机数基本上只需用两个显示器设置我的显示器,然后autorandr --save docked。然后我使用它xrandr --output VGA --off,然后拔下我的显示器,然后autorandr --save mobile。Autorandr 将根据您插入或拔下的内容自动在不同模式之间切换。希望这对偶然发现此问题的其他人有所帮助!此外,这就像我的第一个真正的答案,所以如果我可以更改任何内容以使其更清楚,请告诉我。

答案3

不幸的是,当屏幕拔下时似乎没有生成事件。使用脚本轮询 xrandr 非常繁重,但您可以查看 /sys/class/drm/*/status 并轮询这些文件,然后在状态从“已连接”变为其他状态(或完全消失)时采取所需的 xrandr 操作。

相关内容