すべての良い一日。
実際、怠はこの小さな自動化を実装することを私に奨励しました。
実際、それがどのように始まったか。
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コンソールに入力するだけです

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