特定の外部モニターに接続するたびに、デフォルトの解像度が必要な解像度ではないため、再度設定する必要があります。
特定のディスプレイの特定の解像度を保存し、そのディスプレイを接続した場合にデフォルトのディスプレイをオフにするにはどうすればよいですか?
以下の2つのオプション:
#!/usr/bin/env python3
import subprocess
import time
# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8")
def run(cmd):
subprocess.call(cmd)
def get_screens():
return [l.split()[0] for l in get("xrandr").splitlines() if " connected" in l]
def set_screen(n_scr, screens):
if n_scr == 1:
run(["xrandr", "--output", default, "--auto"])
run(["xrandr", "-s", singleres])
print("1 screen")
Elif all([n_scr == 2, external in screens]):
run(["xrandr", "--output", default, "--off"])
run(["xrandr", "-s", extrares])
print("2 screens")
screens = get_screens()
n_scr2 = len(screens)
set_screen(n_scr2, screens)
#!/usr/bin/env python3
import subprocess
import time
# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"
def get(cmd):
try:
return subprocess.check_output(cmd).decode("utf-8")
except subprocess.CalledProcessError:
pass
def run(cmd):
subprocess.call(cmd)
def get_screens(scrdata):
return [l.split()[0] for l in scrdata.splitlines() if " connected" in l]
def set_screen(n_scr, screens):
if n_scr == 1:
run(["xrandr", "--output", default, "--auto"])
run(["xrandr", "-s", singleres])
print("1 screen")
Elif all([n_scr == 2, external in screens]):
run(["xrandr", "--output", default, "--off"])
run(["xrandr", "-s", extrares])
print("2 screens")
n_scr1 = None
while True:
time.sleep(4)
scrdata = get("xrandr")
if scrdata:
screens = get_screens(scrdata)
n_scr2 = len(screens)
if n_scr2 != n_scr1:
set_screen(n_scr2, screens)
n_scr1 = n_scr2
set_screens.py
として保存しますスクリプトのheadセクションで、次の値を置き換えます。
# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"
(現在の設定はテスト設定用です)
スクリプトをテスト実行して適用します。
オプション1を使用する場合、ショートカット:
ターミナルを開き、次のコマンドを使用して、外部画面を使用して、または使用せずにスクリプトを実行します。
python3 /path/to/set_screens.py
意図したとおりに画面を設定する必要があります。
その後、すべてが正常に機能する場合は、スクリプトをショートカットに追加します。システム設定>「キーボード」>「ショートカット」>「カスタムショートカット」を選択します。 「+」をクリックして、コマンドを追加します。
python3 /path/to/set_screens.py
オプション2を使用する場合、バックグラウンドスクリプト:
ターミナルを開き、次のコマンドを使用してスクリプトを実行します。
python3 /path/to/set_screens.py
外付けモニターを接続/切断します。解像度を変更し、意図したとおりにデフォルトモニターのオン/オフを切り替える必要があります。
その後、すべてが正常に機能する場合は、スタートアップアプリケーションにスクリプトを追加します:ダッシュ>スタートアップアプリケーション>追加。コマンドを追加します。
/bin/bash -c "sleep 10 && python3 /path/to/set_screens.py"