ユーザーごと、ディスプレイごとにモニター構成プロファイルを保存できるツールに関しては、autorandr がまさにそれを行います。
私のラップトップには NVIDIA カードが搭載されているので、xrandr の代わりに disper バックエンドを使用しています。 autodisper
として呼び出すと、Autorandr はモニターを管理するバックエンドとして disper を使用します。 .ただし、この投稿の残りの部分では、autorandr
と呼びます。 一貫性のために。
autorandr --save profile_name
でプロファイルを保存できます . autorandr
を実行中 すると、プロファイルのリストが表示され、どのプロファイルが現在の構成として検出されているかが特定されます。
例:
$ autorandr
laptop
syncmaster19 (detected)
autorandr --change
を使用して、現在の構成に適したプロファイルを自動的にロードするように指示できます。 .ホットプラグ時に実行する udev ルールと組み合わせたこのコマンドは、要求したことを実行します。
追加の予防措置として、 --default laptop
を追加しました 現在の構成に一致するプロファイルが保存されていない場合、ラップトップのディスプレイがデフォルトになります。したがって、表示を切り替えるために使用する完全なコマンドは次のとおりです。
autorandr --change --default laptop
残念ながら、モニターをホットプラグしても、マシンから udev 出力が得られません。私は NVIDIA 独自のドライバーを使用しているので、それは当然のことです。そこで、今のところ XF68Display キー (Fn-F8) にバインドしましたが、これはほぼ同じです。
私は、RandR をポーリングし続け、VGA が接続/切断されたときに LVDS1 と VGA1 を切り替える単純な (自家製の) スクリプトを使用しています。 (HDMI の場合 出力、次のスクリプト ファイルで、すべての VGA1
を変更します HDMI1
まで )
これは汚いソリューションですが、問題なく機能しています。
私のセットアップ用にカスタマイズされています。RandR の出力名 (LVDS1
と VGA1
) そして、私とは異なり、VGA の RandR デフォルト モードでおそらく問題ないでしょう。
#!/bin/bash
# setting up new mode for my VGA
xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
xrandr --addmode VGA1 1920x1080
# default monitor is LVDS1
MONITOR=LVDS1
# functions to switch from LVDS1 to VGA and vice versa
function ActivateVGA {
echo "Switching to VGA1"
xrandr --output VGA1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
MONITOR=VGA1
}
function DeactivateVGA {
echo "Switching to LVDS1"
xrandr --output VGA1 --off --output LVDS1 --auto
MONITOR=LVDS1
}
# functions to check if VGA is connected and in use
function VGAActive {
[ $MONITOR = "VGA1" ]
}
function VGAConnected {
! xrandr | grep "^VGA1" | grep disconnected
}
# actual script
while true
do
if ! VGAActive && VGAConnected
then
ActivateVGA
fi
if VGAActive && ! VGAConnected
then
DeactivateVGA
fi
sleep 1s
done
完全な手順:
<オール>
スクリプトの上に置く (homemadeMonitor.sh
) 好きなディレクトリに
ターミナルで次のコマンドを入力して、.sh ファイルを実行可能にします
chmod +x homemadeMonitor.sh
.sh ファイルを実行します
./homemadeMonitor.sh
質問の「[a] モニターが接続されていることを確認する方法」の部分への回答:
サポートはまだかなり異なりますが、最近のカーネルでは、ディスプレイのホットプラグが発生したときに udev イベントを生成するためのサポートがいくつかあります。カーネル 2.6.38 および ATI X1400 ハードウェアでは、初めて VGA ディスプレイに接続したときにイベントが発生しますが、その後のディスプレイの切断または再接続ではイベントが発生しません。 Intel ハードウェアのサポートの方が優れている場合があります。 NVIDIA 独自のドライバーは、現在 KMS をサポートしていません。 NVIDIA ハードウェアでホットプラグ イベントを探したことはありませんが、うまくいくかどうかは疑わしいです。
udev を試してみたい場合は、次の手順を試すことができます:
- 最新のカーネルに更新
- カーネル モード設定 (KMS) が有効になっていることを確認します。有効にすると、カーネル出力で報告されるはずです。私は
[drm] radeon kernel modesetting enabled
と言います と[drm] initializing kernel modesetting
udevadm monitor --property
を実行 ディスプレイの接続 (切断) 時にイベントが報告されるかどうかを確認します
ディスプレイのホットプラグで udev イベントを取得している場合は、次のような udev ルールでスクリプトをトリガーできます:
ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/path/to/hotplug.sh"
注: これはしません KMS を使用しないため、プロプライエタリ バイナリ ドライバーで nVIDIA GPU を使用する場合に動作します。あなたはしません udev イベントを取得します。