GUI प्रोग्राम में टर्मिनल से कीस्ट्रोक्स (F5) कैसे भेजें?


40

मैं कुछ आँकड़े दिखाने के लिए क्रोमियम (कियोस्क मोड) के संयोजन में रास्पबेरी पाई का उपयोग कर रहा हूं। पाई में कनेक्टेड कीबोर्ड नहीं है इसलिए मैंने टर्मिनल से क्रोमियम (टैब) प्रक्रिया में कीस्ट्रोक्स भेजने के लिए एक समाधान खोजा । सामान्य इनपुट काम करता है लेकिन मैं F5इस समाधान के माध्यम से कुछ कैसे भेजूं (एक विशेष कुंजी: ब्राउज़र रिफ्रेश)?

# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0

जवाबों:


51

जीयूआई कार्यक्रम अपने मानक इनपुट से नहीं पढ़ते हैं, वे एक्स सर्वर से अपना इनपुट प्राप्त करते हैं । वहाँ एक खिड़की के लिए एक कीस्ट्रोक इंजेक्षन करने के लिए उपकरण हैं। xdotool काफी सामान्य और सुविधाजनक है।

आपको उस विंडो आईडी को ढूंढना होगा जिसे आप कीस्ट्रोक भेजना चाहते हैं। आप xdotool के साथ ऐसा कर सकते हैं। xdotool search --class Chromeसभी Chrome विंडो की विंडो ID की सूची लौटाता है। यदि यह एक से अधिक रिटर्न देता है, तो आपको अपने इच्छित को चुनना होगा। आप xdotool search --nameवर्ग के बजाय शीर्षक पर मिलान करने के लिए उपयोग कर सकते हैं । आप wmctrl के आउटपुट को पार्स कर सकते हैं और वांछित विंडो आईडी निकाल सकते हैं।

एक बार जब आपको सही विंडो आईडी मिल जाती है, तो आप xdotoolएक कीस्ट्रोक को इंजेक्ट करने के लिए कॉल कर सकते हैं । दुर्भाग्य से, कई एप्लिकेशन सिंथेटिक घटनाओं को अस्वीकार कर देते हैं, यानी किस्ट्रोक्स और एक अन्य एप्लिकेशन द्वारा भेजे गए माउस इवेंट। यह क्रोम के वर्तमान संस्करणों के मामले में है। एक अलग तंत्र द्वारा किसी अन्य एप्लिकेशन से कीस्ट्रोके को इंजेक्ट करना संभव है, लेकिन इसके लिए विंडो को फोकस करने की आवश्यकता होती है। आप यह सब xdotool के साथ कर सकते हैं, लेकिन यह क्रोम विंडो और बैक पर तेज़ी से फ़्लिकर करने का कारण बनेगा। निम्नलिखित स्निपेट F5पहली क्रोम विंडो (कुछ हद तक अनियंत्रित क्रम) में भेजता है।

xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)

या xdotool के पुराने संस्करणों के साथ:

xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)

याद रखें कि यह F5उस विंडो पर भेजता है और यह तय करना है कि इसके साथ क्या करना है। क्रोम में, यह वर्तमान टैब को पुनः लोड करता है।


4
--windowidझंडा अब है --window(आदेश आप के रूप में ज्यादा चेतावनी दी है)
लुइस मैडॉक्स

2
--titleविकल्प अब है --name(आदेश ईमानदारी के रूप में ज्यादा चेतावनी दी है)
jpaugh

2
घोंसला पूरी तरह से अनावश्यक है, यह होना चाहिए xdotool search --class Chrome key F5
phil294

1
@Blauhirn घोंसला xdotool के पुराने संस्करणों में आवश्यक था। लेकिन धन्यवाद, मैंने नया सिंटैक्स दिखाने के लिए अपना उत्तर अपडेट कर दिया है।
गिल्स एसओ- बुराई को रोकें '

ओह, और जब से मैं इसे अपडेट कर रहा हूं, क्रोम आजकल सिंथेटिक घटनाओं को खारिज कर देता है। आह
गिल्स एसओ- बुराई को रोकें '

15

ऊपर दिए गए समाधान ने इस तरह xdotool का उपयोग किया

 xdotool key --windowid <window> <keystroke>

जो मेरे लिए काम नहीं किया। कुछ प्रयोग करने के बाद, मैं वहां पहुंचा

 xdotool windowactivate --sync <window> key <keystroke>

एक बार, यह काम करने लग रहा था, मैंने कुछ लिपियों को परिभाषित किया और अपनी .lircrc फाइल को यहां शो के रूप में अपडेट किया:

http://pcfellow.com/ClementineRemote.html


मुझे आश्चर्य है कि आपका पहला उदाहरण काम क्यों नहीं करता है? गैर-केंद्रित विंडो में कीस्ट्रोक्स भेजना अच्छा होगा।
गेरमीया

1
@Geremia, यह संभवतः Xdotool प्रलेखन में SENDEVENT NOTES में दिए गए कारण के लिए काम नहीं करता है ।
जन्थेलमे '’१

4

मेरे पास रास्पबेरी पाई पर चलने वाले रास्पबेरी पाई पर एक समान उपयोग का मामला था। मुझे कियोस्क मोड का उपयोग करके क्रोम पर टैब घुमाने की जरूरत है (दुख की बात है कि पुराने क्रोम पर ऐसा करने के लिए एक्सटेंशन स्थापित करना अब उचित नहीं है)। स्वीकृत उत्तर के उदाहरण में कुछ टाइपोस हैं या बस मेरे सॉफ़्टवेयर संस्करणों के साथ काम नहीं करता है, यहाँ मेरे लिए काम करता है:

xdotool key --window "$(xdotool search --class Chromium | head -1)" Ctrl+Tab

4

यदि आप एक कस्टम वेबपेज प्रदर्शित करने के लिए क्रोमियम का उपयोग कर रहे हैं और आप इसे नियमित रूप से ताज़ा करना चाहते हैं, तो आप इसमें निम्नलिखित टैग जोड़ सकते हैं:

<meta http-equiv="refresh" content="5">

इसे हर 5 सेकंड में स्वचालित रूप से रीफ़्रेश करने के लिए (यदि आप चाहें तो इसे छोटा या लंबा सेट कर सकते हैं)।


2
अच्छी कोशिश है, लेकिन मैं अपने ट्विटर, मेरे आईएसपी और मेरे द्वारा
देखी

4
आप उपयोगकर्ता स्क्रिप्ट का उपयोग करके उस टैग को पृष्ठ में सम्मिलित कर सकते हैं। विंडो में कीप भेजने से कम भंगुर समाधान हो सकता है।
शेरबंग

2

मैंने ऐतिहासिक रूप से ऑटो हॉट की का उपयोग किया है, जैसे कि मुख्य प्रेस भेजने जैसी चीजें, लेकिन यह लिनक्स पर उपलब्ध नहीं है, लेकिन एक त्वरित Google खोज से पता चलता है कि वहां आयरनहैक ( http://www.ironahk.net/ ) है जो बहुत अधिक नहीं है प्रलेखन अभी तक उपलब्ध है, लेकिन यह चाल हो सकती है।


लिंक अब काम नहीं करता है।
एंटोनिन प्रोकाज़का
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.