एक कमांड चलाने का एक वैकल्पिक तरीका अगर एक स्क्रीन जुड़ा हुआ है या डिस्कनेक्ट हो गया है
एक वैकल्पिक समाधान एक छोटे पृष्ठभूमि स्क्रिप्ट को चलाने के लिए होगा। पृष्ठभूमि में नीचे की स्क्रिप्ट को चलाने से, मैं प्रोसेसर लोड में कोई वृद्धि नहीं माप सकता।
जब भी कोई दूसरी स्क्रीन कनेक्ट या डिस्कनेक्ट की जाती है, तो स्क्रिप्ट, या किसी अन्य कमांड को चलाना एक आसान तरीका है।
उदाहरण लिपि
- बस हर पांच सेकंड में जांचता है कि कमांड के आउटपुट में स्ट्रिंग "कनेक्टेड" कितनी बार होती है
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
हेड सेक्शन में, कनेक्ट को चलाने के लिए कमांड सेट करें (मैं एक उदाहरण के रूप में "जीडिट" सेट करता हूं, उद्धरणों को ध्यान में रखता हूं)। इसके अलावा डिस्कनेक्ट पर एक कमांड सेट करना संभव है, इसी तरह। disconnect_command = ""
जैसा है वैसा ही छोड़ दें ।
यदि आप डिस्कनेक्ट-कमांड का उपयोग करते हैं, तो लाइन को भी अनकम्प्लिमेंट करें:
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