মাউস সংযুক্ত কিনা তার উপর নির্ভর করে আমি কীভাবে টাচপ্যাড টগল করতে পারি?


10

আমি যখন কোনও বাহ্যিক মাউস সংযুক্ত এবং যখন কিছুই নেই তখন সক্ষম হয়ে গেলে আমার টাচপ্যাডটি স্বয়ংক্রিয়ভাবে অক্ষম করতে চাই। আমি চেষ্টা করার চেষ্টা করেছি touchpad-indicatorতবে কম্পিউটারটি সংযুক্ত মাউসের সাথে ঘুমিয়ে যাওয়ার পরে এবং মাউসটি সংযোগ বিচ্ছিন্ন হওয়ার সাথে জাগ্রত হওয়ার ক্ষেত্রে এটি ব্যর্থ হয়।

এই সমস্যাটি সমাধান করার জন্য আমি নিম্নলিখিত স্ক্রিপ্টটিকে একটি ডিমন হিসাবে তৈরি করার চেষ্টা করেছি তবে আমি এটি কাজ করতে পারি না:

#!/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-সংখ্যার রিটার্ন দেয়, যা আমার ধারণা, প্রারম্ভিক প্রক্রিয়ার পিআইডি হওয়া উচিত তবে আমি lxtask চালু করার পরে এই পিআইডি সহ কোনও প্রক্রিয়া থাকে না , এমনকি যদি আমি "সমস্ত প্রক্রিয়া দেখি" টিক দিই। এবং, অবশ্যই, এটি কাজ করে না!


@terdon আমি সংযুক্ত ইউএসবি মাউস দেখার জন্য ডিমন তৈরি করার চেষ্টা করছি এবং টাচপ্যাড সক্ষম বা অক্ষম করতে এক্সপুটকে জিজ্ঞাসা করুন। সমস্যার একমাত্র অন্য সমাধান, টাচপ্যাড-সূচক নামে পরিচিত একটি প্রোগ্রামে কিছুটা ত্রুটি রয়েছে। আমি যখন আমার নোটবুকটি মাউসের সাথে সংযুক্ত অবস্থায় ঘুমিয়ে পড়েছি এবং এটি ছাড়া জাগ্রত করি তখন আমার সংযোগ / সংযোগ বিচ্ছিন্ন করার জন্য আমার নিকটতম মাউসটি অনুসন্ধান করতে হবে যাতে আমার টাচপ্যাড সক্ষম হয়ে যায়। সংক্ষেপে, আমি এটির সত্যটি জাগ্রত করার সময় পুনরায় পরীক্ষা করা উচিত।
মেকানাইজার

উবুন্টুকে জিজ্ঞাসা করুন স্বাগতম! অতিরিক্ত তথ্য যুক্ত করতে দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন, মন্তব্যগুলি পড়া সহজ এবং সহজে মিস করা যায়।
টেরডন

সবার আগে আপনার ব্যাখ্যা করা উচিত যে আপনি "এটি ডিমনাইজ করার চেষ্টা করছেন" এবং আপনি ঠিক কীভাবে যাচ্ছেন। তারপরে, xinputএকটি চলমান এক্স সার্ভারের প্রয়োজন, এবং ডিমন হিসাবে স্টাফ চালানোর বেশিরভাগ পদ্ধতিতে এক্স এর সাথে সংযোগ স্থাপনের কোনও জ্ঞান বা দক্ষতা নেই Third তৃতীয় এবং আপনি যা করার চেষ্টা করছেন তা সর্বদা ব্যাখ্যা করার মূল কারণটি হ'ল এটি প্রায়শই সমাধান is যে কেউ আবেদনের চেষ্টা করছেন তা আসলে এটি করার উপায় নয় এবং আপনি ভুল প্রশ্ন জিজ্ঞাসা করেন, সাধারণত XY সমস্যা হিসাবে পরিচিত ।
টেরডন

@ ইটারডন সমাধানগুলি সন্ধান করতে ফিরে যান, এক্সপ্যান্টের (সম্ভাব্য?) এনালগটি কী: যে ১. পটভূমিতে চলতে পারে ২. ডিভাইস সক্ষম / অক্ষম করতে পারে?
mekkanizer

1
মন্তব্য সরানো হয়েছে । জিজ্ঞাসা উবুন্টুতে সুন্দর হওয়া alচ্ছিক নয়। সুন্দর করুন. অভদ্র মন্তব্য সতর্কতা ছাড়াই সরানো হবে।
শেঠ

উত্তর:


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) তৈরি করুন এবং এটি আপনার জিইউআই সেশন সূচনা প্রোগ্রামগুলিতে যুক্ত করুন। আপনি কোন ডেস্কটপ পরিবেশ ব্যবহার করছেন তা নির্দিষ্ট করে নেই তবে যেহেতু আপনি উল্লেখ করেছেন lxtask, আমি ধরে নিচ্ছি আপনি ব্যবহার করছেন LXDE। যাই হোক না কেন, এখানে উভয়ের জন্য নির্দেশাবলী LXDEএবং Unity:

  1. এলএক্সডিডি-র অটোস্টার্ট ফাইলগুলিতে স্ক্রিপ্টটি যুক্ত করুন

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

    আপনার এলএক্সডিইডি প্রোফাইলের প্রকৃত নামের সাথে "প্রোফাইলে" প্রতিস্থাপন করা হয়েছে তা নিশ্চিত করে আপনি এটি চালিয়ে জানতে পারেন ls ~/.config/lxsession/

  2. স্ক্রিপ্টটি ইউনিটির অটোস্টার্ট ফাইলগুলিতে যুক্ত করুন

    খুলুন Startup Applications("স্টার্টআপ" এর জন্য ড্যাশবোর্ডে অনুসন্ধান করুন)

    এখানে চিত্র বর্ণনা লিখুন

    "যোগ করুন" এ ক্লিক করুন এবং তারপরে কমান্ড ক্ষেত্রে আপনার স্ক্রিপ্টের জন্য পথটি আটকে দিন:

    এখানে চিত্র বর্ণনা লিখুন


আমি একটি লুপ ব্যবহার করিনি কারণ আমি যখন পটভূমিতে স্ক্রিপ্টগুলি চালানোর বিষয়ে গুগল করি তখন প্রত্যেকে লুপগুলি ব্যবহার না করার পরামর্শ দিয়েছিল। যদি এটিই একমাত্র সমাধান এবং এক্সপ্যান্টের কোনও অ্যানালগ নেই যা কোনও স্ক্রিপ্টে ডেমনের জন্য ব্যবহার করা যেতে পারে এবং ডিভাইসগুলি সক্ষম / অক্ষম করতে পারে ... ঠিক আছে, আমি এটি ব্যবহার করব।
mekkanizer

1
@ মেকানাইজারটি এটির মতো সর্বোত্তম উপায় নয় । অনেক পরিষ্কার উপায় হ'ল উদেব বিধিগুলি ব্যবহার করা এবং তাদের কাছে প্রয়োজনীয় এক্স শংসাপত্র রফতানি করা । আপনি যদি চান তবে এটি সন্ধান করতে পারেন।
টেরডন

ধন্যবাদ, করবে। যদি আমি এটির কাজটি পেতে পারি তবে আমি আবার লিখব (বা একটি উত্তর পোস্ট করব)
মেকানাইজার

10

ঠিক আছে, আমি এটির জন্য একটি ওদেব বিধি তৈরি করেছি, এবং এটি যেমন @ টেরডন বলেছিলেন, অনেক ক্লিনার

সুতরাং, এই গাইডের জন্য ধন্যবাদ , আমি একটি "টাচপ্যাড_টোগল.রুলস" ফাইল তৈরি করেছি /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

অন.শ.তে আপনাকে এক্সপুট সক্ষম $ টিআইডি ব্যবহার করতে হবে

এবং আমার প্রশ্নের স্ক্রিপ্ট যুক্ত করতে ভুলবেন না (অথবা @terdon প্রস্তাবিত, তবে একটি লুপ ছাড়াই) অটোস্টার্ট সেশনে যেমন তিনি আপনাকে তার উত্তরে বলেছিলেন।

এটি হ'ল, তবে আমাকে একটি জিনিস যোগ করতে হবে:

আপনার যদি সিন্যাপটিক্স টাচপ্যাড থাকে (আমার কাছে এলানটেক রয়েছে, সুতরাং এটি আমার পক্ষে উপযুক্ত নয়), আপনি আপনার স্ক্রিপ্টগুলি (যে রাস্তাগুলিতে আপনি RUN + = পরে লিখবেন) /usr/bin/synclient TouchpadOff=0যথাক্রমে একটি সাধারণ কমান্ড এবং 1 দিয়ে প্রতিস্থাপন করতে পারেন


কেবলমাত্র একটি নটপিক, যেহেতু কোনওভাবেই udevনিয়ম তৈরি করতে আপনার রুট অ্যাক্সেসের প্রয়োজন হয়, তাই হোম ডিরেক্টরি বাদে অন্য কোথাও ফাইলটি সংরক্ষণ করা ভাল। যেমন: /usr/local/binবা /opt/touchpad-toggle/bin/
ড্যান

@ ড্যান অস্বীকার করেছে। ব্যবহারকারীর সেটিংস সম্পর্কিত সমস্ত কিছু বাড়ির ডিরেক্টরিতে থাকতে হবে। দুর্ভাগ্যবশত, udev 'র, লগইন ম্যানেজার সেটিংস এবং অন্যান্য বিষয়ের একটি দম্পতি আছে নিয়তি দ্বারা নির্দিষ্ট , ফিরে / * প্রতিটি সময় আপনি স্ক্র্যাপ / পার্টিশন কপি করা, যদি না আপনি অবশ্যই একটি স্ন্যাপশট ফিরিয়ে আনুন। সুতরাং / বাড়িতে / আরও বেশি কিছু সঞ্চিত রাখা কেবল সুবিধা। সুতরাং, আপনার পরামর্শের কোনও মূল্য নেই
মেকানাইজার

তবে যেহেতু এটি একটি ওদেব নিয়ম হিসাবে যুক্ত হয়েছে, এর অর্থ এই নয় যে এটি কোনও ব্যবহারকারীর জন্যই চলবে, এটি লগইন করেছেন কিনা তা বিবেচনা করে?
ড্যান

আমি চেক করিনি, কারণ আমি কখনই শেয়ার করা পিসিগুলিতে লিনাক্স ব্যবহার করি নি। যাইহোক, যে কোনও ব্যবহারকারীর এই ঝরঝরে udev নিয়ম দ্বারা বিরক্ত হওয়া আমার আগ্রহের নয়। যদি তারা এত সংবেদনশীল হয় তবে তারা তাদের নিজস্ব ইনস্টলেশন পেতে পারে
mekkanizer
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.