画面が接続または切断された場合にコマンドを実行する代替方法
別の解決策は、小さなバックグラウンドスクリプトを実行することです。以下のスクリプトをバックグラウンドで実行すると、プロセッサの負荷の増加を測定できませんでした。
2番目の画面が接続または切断されるたびに、スクリプトまたはその他のコマンドを実行するための簡単で便利な方法です。
サンプルスクリプト
- コマンドの出力に文字列 "connected"が何回現れるかを5秒ごとに単純にチェックします
xrandr
( "connected"の後のスペースに注意して、 "disconnected"との誤った一致を防ぎます)。各オカレンスは、接続された画面を表します。
- 発生回数が変化した場合、画面が接続されたか、切断されました。変更はスクリプトによって「認識」され、コマンドに接続できます。スクリプトのheadセクションで設定できます。
スクリプト
#!/usr/bin/env python3
import subprocess
import time
#--- set both commands (connect / disconnect) below
connect_command = "gedit"
disconnect_command = ""
#---
def get(cmd): return subprocess.check_output(cmd).decode("utf-8")
# - to count the occurrenc of " connected "
def count_screens(xr): return xr.count(" connected ")
# - to run the connect / disconnect command(s)
def run_command(cmd): subprocess.Popen(["/bin/bash", "-c", cmd])
# first count
xr1 = None
while True:
time.sleep(5)
# second count
xr2 = count_screens(get(["xrandr"]))
# check if there is a change in the screen state
if xr2 != xr1:
print("change")
if xr2 == 2:
# command to run if connected (two screens)
run_command(connect_command)
elif xr2 == 1:
# command to run if disconnected (one screen)
# uncomment run_command(disconnect_command) to enable, then also comment out pass
pass
# run_command(disconnect_command)
# set the second count as initial state for the next loop
xr1 = xr2
使い方
- スクリプトを空のファイルにコピーして、名前を付けて保存します
connect_screen.py
ヘッドセクションで、接続時に実行するコマンドを設定します(例として "gedit"を設定しますが、引用符に注意してください)。同様に、切断時にコマンドを設定することもできます。それ以外のdisconnect_command = ""
場合はそのままにします。
disconnect-コマンドを使用する場合は、次の行もコメント解除します。
run_command(disconnect_command)
行をコメントアウトします:
pass
スクリプトに示されているとおり
- 端末からスクリプトをテスト実行し、画面を接続して、すべてが正常に機能するかどうかを確認します。
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します。[ダッシュ]> [スタートアップアプリケーション]> [コマンドを追加]:
/bin/bash -c "sleep 15&&python3 /path/to/connect_screen.py"
これsleep 15
は、スクリプトの実行を開始する前にデスクトップを完全に起動することです。念のため。
編集
「スマート」な方法で起動時にスクリプトを実行する方法。
休憩はsleep 15
一般的には機能するはずですが、起動時間はシステムごとに異なるため、適切な休憩時間を見つけるにはいくつかの実験が必要になる場合があります。少し追加するだけで、スクリプトは「スマート」になりxrandr
、実際のスクリプトを開始する前にコマンドが成功するのを待ちます。以下のバージョンを使用する場合、コマンドを追加するだけです。
python3 /path/to/connect_screen.py
スタートアップアプリケーションに。以降の使用法は、上記のバージョンとまったく同じです。
スクリプト
#!/usr/bin/env python3
import subprocess
import time
#--- set both commands (connect / disconnect) below
connect_command = "gedit"
disconnect_command = ""
#---
while True:
time.sleep(5)
try:
subprocess.Popen(["xrandr"])
except:
pass
else:
break
# function to get the output of xrandr
def get(cmd): return subprocess.check_output(cmd).decode("utf-8")
# - to count the occurrenc of " connected "
def count_screens(xr): return xr.count(" connected ")
# - to run the connect / disconnect command(s)
def run_command(cmd): subprocess.Popen(["/bin/bash", "-c", cmd])
# first count
xr1 = None
while True:
time.sleep(5)
# second count
xr2 = count_screens(get(["xrandr"]))
# check if there is a change in the screen state
if xr2 != xr1:
if xr2 == 2:
# command to run if connected (two screens)
run_command(connect_command)
elif xr2 == 1:
# command to run if disconnected (one screen)
# uncomment run_command(disconnect_command) to enable, then also comment out pass
pass
# run_command(disconnect_command)
# set the second count as initial state for the next loop
xr1 = xr2