मैं एक माउस से जुड़ा है या नहीं, इसके आधार पर मैं टचपैड को कैसे टॉगल कर सकता हूं?


10

जब कोई बाहरी माउस जुड़ा होता है और सक्षम होता है, तो मैं अपने टचपैड को स्वचालित रूप से अक्षम करना चाहता हूं। मैं का उपयोग कर की कोशिश की है touchpad-indicatorलेकिन यह है कि मामलों में विफल रहता है जब कंप्यूटर जुड़ा हुआ है और माउस काट दिया साथ awoken एक माउस के साथ सोने के लिए डाल दिया गया है।

मैंने इस समस्या को हल करने के लिए निम्नलिखित स्क्रिप्ट को एक डेमॉन में बनाने की कोशिश की है, लेकिन मुझे यह काम करने के लिए नहीं मिल सकता है:

#!/bin/bash

declare -i TID
declare -i MID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
MID=`xinput list | grep -Eo 'Mouse\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
if [ $MID -gt 0 ]
then
    xinput disable $TID
else
    xinput enable $TID
fi

मैंने कोशिश की start-stop-daemon -S -x ./myscript.sh -b

तथा setsid ./myscript.sh >/dev/null 2>&1 < /dev/null &

और nohup ./myscript 0<&- &>/dev/null & भी./myscript.sh &

ये सभी कुछ 4-अंकीय संख्या को लौटाते हैं, जो मुझे लगता है कि शुरू की गई प्रक्रिया का पीआईडी ​​होना चाहिए, लेकिन जब मैं लैक्टस्क लॉन्च करता हूं तो इस पीआईडी ​​के साथ कोई प्रक्रिया नहीं होती है , भले ही मैं "सभी प्रक्रियाओं को देखता हूं"। और, ज़ाहिर है, यह काम नहीं करता है!


@terdon Im कनेक्टेड USB माउस को एक डेमॉन बनाने की कोशिश कर रहा है और xinput को टचपैड को सक्षम या अक्षम करने के लिए कहता है। समस्या का एकमात्र अन्य समाधान, टचपैड-संकेतक नामक एक कार्यक्रम में थोड़ा दोष है। जब मैं अपने नोटबुक को माउस से जोड़कर सो जाता हूं और इसे बिना जागता है, तो मुझे इसे कनेक्ट / डिस्कनेक्ट करने के लिए निकटतम माउस की खोज करनी होगी ताकि मेरा टचपैड सक्षम हो सके। संक्षेप में, मैं चाहता हूं कि इसके तथ्य को वेक-अप पर फिर से जांचा जाए।
mekkanizer

उबंटू पूछने के लिए आपका स्वागत है! कृपया अतिरिक्त जानकारी जोड़ने के लिए अपने प्रश्न को संपादित करें, यह पढ़ना मुश्किल है और टिप्पणियों में याद करना आसान है।
टेराडॉन

सबसे पहले आपको यह समझाना चाहिए कि आप "इसे समाप्त करने की कोशिश कर रहे हैं" और आप वास्तव में इसके बारे में कैसे जा रहे हैं। फिर, xinputएक रनिंग एक्स सर्वर की जरूरत है, और डेमन के रूप में सामान चलाने के अधिकांश तरीकों को एक्स थर्ड से कनेक्ट करने की क्षमता या ज्ञान का कोई ज्ञान नहीं है, और मुख्य कारण जो आपको हमेशा समझाना चाहिए कि आप क्या करने की कोशिश कर रहे हैं, यह बहुत अक्सर समाधान है जिसे कोई लागू करने का प्रयास कर रहा है वह वास्तव में इसे पूरा करने का तरीका नहीं है और आप गलत सवाल पूछते हैं, जिसे आमतौर पर XY समस्या के रूप में जाना जाता है
टेराडॉन

@terdon समाधानों की तलाश में, xinput का (संभव?) एनालॉग क्या है: 1. पृष्ठभूमि में चल सकता है 2. उपकरणों को सक्षम / अक्षम कर सकता है?
mekkanizer

1
टिप्पणियां हटा दी गईं । आस्क उबंटू पर अच्छा होना वैकल्पिक नहीं है। कृपया अच्छे बनें। बिना किसी चेतावनी के असभ्य टिप्पणियों को हटा दिया जाएगा।
सेठ

जवाबों:


10

मूल स्क्रिप्ट जो आपको चाहिए वह है:

#!/usr/bin/env bash

## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

## Run every second
while :
do
   ## Disable the touchpad if there is a mouse connected
   ## and enable it if there is none.
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    ## wait one second to avoind spamming your CPU
    sleep 1
done

ऊपर दी गई स्क्रिप्ट इस बात पर निर्भर करती है कि कोई माउस जुड़ा हुआ है या नहीं। जब लॉन्च किया जाता है, तो यह हमेशा के लिए चलेगा और हर सेकंड एक माउस के लिए जांच करेगा, तदनुसार टचपैड को अक्षम या सक्षम करेगा।

अब, स्क्रिप्ट को इस रूप में सहेजें ~/touchpad.sh, इसे निष्पादन योग्य बनाएं ( chmod +x ~/touchpad.sh) और इसे अपने GUI सत्र स्टार्टअप प्रोग्राम्स में जोड़ें। आपने निर्दिष्ट नहीं किया है कि आप किस डेस्कटॉप वातावरण का उपयोग कर रहे हैं लेकिन जब से आपने उल्लेख किया है lxtask, मैं मान लूंगा कि आप उपयोग कर रहे हैं LXDE। किसी भी मामले में, यहाँ दोनों के लिए निर्देश दिए गए हैं LXDEऔर Unity:

  1. LXDE की ऑटोस्टार्ट फ़ाइलों में स्क्रिप्ट जोड़ें

    echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file

    सुनिश्चित करें कि आप अपने LXDE प्रोफ़ाइल के वास्तविक नाम के साथ "PROFILE" को बदलते हैं , आप यह पता लगा सकते हैं कि यह क्या चल रहा है ls ~/.config/lxsession/

  2. यूनिटी के ऑटोस्टार्ट फ़ाइलों में स्क्रिप्ट जोड़ें

    खोलें Startup Applications("स्टार्टअप" के लिए डैशबोर्ड में खोजें)

    यहाँ छवि विवरण दर्ज करें

    "जोड़ें" पर क्लिक करें और फिर कमांड क्षेत्र में अपनी स्क्रिप्ट का पथ पेस्ट करें:

    यहाँ छवि विवरण दर्ज करें


मैंने एक लूप का उपयोग नहीं किया क्योंकि जब मैं पृष्ठभूमि में स्क्रिप्ट चलाने के बारे में गुगली करता था, तो सभी ने सुझाव दिया कि लूप का उपयोग न करें। यदि यह एकमात्र समाधान है और इसमें xinput का कोई एनालॉग नहीं है जो कि एक स्क्रिप्ट में डेमॉन के लिए उपयोग किया जा सकता है और उपकरणों को सक्षम / अक्षम कर सकता है ... ठीक है, मैं इसका उपयोग करूंगा।
mekkanizer

1
@mekkanizer यह वास्तव में ऐसा सबसे अच्छा तरीका नहीं है । एक बहुत क्लीनर तरीका होगा udev नियमों का उपयोग करना और उन्हें आवश्यक एक्स क्रेडेंशियल्स का निर्यात करना। आप चाहें तो उस पर गौर कर सकते हैं।
टेराडॉन

धन्यवाद, करेंगे। अगर मुझे यह काम करने के लिए मिलता है, तो मैं वापस लिखूंगा (या एक उत्तर पोस्ट
करूँगा

10

ठीक है, मैंने इसके लिए एक udv नियम बनाया है, और यह है, जैसे @terdon ने कहा, बहुत क्लीनर तरीका

तो, इस गाइड के लिए धन्यवाद , मैंने /etc/udev/rules.d/ में "टचपैड_टॉगल.ट्रूल्स" फ़ाइल बनाई (रूट एक्सेस की आवश्यकता है) और इसे दो लाइनों से भर दिया:

SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/on.sh"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/off.sh"

अपने उपयोगकर्ता नाम के साथ "उपयोगकर्ता नाम" बदलना न भूलें!

इन पर और बंद शेल स्क्रिप्ट की सामग्री मेरे प्रश्न में स्क्रिप्ट का सिर्फ संस्करण है। उदाहरण - ऑफ.श:

#!/bin/bash

declare -i TID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
xinput disable $TID

आपको x.put को on.sh में $ TID सक्षम करना होगा

और मेरे प्रश्न में स्क्रिप्ट जोड़ना न भूलें (या एक @terdon ने सुझाव दिया, लेकिन एक लूप के बिना) सत्र ऑटोस्टार्ट को सत्र के लिए जैसे उसने आपको अपने उत्तर में बताया था।

यह बात है, लेकिन मुझे एक बात जोड़ना है:

यदि आपके पास एक सिनैप्टिक्स टचपैड है (मेरे पास एलेनटेक है, तो यह मेरे लिए उपयुक्त नहीं है), आप अपनी स्क्रिप्ट (पथ जो आप RUN + = के बाद लिखते हैं) को एक साधारण कमांड के साथ बदल सकते हैं /usr/bin/synclient TouchpadOff=0और क्रमशः 1


केवल एक नाइटपिक, चूंकि आपको udevकिसी भी तरह से नियम बनाने के लिए रूट एक्सेस की आवश्यकता होती है , इसलिए यह बेहतर हो सकता है कि होम डायरेक्टरी के अलावा फाइल को कहीं और सेव करें। उदाहरण के लिए: /usr/local/binया /opt/touchpad-toggle/bin/
दान

@ डान ने मना कर दिया। उपयोगकर्ता सेटिंग्स से संबंधित सब कुछ बेहतर होम डायरेक्टरी में है। दुर्भाग्य से, udev नियम, लॉगिन प्रबंधक सेटिंग्स और अन्य चीजों की एक जोड़ी रहे हैं नसीब , वापस / * हर बार जब आप स्क्रैप / विभाजन को कॉपी करने के लिए जब तक आप निश्चित रूप से एक स्नैपशॉट बहाल। इसलिए / होम / में संग्रहित अधिक चीजें सिर्फ सुविधा है। तो, आपकी सलाह का कोई मूल्य नहीं है
mekkanizer

लेकिन जब से इसे एक udv नियम के रूप में जोड़ा गया है, इसका मतलब यह नहीं होगा कि यह किसी भी उपयोगकर्ता के लिए चलेगा, कोई फर्क नहीं पड़ता कि किसने इसे लॉग इन किया है?
दान

मैंने चेक नहीं किया, क्योंकि मैंने कभी भी साझा पीसी पर लिनक्स का उपयोग नहीं किया। वैसे भी, कोई भी उपयोगकर्ता, जो इस साफ-सुथरे नियम से परेशान है, मेरे हित में नहीं है। यदि वे इतने संवेदनशील होते हैं, तो वे अपने स्वयं के इंस्टॉलेशन
mekkanizer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.