क्या बैश से माउस बटन स्टेट प्राप्त करने का कोई तरीका है? Xdotool केवल माउस स्थान प्राप्त कर सकते हैं।
मैं कुछ ऐसा सेट करना चाहूंगा जहां मैं एक नियम को परिभाषित कर सकता हूं जहां एक माउस बटन दबाया जाता है, एक स्क्रिप्ट निष्पादित हो सकती है।
क्या बैश से माउस बटन स्टेट प्राप्त करने का कोई तरीका है? Xdotool केवल माउस स्थान प्राप्त कर सकते हैं।
मैं कुछ ऐसा सेट करना चाहूंगा जहां मैं एक नियम को परिभाषित कर सकता हूं जहां एक माउस बटन दबाया जाता है, एक स्क्रिप्ट निष्पादित हो सकती है।
जवाबों:
xinput --query-state <mouse_id>
यह आपको सभी माउस बटन के लिए एक राज्य देता है, जो इस तरह दिखता है:
2 classes :
ButtonClass
button[1]=up
button[2]=up
button[3]=up
button[4]=up
button[5]=up
button[6]=up
button[7]=up
button[8]=up
button[9]=up
button[10]=up
button[11]=up
button[12]=up
button[13]=up
button[14]=up
button[15]=up
button[16]=up
ValuatorClass Mode=Relative Proximity=In
valuator[0]=313
valuator[1]=667
valuator[2]=-20
Mouse_id से प्राप्त किया जा सकता है:
xinput --list
यहाँ एक छोटा माउस बटन वॉचर स्क्रिप्ट है:
#!/bin/bash
MOUSE_ID=$(xinput --list | grep -i -m 1 'mouse' | grep -o 'id=[0-9]\+' | grep -o '[0-9]\+')
STATE1=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
while true; do
sleep 0.2
STATE2=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
comm -13 <(echo "$STATE1") <(echo "$STATE2")
STATE1=$STATE2
done
आपको MOUSE_ID डिटेक्शन स्ट्रिंग ('माउस') को कुछ और में बदलना पड़ सकता है।
xinput --listमुझे देता है X Input extension not available.। अफसोस की बात है कि इस मामले के लिए Google कुछ भी प्रकट नहीं करता है जो मेरे मामले में सहायक है: Xvnc4एक न्यूनतम डेबियन वीएम में। संभवतः मैं भाग्य से बाहर हूँ
आप xevX वातावरण के भीतर अपने माउस के बटन की स्थिति का पता लगाने के लिए कमांड लाइन टूल का उपयोग कर सकते हैं ।
$ xev
...
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064320, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064439, (164,14), root:(166,101),
state 0x100, button 1, same_screen YES
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065208, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065337, (164,14), root:(166,101),
state 0x100, button 1, same_screen YES
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319066059, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
लेकिन यह जानकारी केवल आपको आंशिक रूप से एक समाधान के लिए मिलती है। ऊपर से आप जो महत्वपूर्ण जानकारी निकालना चाहते हैं, वह संख्या आपके माउस पर किसी विशेष बटन से जुड़ी है। मेरे उदाहरण में मैं बाएं बटन को दबा रहा हूं, "ब्यूटेन 1"।
आप इस टूल का उपयोग उस क्रिया को सेटअप करने के लिए कर सकते हैं जो बटन दबाए जाने से जुड़ी है। आप एक नियम भी सेट कर सकते हैं जिसमें एक कुंजी या यहां तक कि एक कुंजी + बटन को एक साथ दबाया जाना चाहिए।
आपको पहले सुनिश्चित करना होगा कि संकुल xbindkeys स्थापित है।
फिर आपको टेम्पलेट xbindkeys कॉन्फ़िगरेशन फ़ाइल बनाने के लिए, केवल एक बार, निम्न कमांड चलाने की आवश्यकता होगी।
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
बनाई गई फ़ाइल के साथ आप इसे टेक्स्ट एडिटर में खोल सकते हैं और इस तरह से एक नियम जोड़ सकते हैं:
"xterm"
b:3
यह नियम बताता है कि हम xtermबटन 3 दबाए जाने पर प्रोग्राम चलाना चाहते हैं । "बटन 3" मेरा सही माउस बटन है।
उपरोक्त बदलाव के साथ हमें xbindkeys को मारने की आवश्यकता है यदि यह पहले से ही चल रहा है और फिर इसे पुनरारंभ करें।
$ killall xbindkeys
$ xbindkeys
अब किसी भी समय मैं सही माउस बटन पर क्लिक करने के साथ, एक xtermनिष्पादित हो जाएगा।
आप अपने केक बटन प्रेस घटना नहीं है और यह खा सकते हैं। यदि आप चाहते हैं कि आपकी स्क्रिप्ट एक माउस ईवेंट प्राप्त करे, तो माउस ईवेंट को किसी अन्य एप्लिकेशन के बजाय आपकी स्क्रिप्ट पर भेजा जाएगा - अर्थात आपकी स्क्रिप्ट को माउस ईवेंट को हथियाना होगा। यदि आपकी स्क्रिप्ट ईवेंट का दावा नहीं करती है तो जो विंडो उसे मिलनी चाहिए वह मिल जाती है।
यदि आप चाहें, तो आप माउस इवेंट को फ़ोकस किए गए विंडो या विंडो पर दिए गए निर्देशांक ( xdotool click) में बदल सकते हैं।
आप कुछ माउस या कीबोर्ड ईवेंट पर स्क्रिप्ट निष्पादित करने के लिए XBindKeys का उपयोग कर सकते हैं ।
MouseButton1DownऔरMouseButton1Upघटनाओं पर कार्य करने के लिए क्षमा करेंगे, तो हर माउस गतिविधि पार्सर के लिए मैंने घड़ियाँ देखी हैं ।