मैं स्टार्टअप पर अपने माउस के बटन को स्वचालित रूप से कैसे हटा सकता हूं?


30

मैं सप्ताहांत में इससे जूझता रहा, और मुझे अपने माउस बटन को हटाने की जरूरत थी।

जवाबों:


47

मेरे पास 9 बटन के साथ एक लॉजिटेक माउस है, और "मध्य बटन" (# 2) को दबाने पर स्क्रॉल व्हील पर क्लिक करना शामिल है। मैं इसे नापसंद करता हूं क्योंकि मैं अनाड़ी हूं और आमतौर पर खिड़की को स्क्रॉल करता हूं जब मैं पहिया पर क्लिक करने की कोशिश करता हूं। इसलिए मैं स्वचालित रूप से शीर्ष बटन (इस मामले में # 9) को मध्य बटन (# 2) को रीमैप करना चाहता था। मैं नीचे के साइड बटन (# 8) को भी मैप करना चाहता था ताकि यह लेफ्ट बटन (# 1) के दोहरे क्लिक पर अमल करे।

हालांकि मेरा उद्देश्य विशिष्ट था, नीचे दिए गए समाधानों को किसी भी स्थिति में सामान्यीकृत किया जा सकता है जिसमें आप स्टार्टअप पर माउस बटन को स्वचालित रूप से रीमैप करना चाहते हैं।

अन्य माउस बटन के लिए माउस बटन मैपिंग

आपको xinputइस कार्य के लिए इंस्टॉल करना होगा । यह पूरी तरह से आपकी .xsessionrcफ़ाइल में किया जा सकता है । सबसे पहले, xinputउस नाम को खोजने के लिए उपयोग करें जो आपके माउस को सौंपा गया है, जो बाद में एक इनपुट डिवाइस आईडी से संबंधित है। नीचे मेरे लैपटॉप से ​​कुछ नमूना आउटपुट है:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer            id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Laser Mouse              id=11   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard           id=5    [slave  keyboard (3)]

मेरा माउस खुद को कॉल करता है Logitech USB Laser Mouseऔर जैसा दिखाया जाता है id=11। आपके माउस का एक अलग नाम होगा; पता लगाना कि पाठक के लिए एक अभ्यास के रूप में छोड़ दिया जाता है।

जब आप अभी भी इस सत्र में डिवाइस की आईडी जानते हैं, तो पता करें कि इनपुट माउस आपके माउस के कितने बटन का उपयोग करके सोचता है । यह बटन की संख्या से भिन्न हो सकता है जो डिवाइस पर स्पष्ट है।xinput list deviceID

Logitech USB Laser Mouse                    id=11   [slave  pointer  (2)]
    Reporting 7 classes:
        Class originated from: 11. Type: XIButtonClass
        Buttons supported: 16
        Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"

मेरे माउस के साथ, केवल 9 स्पष्ट भौतिक बटन हैं, लेकिन xinputरिपोर्ट 16।

USB की प्रकृति को देखते हुए, यह आईडी आपके द्वारा पुनरारंभ किए जाने पर हर बार बदल सकती है, इसलिए यह कुछ ऐसा स्क्रिप्ट करने के लिए पर्याप्त नहीं है जो एक बार खोजे गए आईडी के लिए सांख्यिकीय रूप से कुंजीबद्ध है। आपको स्टार्टअप में इसे गतिशील रूप से पार्स करना होगा और वर्तमान आईडी के आधार पर अपने पुन: मानचित्र को निष्पादित करना होगा।

अब जब आप इसका नाम जानते हैं, तो आप xinput testयह पता लगाने के लिए उपयोग कर सकते हैं कि किस कुंजी को रीमैप करना है। अपने सूचकांकों को प्राप्त करने के लिए उन माउस बटन को दबाएं, जिनसे आप मैप करना चाहते हैं और। (संदर्भ के लिए, 1, 2, और 3 "हमेशा" (यानी, आमतौर पर) एक 3-बटन माउस के बाएं, मध्य और दाएं बटन को संदर्भित करता है। एक सामान्य री-मैप माउस को बाएं हाथ से बनाने के लिए इन्हें उलट देता है। )

button press   2
button release 2
button press   9
button release 9

इस स्थिति में मैंने पाया कि मैं बटन # 9 (साइड, टॉप) को बटन # 2 (मध्य) में मैप करना चाहता हूं।

अब जब आप जानते हैं कि आपके माउस को क्या कहा जाता है, और आप कौन से बटन बदलना चाहते हैं, तो आप एक ~/.xsessionrcस्क्रिप्ट लिख सकते हैं जो xinputस्टार्टअप पर बटन री-मैपिंग को निष्पादित करने के लिए आमंत्रित करता है। नीचे मेरी पूरी स्क्रिप्ट है।

# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16

यहां पहली पंक्ति माउस के आईडी के समान एक अस्थायी सत्र चर सेट करती है, जैसा कि रिपोर्ट किया गया है xinput। यह grepरिपोर्ट में माउस के ज्ञात नाम के लिए आईएनजी द्वारा किया जाता है xinput, फिर रिपोर्ट में sedउस id=xxxटोकन से आईडी नंबर निकालने के लिए उपयोग किया जाता है । यह मान तब एक xinput set-button-mapनिर्देश में उपयोग किया जाता है , जो पुन: मानचित्रण को निष्पादित करता है। ऊपर दिए गए उदाहरण में, एकमात्र परिवर्तन यह है कि बटन # 9 को पुन: मैप किया जा रहा है बटन # 2 की नकल की जाए। अन्य सभी अपनी डिफ़ॉल्ट सेटिंग पर बने रहते हैं।

अपडेट: जैसा कि @Lokenenna नीचे इंगित करता है , यदि आपका डिवाइस खुद को माउस और कीबोर्ड दोनों के रूप में रिपोर्ट करता है, तो आपको grepउपयोग की परिणाम गणना को सीमित करने की आवश्यकता हो सकती है -m 1

माउस बटन का मानचित्रण मनमाना कार्य करने के लिए

इस उत्तर को भी देखें ।

आप की आवश्यकता होगी xinput, xbindkeysऔर xautomation(सहित xte) इस कार्य के लिए स्थापित किया।

का प्रयोग करें xinput listऔर xinput testअपने माउस की उपकरण आईडी और बटन आप प्रदान करना चाहते हैं की संख्या को खोजने के लिए। मेरे मामले में, मैं नीचे दिए गए बटन (# 8) को बाएं बटन (# 1) के डबल-क्लिक पर मैप करना चाहता था।

बनाएँ या संपादित करें ~/.xbindkeysrc। इस फ़ाइल का प्रारूप युग्मित लाइनों की एक श्रृंखला है। पहली पंक्ति एक घटना के लिए निष्पादित होने के लिए एक कमांड है; दूसरी पंक्ति घटना का विवरण है। हम घटनाओं को सीधे इनपुट हैंडलर को भेजने xteके xautomationलिए घटक का उपयोग करेंगे ।

एक बटन जारी होने पर एक डबल-क्लिक ईवेंट बनाने के लिए, मैंने निम्नलिखित जोड़ा:

"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release

यह कॉन्फ़िगरेशन बटन # 1 के रिलीज के लिए बटन # 1 पर दो माउस क्लिक के अनुक्रम को मैप करता है। (सिद्धांत रूप में मुझे लगता है कि आप माउस बटन पर किसी भी कमांड को मैप कर सकते हैं , लेकिन यह सबसे सामान्य मामला है। अन्य व्यावहारिक उदाहरणों के लिए इस उत्तर को देखें ।)

16.04 Ubuntu के लिए अद्यतन करें

आपके सिस्टम से जुड़े कई चूहों वाले उपयोगकर्ताओं के लिए, आपको डिवाइस की आईडी भी पास करनी होगी। यह सभी उपयोगकर्ताओं के लिए लागू नहीं हो सकता है और इसे यूनिटी के साथ Ubuntu 16.04 पर खोजा गया था।

xinput list

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Kensington      Kensington Expert Mouse   id=9    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=13   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=14   [slave  pointer  (2)]

फिर .xbbkeykeysrc फ़ाइल को कमांड आउटपुट से आईडी = मान को संदर्भित करके संशोधित करें (इस उदाहरण में आईडी = 9):

"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release

7
जानकारी के लिए धन्यवाद। आपकी अवाक् यह देखती है कि डिवाइस में शब्दों की संख्या के आधार पर इसे बदलने की आवश्यकता होगी। मैंने इस्तेमाल कियाsed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'
jbo5112

Xinput परीक्षण के अनुसार अंगूठे की कुंजी तीन अलग-अलग कुंजी दबाती है - उन सभी को एक साथ .xbindkeysrc में कैसे बाँधें?
axltop

@ jbo5112 मैंने अभी-अभी अपने काम के लैपटॉप पर कई चूहों का उपयोग करना शुरू किया है, और आपकी टिप्पणी पर फिर से विचार करने का अच्छा कारण है। मैंने अब अपने उदाहरण के awkसाथ अपने पुराने बयान को अपने sedउदाहरण में बदल दिया है । सुधार के लिए धन्यवाद!
zerobandwidth

2
सेट-बटन-मैप में आईडी का उपयोग करने की कोई आवश्यकता नहीं है; उदाहरण:xinput set-button-map "Logitech Trackball" 1 3 3
जस्टिन

असामान्य समस्या xinputजिसका मुझे अनुमान है: दो बार मेरा माउस दिखाता है, इस तरह: guess USB ऑप्टिक माउस आईडी = 12 [दास सूचक (2)] ↳ यूएसबी ऑप्टिकल माउस आईडी = 13 [दास सूचक (2)] केवल आईपी 13 के साथ कमांड पकड़ेंगे xinput test। स्क्रिप्ट हमेशा पहली आईडी पकड़ेगी। लेकिन यह वैसे भी दो बार क्यों है? दोनों गायब हो जाते हैं जब मैं इस माउस को डिस्कनेक्ट करता हूं और कनेक्ट होने पर फिर से प्रकट होता हूं।
w- आकाश

6

इसके लिए लघु चरण हैं:

नामक एक उपयोगिता है xinputxinput listया सिर्फ xinputसभी एक्स इनपुट डिवाइस और उनके आईडी दिखाएगा। यहां आपको उस माउस की आईडी मिलती है जिसे आप रीमैप करना चाहते हैं।

मैं अपनी आईडी का उपयोग अपने सेटअप से, उदाहरण के लिए, जो कि 21 वर्ष का है, xinput --get-button-map 21का उत्पादन करेगा

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

अब, यदि आप कहना चाहते हैं, तो बाएं और दाएं बटन स्वैप करें जो आप बस चलाते हैं

xinput --set-button-map 21 3 2 1

यहां हम हैं, रीमैपिंग की जाती है।

स्टार्टअप पर इसे चलाने के लिए बस इसे एक फ़ाइल में डालें:

echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh

इसे निष्पादन योग्य अनुमति दें

chmod +x leftmouseremap.sh 

अंत में, इसे GUI से मैन्युअल रूप से Statrtup Application में जोड़ें या, यदि आप इसे CLI से चाहते हैं, तो नीचे दिया गया पाठ (आपके लिए पथ बदलें) अपने में एक फ़ाइल इंटे करें ~/.config/autostart, यहाँ मेरा ( less .config/autostart/leftmouseremap.sh.desktop) है:

[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=

ध्यान रखें, कि KDE के साथ पथ ऐसा होगा ~/.kde/Autosart, जैसे अन्य डेस्कटॉप प्रबंधकों के लिए यह दृष्टि भिन्न हो सकता है। वैकल्पिक रूप से, स्टार्टअप चलाने का उपयोग करके सामान्य दृष्टिकोण के साथ किया जा सकता है /etc/rc.local


इससे मेरा पानी फैलने की समस्या हल हो गई। मेरे पास मेरे लैपटॉप के टचपैड के नीचे बाएँ / दाएँ क्लिक बटन हैं। मैंने पानी गिराया और अब दोनों बटन ओएस को एक मध्य-क्लिक संकेत भेजते हैं (मैंने 'कीमोन' ऐप का उपयोग करके यह पता लगाया)। मैंने आपकी विधि का उपयोग बाएं क्लिक पर मध्य-क्लिक को रीमैप करने के लिए किया है, इसलिए मैं कम से कम बाएं क्लिक के अनुभव का आनंद ले सकता हूं। मैं मध्य-क्लिक का उपयोग कभी नहीं करता हूं, इसलिए यह मेरे लिए पूरी तरह से काम करता है :) सरल निर्देशों के लिए धन्यवाद। मेरा इनपुट डिवाइस आईडी 11 था, इसलिए मैंने "xinput --set-button-map 11 1 1 3 3" चलाया! धन्यवाद !!
वाहिद पजीरंदेह

3

Zerobandwidth के महान उत्तर का उपयोग करते समय , कुछ डिवाइस, जैसे कि Logitech के MX Ergo, एक पॉइंटर और एक कीबोर्ड डिवाइस दोनों के रूप में दिखाई देते हैं :

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech MX Ergo                          id=10   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ...
    ↳ Logitech MX Ergo                          id=15   [slave  keyboard (3)]

नतीजतन, grep "Logitech MX Ergo"दो मूल्यों को वापस करने के लिए समाप्त होता है। बाद वाले छोरों को मैपिंग स्ट्रिंग में पहले आइटम के रूप में शामिल किया जा रहा है और आपके सभी माउस बटन पर शिकंजा है।

फिक्स आसान है - बस grepअधिकतम-तर्क का उपयोग करें -m 1:

my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16

महान टिप; मैंने इसे शामिल करने के लिए उत्तर संपादित किया है। धन्यवाद!
zerobandwidth

1

मैं अपने लॉजिटेक माउस के मध्य बटन की मैपिंग को ईजीएस्ट्रोइक जेस्चर रेकग्निशन का उपयोग करके 'रिटर्न' में बदलने में सक्षम था जिसे मैंने उबंटू सॉफ्टवेयर सेंटर से डाउनलोड किया था। संपादित करें: एप्लिकेशन में, आप Add Action चुनेंगे, इसे नाम दें, कुंजी प्रकार चुनें, विवरण पर क्लिक करें और Enter दबाएं, रिकॉर्ड स्ट्रोक दबाएं, और मध्य बटन पर शीघ्र दबाएं के दौरान।


1
AskUbuntu में आपका स्वागत है। आपको अपने उत्तर के साथ और अधिक विवरण प्रदान करने की आवश्यकता है।
डेविड

ठीक है, कृपया ऊपर संपादित देखें।
atr15

अच्छी पकड़। लेकिन जैसा कि आपने निर्देश दिया था कि आप क्या नहीं बताते हैं: वास्तव में मध्य बटन 'जेस्चर रिकग्निशन मोड' में उस ऐप को डालने के लिए डिफ़ॉल्ट बटन है: इसे दबाने पर, ऐप आपके द्वारा किए जा रहे जेस्चर को पहचानना शुरू कर देता है। फिर भी, +1 क्योंकि उस ऐप में माउस बटन आईडी को प्रकट करने के लिए एक मॉड्यूल है; यह तब मदद करता है जब हम xinputबटन का उपयोग करना चाहते हैं जब उपयोग नहीं कर रहे हैं xinput list <devID>
1111161171159459134

1
ओह, यह 1 साल बाद आया - आपके उत्तर का मूल्य +1
1111161171159459134

1

12.04 से पहले मानक रिपॉजिटरी में "बीटीएनएक्स" नामक एक आसान ग्राफिकल टूल था, जिसे सिस्टम कॉन्फ़िगरेशन में "बटन गुण" के रूप में जोड़ा गया था। अफसोस की बात है कि यह गिरा दिया गया था। वर्तमान में 14.04, 16.04 और 18.04 तक "अप्रकाशित" पीपीए यहां रखा गया है: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa ( https://launchpad.net/ubuntu/xenetic/source पर पाया गया) / बीटीएनएक्स )

यह सिस्टम सेटिंग्स के साथ एकीकृत नहीं होगा, लेकिन सस्ते 5-बटन-माउस के साथ मेरे लैपटॉप पर काफी ठीक काम कर रहा है। यह कीस्ट्रोक्स और कमांड को भी रिमैप कर सकता है और किसी भी अन्य विधि की तुलना में कॉन्फ़िगरेशन बहुत सरल है!


मुझे आश्चर्य है कि अगर उपकरण पृष्ठभूमि में सिर्फ वही बदलाव कर रहा है। ^ _ ^
zerobandwidth

0

मेरे पास एचपी एलीटबुक 2570 पी, उबंटू 18.04.2 है। यहां मेरे पास एक ट्रैकपॉइंट है जो मेरे लिए बेकार है और यहां अंतरिक्ष के नीचे 2 बेकार ट्रैकपॉइंट बटन हैं

मैं इन कुंजियों का उपयोग नहीं करता क्योंकि मेरे पास यह टचपैड के नीचे है। मैं इन बटन को बाएं = back_button (Alt_L + Left), दाईं ओर एक = mid_mouse_button पर रीमैप करना चाहता हूं। "Xinput" में trackpoint id = 11 है और बायाँ बटन नंबर 1 है, दाईं ओर 3 है।

क्या कोई मुझे टर्मिनल पर कॉपी करने के लिए सही कोड लिख सकता है? मैंने xbindkeysrc के साथ संयोजन किया है, लेकिन यह दोनों (ट्रैकपॉइंट और टचपैड) बटन पर कोई भी कार्रवाई सेट करता है


मैंने यह कर दिया है और इसे बस बना दिया है: <code> इको xinput सेट-बटन-मैप 11 8 1 2 >> ~ / .xsessionrc </ code> यह मेरे टचपॉइंट बटन बनाता है (आईडी 11) बाएं को 8 वें बटन बनाता है। बाएं क्लिक के रूप में (कोई 1) नहीं, और दाईं ओर मिडिल एक के रूप में और फिर 'कोड' इको-ई "\" / usr / बिन / xte 'कीडाउन Alt_L' 'कुंजी वाम' 'की Alt Alt_ & amp; \ " "nb: 8" >> ~ / .xbindkeysrc 'कोड' यह Alt_ + बायाँ => वापस जाने के लिए बटन नंबर 8 (b: 8) सेट करता है :) अब मेरे पास उपयोगी 2 माउस बटन हैं
Atom
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.