DP KVM-Switchのxubuntu 16.04に2つの画面(ノートブックT460s自体に3つ)を備えたマルチモニターセットアップがあります。ノートブックは、2つのDPポートでDock-3ドッキングステーションを介して接続されます。
デスクトップからラップトップに切り替えるたびにモニター構成が失われるため、単一モニターのアクティブ化を含めてゼロから構成する必要があります。ノートブックがドッキングステーションに接続されている場合、これらの構成を保存して自動的に復元する方法はありますか?
画面が接続されたxrandr
の(短縮された)出力:
Screen 0: minimum 8 x 8, current 6800 x 1440, maximum 32767 x 32767
eDP1 connected 2560x1440+4240+0 (normal left inverted right x axis y axis) 310mm x 170mm
2560x1440 60.00*+ 48.00
1920x1440 60.00
.........
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP2-1 connected 1680x1050+2560+0 (normal left inverted right x axis y axis) 473mm x 296mm
1680x1050 59.88*+ 59.95
1920x1080 60.00 50.00 59.94
..........
DP2-2 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
2560x1440 59.95*+
1920x1200 59.95
..........
DP2-3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
あなたが直面している問題は16.04に限ったものではなく、多くのUbuntuバージョンで起こります。
xrandr
の出力を読み取り、タイプミスをしないと仮定すると、次のコマンドは画面を設定したとおりに配置します。
xrandr --output DP2-2 --auto --pos 0x0 --output DP2-1 --auto --pos 2560x0 --output eDP1 --auto --pos 4240x0
最も迅速で簡単な解決策は、ショートカットキーに追加することです:[設定]> [キーボード]> [アプリケーションショートカット]。次に、画面が接続された後にショートカットを押します。
xrandr
の出力から、接続されている3つの画面の情報を確認できます。
eDP1 connected 2560x1440+4240+0
DP2-1 connected 1680x1050+2560+0
DP2-2 connected primary 2560x1440+0+0
最後のセクション:2560x1440+4240+0
、パート:+4240+0
では、結合された画面(x、y)の全体像で画面の位置を確認できます。左から右に、画面は明らかに次のように配置されます。
DP2-2 +0+0 | DP2-1 +2560+0 | eDP1 +4240+0
この配置が自動的に記憶されない場合、この回答の最初に追加したコマンドを使用して設定できます。
オプション--auto
を追加しました。画面をactivateする必要があると述べたためです。
要求に応じて、画面が接続されている場合にセットアップを行うためにバックグラウンドで実行する小さなbashスクリプト:
#!/bin/bash
let "target = 3"
swon=false
function nscreens {
curr=$(xrandr | grep " connected" | wc -l)
}
function setup_scr {
xrandr --output DP2-1 --auto --pos 0x0 \
--output DP2-2 --auto --pos 2560x0 \
--output eDP1 --auto --pos 4240x0
}
while true
do
sleep 4
nscreens
if [ "$curr" -eq "$target" ] && [ "$swon" == false ]
then
setup_scr
swon=true
Elif [ "$curr" -ne "$target" ] && [ "$swon" == true ]
then
swon=false
fi
done
setup_scr.sh
として保存し、実行可能にします次のコマンドを使用して、ターミナルでテスト実行します。
/path/to/setup_scr.sh
画面の接続/切断
正常に動作する場合は、起動アプリケーションに追加します:ダッシュ>起動アプリケーション>追加。コマンドを追加します。
/bin/bash -c "sleep 15 && /path/to/setup_scr.sh"
4秒に1回、スクリプトは接続された画面の数をカウントします。 3に等しい場合、セットアップを1回実行し、「swon」(スイッチオン)の値をtrue
に切り替えて画面を設定したことを思い出します。
その後、画面の数が3に等しくなくなった場合、「swon」が再びfalse
に設定され、以下同様に続きます。
2画面設定でスクリプトをテストしましたが、うまく機能しましたが、どこかにタイプミスをした可能性が常にあり、明らかにシステムでテストできませんでした。エラーの場合、言及してください。
これらの答えは復元についてのみです。現在の状態を「保存」するには、このスクリプト(dump_randr.sh)を使用できます
#!/bin/bash
fileName="$1"
while read -r line; do
IFS=" "
entry=( $line )
display=${entry[0]}
IFS="x+"
if [[ "${entry[2]}" == primary ]]; then
primary=1
measurement=( ${entry[3]} )
else
primary=0
measurement=( ${entry[2]} )
fi
unset IFS
width=${measurement[0]}
height=${measurement[1]}
left=${measurement[2]}
top=${measurement[3]}
xrandrOpt="$xrandrOpt --output $display --mode ${width}x${height} --pos ${left}x${top}"
((primary)) && xrandrOpt="$xrandrOpt --primary"
done < <(xrandr | grep " connected")
echo "#!/bin/bash" > "$fileName"
echo "xrandr $xrandrOpt" > "$fileName"
chmod +x "$fileName"
これにより、現在のxrandrオプションがダンプされ、再び使用できるようになります。現在の設定を保存するには、次のようにします。
dump_randr.sh 2_monitors_home.sh
2_monitors_home.sh
を作成して現在の状態を復元します。
Jacob Vlijmが提案した方法を試してみましたが、もちろん私のシナリオ用に編集しました。それはまったく機能せず、何らかの理由で--autoまたは--posを含むxrandコマンドがマシンをクラッシュさせました(Xubuntu 16.04を使用しています)
これが私の解決策です
xrandr --output HDMI1 --mode 1920x1080 --pos 0x0 --rate 60.00 --output eDP1 --off
これは、HDMI経由で接続したセカンダリディスプレイを使用し、ラップトップディスプレイを無効にしながら1080p 60Hzに設定します
xrandr --output eDP1 --mode 1366x768 --pos 0x0 --rate 60.00
これにより、ラップトップのディスプレイがネイティブ解像度1366x768 60Hzに設定されます
2台のディスプレイに接続しているときは最初のセットアップを使用し、ラップトップディスプレイのみに接続しているときは2番目のセットアップを使用します。
これが私のsetup_scr.shファイルです。
#!/bin/bash
let "target = 2"
swon=false
function nscreens
{
curr=$(xrandr | grep " connected" | wc -l)
}
function setup_dubai
{
xrandr --output HDMI1 --mode 1920x1080 --pos 0x0 --rate 60.00 --output eDP1 --off
}
function setup_normal
{
xrandr --output eDP1 --mode 1366x768 --pos 0x0 --rate 60.00
}
while true
do
sleep 4
nscreens
if [ "$curr" -eq "$target" ] && [ "$swon" == false ]
then
setup_dubai
swon=true
Elif [ "$curr" -ne "$target" ] && [ "$swon" == true ]
then
swon=false
setup_normal
fi
done
Jacob Vlijm に感謝します