接続の自動検出\ 2番目のモニターの切断

すべての良い一日。



実際、怠はこの小さな自動化を実装することを私に奨励しました。



実際、それがどのように始まったか。




gentooがインストールされたラップトップとi3wmウィンドウマネージャーがあります。 また、いくつかのモニターがあります(自宅、職場など)。 すべてのモニターの解像度は異なり、接続方法(VGA、HDMI、DVI)は異なります。 積極的に、最初の2つを使用します。



以前は、2番目のモニターを接続するときに、この同じモニターを初期化したコマンドを呼び出す必要がありました。 自動キーを使用してコマンドを実行しても、常に目的の結果が得られるとは限りませんでした(許可を推測しなかった)。



xrandr --auto
      
      







したがって、同じコマンドを実行する必要がありましたが、たとえば許可など、他のキーのセットを使用しました。



--mode







そして、xrandrには各モニターにいくつかの解像度オプションがありますが、1つ(このモニターの最大を満たす)がありますが、各モニターでは異なります(モニター自体が異なるため)。



したがって、私は解決策を探す必要がありました...







まず第一に、2番目のモニターを接続/切断する状況を特定して、何らかの方法で問題を解決する必要がありました。

結局のところ、複雑なことは何もありませんでした。



必要なのは、監視ルールが実際に保存される/etc/udev/rules.d



ディレクトリを調べることだけです。



次に、そこにファイルを作成する必要があります。 このディレクトリにファイルを作成するには、いくつかの小さなルールが適用されます。 つまり、ファイル名の拡張子は.rulesでなければなりません。 2番目は、この状況ではそれほど重要ではありません。 すべてのファイルはアルファベット順に配置され、ファイルの実行順序に影響します。



ファイルにこのような名前を付けました-70-persistent-monitor.rules-このフォルダーに既に存在していたファイルとの類推によってのみ。

ファイルの内容は次のとおりです。

 KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/bin/change_monitor.sh"
      
      







KERNELおよびSUBSYSTEM値を取得するには、次のコマンドを実行します。



  sudo udevadm monitor
      
      







そして、2番目のモニターのプラグを抜きます







ACTION-応答するアクションを示します。この場合、有効と無効の両方です。 実際、RUNは実行するスクリプトです。 例からわかるように、ファイルはchange_monitor.shと呼ばれ、/ usr / bin /にあります。 場所は異なる場合がありますが。 たとえば、/ home / user / bin



まあ、実際にはファイル自体



 #!/bin/sh #export Display for output export DISPLAY=:0.0 #some scripts for work xrandr_command="/usr/bin/xrandr" awk_command="/bin/awk" #get max resolution of connected devises resolution_VGA=`${xrandr_command} | $awk_command '/VGA1 connected/ { getline; print $1}'` resolution_HDMI=`${xrandr_command} | $awk_command '/HDMI1 connected/ { getline; print $1}'` #if resolution exist we get true if [ -n "$resolution_VGA" ]; then #notify-send $resolution_VGA xrandr --output VGA1 --above LVDS1 --mode $resolution_VGA elif [ -n "$resolution_HDMI" ]; then #notify-send $resolution_HDMI xrandr --output HDMI1 --above LVDS1 --mode $resolution_HDMI else xrandr --auto fi
      
      







おそらく実装はあまり美しくありませんが、機能しています。 xrandrコマンドの出力から、接続されたモニターの最大解像度を取得しようとします。 モニターが接続されている場合、接続されたライン/ VGA1が見つかります。 そうでない場合は、VGA1が切断され、何も見つかりません。



PS異なるシステムでは、デバイスの命名(VGA1 HDMI1)が異なる場合があります。 表示するには、xrandrコンソールに入力するだけです





ここではすべてが明確だと思います。



All Articles