web-dev-qa-db-ja.com

接続されていないディスプレイを無効にする(xrandr)

自宅にいるときに使用する2つのビデオ出力(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

そして、これで私のラップトップディスプレイがアクティブのままになります。

私が遭遇している問題は、コンピュータを動作させる前に2つの画面を無効にすることを覚えていない場合があることです。到着したら、--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

2台のモニターがCRTCをあきらめないようで、私のハードウェアは2しかサポートしていないため、これらのモニターを接続して無効にするまでロックされています。

18
user18806

次のように、すべての構成を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

派手なスクリプトではありませんが、うまくいくかもしれません。

12
Agomezl

私はこれが非常に古いスレッドであることを知っていますが、モニターの電源をオン/オフしてから切断する方法についての情報を使用して、問題の解決方法を共有したいと思います。私は autorandr と呼ばれるプログラムを使用し、基本的に2つのモニターでディスプレイをセットアップし、次にautorandr --save docked。次に、それを使用しましたxrandr --output VGA --off、次にモニターのプラグを抜き、続いてautorandr --save mobile。 Autorandrは、プラグインまたはアンプラグしたものに応じて、自動的に異なるモードを切り替えます。うまくいけば、これが偶然これに遭遇した他の人を助けます!また、これは私の最初の本当の答えのようなものです。より明確になるように何かを変更できるかどうかをお知らせください。

2
ViperZer0

残念ながら画面を抜いたときに発生するイベントはないようです。スクリプトポーリングxrandrは非常に重いですが、/ sys/class/drm/*/statusを調べてそれらのファイルをポーリングし、ステータスが「接続済み」から他の何かに変化したとき(または完全に消えたとき)に必要なxrandrアクションを実行できます。

1
Cwissy