วิธีอื่นในการเรียกใช้คำสั่งหากหน้าจอเชื่อมต่อหรือตัดการเชื่อมต่อ
ทางเลือกอื่นคือการเรียกใช้สคริปต์พื้นหลังเล็ก ๆ การรันสคริปต์ด้านล่างในพื้นหลังฉันไม่สามารถวัดการเพิ่มขึ้นของตัวประมวลผลใด ๆ
มันเป็นวิธีที่สะดวกในการเรียกใช้สคริปต์หรือคำสั่งอื่น ๆ เมื่อใดก็ตามที่หน้าจอที่สองเชื่อมต่อหรือตัดการเชื่อมต่อ
สคริปต์ตัวอย่าง
- เพียงตรวจสอบทุกห้าวินาทีจำนวนครั้งที่ "เชื่อมต่อ" เกิดขึ้นในเอาต์พุตของคำสั่ง
xrandr
(คำนึงถึงช่องว่างหลังจาก "เชื่อมต่อ" เพื่อป้องกันการจับคู่ที่ผิดพลาดด้วย "ตัดการเชื่อมต่อ") แต่ละเหตุการณ์แสดงถึงหน้าจอที่เชื่อมต่อ
- หากจำนวนการเปลี่ยนแปลงที่เกิดขึ้นแสดงว่าหน้าจอถูกเชื่อมต่อหรือตัดการเชื่อมต่อ การเปลี่ยนแปลงคือ "สังเกต" โดยสคริปต์และสามารถเชื่อมต่อกับคำสั่งคุณสามารถตั้งค่าในส่วนหัวของสคริปต์
บท
#!/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 = ""
มันเป็นอย่างอื่น
หากคุณใช้คำสั่งตัดการเชื่อมต่อให้ยกเลิกการใส่เครื่องหมายในบรรทัดด้วย:
run_command(disconnect_command)
และแสดงความคิดเห็นในบรรทัด:
pass
ตามที่ระบุในสคริปต์
- ทดสอบสคริปต์จากเทอร์มินัลเชื่อมต่อหน้าจอของคุณและดูว่าทั้งหมดทำงานได้ดีหรือไม่
หากทำงานได้ดีให้เพิ่มลงในแอปพลิเคชันเริ่มต้นของคุณ: Dash> แอปพลิเคชันเริ่มต้น> เพิ่มคำสั่ง:
/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