外部モニターを有効にし、ラップトップのモニターを無効にするカスタム xrandr スクリプトがあります。外部モニターを切断すると、画面が空白になるため、モニターを有効にできません。
コンソール tty (ctrl-alt-f1) にアクセスして、xrandr を起動できるようにしたいです (つまり xrandr --output eDP1 --auto
)。tty でそれを実行すると、「ディスプレイを開けません」というメッセージが表示されます。これを行うためのヒントはありますか?
答え1
コンソールに移動する必要はありません。カスタム キーボード ショートカットを追加して内部画面を再度有効にすることで、同じことを実現できます。
システム設定 > キーボード > ショートカット > カスタムショートカットを選択し、+ をクリックして、選択したショートカットにコマンドを追加します。
xrandr --output <screenname> --auto
私のシステム (ラップトップ、15.10) でテストしたところ、画面をオフにして、キーボード ショートカットでコマンドを実行して、正常に再度有効にできました :)
あるいは
編集版を使うこともできますこのスクリプト以下のバージョン(小さなバックグラウンドスクリプト、外部スクリーンが接続されているかどうかを4秒ごとにチェックする)は、内部スクリーンがオンになっていることを確認します。
#!/usr/bin/env python3
import subprocess
import time
# --- set your internal screen below (the example is my primary screen)
internal = "DVI-I-1"
#---
# don't change anything below
scr_info1 = 0
while True:
time.sleep(4)
# read the current screen setup from xrandr
get_screens = subprocess.check_output("xrandr").decode("utf-8").splitlines()
scr_data = [l for l in get_screens if " connected " in l]
# count the number of connected screens
scr_info2 = len(scr_data)
# if the number of connected screens changes,
# switch off the internal one if there are two screens
if scr_info2 != scr_info1:
if scr_info2 == 2:
ext = [s.split()[0] for s in scr_data if not internal in s][0]
subprocess.Popen(["xrandr", "--output", internal, "--off", "--output", ext, "--auto"])
else:
subprocess.Popen(["xrandr", "--output", internal, "--auto"])
scr_info1 = scr_info2
セットアップ方法
- 上記のスクリプトを空のファイルにコピーし、
switch_screens.py
- スクリプトの先頭セクションで、内部画面。確認するには、ターミナル ウィンドウを開いてコマンドを実行します
xrandr
(外部画面は接続されていません)。「connected」を含む行の最初の文字列には、画面の名前が表示されます。VGA-1
次のように表示されます。 テスト - ターミナル ウィンドウを開いて次のコマンドを入力して実行します。
python3 /path/to/switch_screens.py
スクリプトの実行中に、外部画面を接続し、内部画面がオフになるまで待ってから再度切断します。
すべて正常に動作する場合は、以下のコマンドをスタートアップ アプリケーションに追加します。Dash > スタートアップ アプリケーション > 追加を開きます。次のコマンドを追加します。
/bin/bash -c "sleep 15 && python3 /path/to/switch_screens.py"
ログアウトして再度ログインします。これで、外部画面が接続されている場合、内部画面は自動的にオフになり、切断すると再び有効になります。
このスクリプトはシステムに目立った負担をまったく加えません。