Bir ekran bağlı veya bağlı değilse bir komut çalıştırmanın alternatif bir yolu
Alternatif bir çözüm, küçük bir arka plan komut dosyası çalıştırmak olacaktır. Aşağıdaki betiği arka planda çalıştırarak, işlemci yükündeki herhangi bir artışı ölçemedim.
İkinci bir ekran bağlandığında veya bağlantısı kesildiğinde bir komut dosyasını veya başka bir komutu çalıştırmanın kolay ve kolay bir yoludur.
Örnek komut dosyası
- Sadece her beş saniyede bir komutun çıktısında "bağlı" dizesinin kaç kez oluştuğunu kontrol eder
xrandr
("bağlantı kesildi" ile yanlış eşleşmeleri önlemek için "bağlandıktan" sonraki boşluğa dikkat edin). Her olay bağlı bir ekranı temsil eder.
- Olay sayısı değişirse, bir ekran bağlandı veya bağlantısı kesildi. Değişiklik kod tarafından "fark edilir" ve bir komuta bağlanabilir, senaryonun baş bölümünde ayarlayabilirsiniz.
Senaryo
#!/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
Nasıl kullanılır
- Komut dosyasını boş bir dosyaya kopyalayın,
connect_screen.py
Kafa bölümünde, connect üzerinde çalışmak için komutu ayarlayın (Örnek olarak "gedit" i ayarladım, tırnaklara dikkat edin). Aynı zamanda bağlantı kesilmesi için de bir komut ayarlamak mümkündür. Başka disconnect_command = ""
olduğu gibi bırakın .
Eğer bir disconnect- komutunu kullanıyoruz, ayrıca satırı:
run_command(disconnect_command)
ve satırı yorumlayın:
pass
Kodda belirtildiği gibi
- Komut dosyasını bir terminalden test edin, ekranınızı bağlayın ve hepsinin iyi çalışıp çalışmadığına bakın.
Her şey yolunda giderse, başlangıç uygulamalarınıza ekleyin: Dash> Startup Applications> Komut ekle:
/bin/bash -c "sleep 15&&python3 /path/to/connect_screen.py"
sleep 15
Komut çalıştırmak başlamadan önce masaüstü tamamen başlatmak yapmaktır. Sadece emin olmak için.
DÜZENLE
"Akıllı" bir şekilde başlangıçta komut dosyası nasıl çalıştırılır.
Mola sleep 15
genel olarak çalışmalıdır, ancak başlatma süresi sisteme göre farklılık gösterdiğinden, doğru mola süresini bulmak biraz deneme gerektirebilir. Küçük bir ekleme ile komut dosyası "akıllı" olur ve xrandr
komutun gerçek komut dosyasını başlatmadan önce başarılı olmasını bekler . Aşağıdaki sürümü kullanırsanız, yalnızca komutu eklemeniz gerekir:
python3 /path/to/connect_screen.py
Başlangıç Uygulamalarınıza. Daha fazla kullanım yukarıdaki sürümle tamamen aynıdır.
Senaryo
#!/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