ฉันจะสลับทัชแพดได้อย่างไรขึ้นอยู่กับว่าเมาส์เชื่อมต่ออยู่หรือไม่?


10

ฉันต้องการให้ทัชแพดของฉันปิดการใช้งานโดยอัตโนมัติเมื่อเชื่อมต่อเมาส์ภายนอกและเปิดใช้งานเมื่อไม่มี ฉันได้ลองใช้touchpad-indicatorแต่ล้มเหลวในกรณีที่คอมพิวเตอร์ถูกสลีปด้วยการเชื่อมต่อกับเมาส์และถูกปลุกให้ถอดการเชื่อมต่อกับเม้าส์

ฉันพยายามทำให้สคริปต์ต่อไปนี้เป็น daemon เพื่อแก้ปัญหานี้ แต่ฉันไม่สามารถใช้งานได้:

#!/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 หลักซึ่งฉันเดาว่าควรเป็น PID ของกระบวนการที่เริ่มต้น แต่เมื่อฉันเรียกใช้ lxtask ไม่มีกระบวนการใดที่มี PID นี้แม้ว่าฉันจะทำเครื่องหมาย "ดูกระบวนการทั้งหมด" และแน่นอนมันไม่ทำงาน!


@terdon ฉันพยายามทำ daemon ดูเมาส์ usb ที่เชื่อมต่อและขอ xinput เพื่อเปิดใช้งานหรือปิดการใช้งานทัชแพด วิธีแก้ปัญหาอื่น ๆ สำหรับปัญหาเท่านั้นโปรแกรมที่เรียกว่า touchpad-indicator มีข้อบกพร่องเล็กน้อย เมื่อฉันจดบันทึกสมุดบันทึกของฉันหลับด้วยการเชื่อมต่อเมาส์และปลุกโดยไม่ต้องฉันต้องค้นหาเมาส์ที่ใกล้ที่สุดเพื่อเชื่อมต่อ / ยกเลิกการเชื่อมต่อดังนั้นทัชแพดของฉันจะเปิดใช้งาน ในระยะสั้นฉันต้องการความจริงของมันที่จะตรวจสอบอีกครั้งเมื่อตื่นขึ้น
mekkanizer

ยินดีต้อนรับสู่ถาม Ubuntu! โปรดแก้ไขคำถามของคุณเพื่อเพิ่มข้อมูลพิเศษเป็นการยากที่จะอ่านและพลาดง่ายในการแสดงความคิดเห็น
terdon

ก่อนอื่นคุณควรอธิบายว่าคุณกำลัง "พยายามทำให้ดีมอน" และคุณจะทำอย่างไร จากนั้นxinputต้องใช้เซิร์ฟเวอร์ X ที่ทำงานอยู่และวิธีการส่วนใหญ่ในการใช้งานสิ่งต่าง ๆ ในขณะที่ daemons ไม่มีความรู้หรือความสามารถในการเชื่อมต่อกับ X ประการที่สามและเหตุผลหลักที่คุณควรอธิบายสิ่งที่คุณพยายามทำอยู่เสมอ มีคนกำลังพยายามที่จะใช้ไม่ได้จริงวิธีการที่จะได้รับมันกระทำและคุณจะสิ้นสุดการถามคำถามที่ไม่ถูกต้องเป็นที่รู้จักกันทั่วไปว่าเป็นปัญหา XY
terdon

@terdon กลับไปที่การค้นหาโซลูชันอะนาล็อกของ xinput คืออะไร: 1. สามารถทำงานในเบื้องหลัง 2. สามารถเปิด / ปิดใช้งานอุปกรณ์ได้หรือไม่
mekkanizer

1
ลบความคิดเห็นแล้ว เป็นคนดีบน Ask Ubuntu ไม่ใช่ทางเลือก โปรดเป็นคนดี ความคิดเห็นที่หยาบจะถูกลบโดยไม่มีการเตือน
เซ

คำตอบ:


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. เพิ่มสคริปต์ลงในไฟล์ autostart ของ LXDE

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

    ให้แน่ใจว่าคุณแทนที่ "ประวัติ" กับชื่อจริงของรายละเอียด LXDE ของคุณls ~/.config/lxsession/คุณสามารถหาสิ่งที่มันคือการทำงาน

  2. เพิ่มสคริปต์ลงในไฟล์เริ่มอัตโนมัติของ Unity

    เปิดStartup Applications(ค้นหาในแผงควบคุมสำหรับ "เริ่มต้น")

    ป้อนคำอธิบายรูปภาพที่นี่

    คลิกที่ "เพิ่ม" แล้ววางเส้นทางไปยังสคริปต์ของคุณในฟิลด์คำสั่ง:

    ป้อนคำอธิบายรูปภาพที่นี่


ฉันไม่ได้ใช้การวนซ้ำเนื่องจากเมื่อ googled เกี่ยวกับการเรียกใช้สคริปต์ในพื้นหลังทุกคนแนะนำไม่ให้ใช้ลูป หากนั่นเป็นทางออกเดียวและไม่มีอนาล็อก xinput ซึ่งสามารถใช้ในสคริปต์สำหรับ daemon และสามารถเปิด / ปิดการใช้งานอุปกรณ์ ... ตกลงฉันจะใช้มัน
mekkanizer

1
@ mekkanizer นี่ไม่ใช่วิธีที่ดีที่สุดเช่นนี้ วิธีที่สะอาดกว่านี้คือการใช้กฎ udevและส่งออกข้อมูลประจำตัว X ที่จำเป็นไปยังพวกเขา คุณสามารถตรวจสอบได้หากคุณต้องการ
terdon

ขอบคุณจะทำ ถ้าฉันได้มันไปทำงานฉันจะเขียน (หรือโพสต์คำตอบ)
mekkanizer

10

ตกลงฉันได้ทำ udev กฎสำหรับมันและมันเป็นเช่น @terdon กล่าวว่าเป็นวิธีที่สะอาดกว่ามาก

ดังนั้นด้วยคำแนะนำนี้ฉันจึงสร้างไฟล์ "touchpad_toggle.rules" ใน /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"

อย่าลืมแทนที่ "ชื่อผู้ใช้" ด้วยชื่อผู้ใช้ของคุณ!

เนื้อหาของเชลล์สคริปต์เหล่านี้เปิดและปิดเป็นเพียงเวอร์ชั่นตอนในคำถามของฉัน ตัวอย่าง - 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

คุณจะต้องใช้ xinput เปิดใช้งาน $ TID ใน on.sh

และอย่าลืมเพิ่มสคริปต์ในคำถามของฉัน (หรือที่ @terdon แนะนำ แต่ไม่มีลูป) เพื่อเริ่มต้นเซสชันอัตโนมัติเหมือนที่เขาบอกคุณในคำตอบของเขา

นั่นคือ แต่ฉันต้องเพิ่มสิ่งหนึ่ง:

หากคุณมีทัชแพด Synaptics (ฉันมี Elantech ดังนั้นจึงไม่เหมาะสำหรับฉัน) คุณสามารถแทนที่สคริปต์ของคุณ (เส้นทางที่คุณเขียนหลังจาก RUN + =) ด้วยคำสั่งง่าย ๆ/usr/bin/synclient TouchpadOff=0และ 1 ตามลำดับ


เพียง nitpick เนื่องจากคุณต้องการการเข้าถึงรูทเพื่อสร้างudevกฎ แต่อย่างใดมันอาจจะดีกว่าถ้าคุณบันทึกไฟล์ไว้ที่อื่นนอกเหนือจากโฮมไดเร็กตอรี่ ตัวอย่างเช่น: หรือ/usr/local/bin /opt/touchpad-toggle/bin/
Dan

@ แดนปฏิเสธ ทุกสิ่งที่เกี่ยวข้องกับการตั้งค่าผู้ใช้จะดีกว่าในโฮมไดเร็กตอรี่ แต่น่าเสียดายที่กฎ udev การตั้งค่าการจัดการการล็อกอินและคู่ของสิ่งอื่น ๆ จะเป็นเวรกรรมที่จะคัดลอกกลับไป / * ทุกครั้งที่คุณเศษ / พาร์ทิชันจนกว่าจะเรียกคืนภาพรวมของหลักสูตร ดังนั้นการมีสิ่งต่าง ๆ มากมายที่เก็บไว้ใน / home / จึงสะดวกสบาย ดังนั้นคำแนะนำของคุณก็ไม่มีประโยชน์
mekkanizer

แต่เนื่องจากมันถูกเพิ่มเป็นกฎ udev นั่นไม่ได้หมายความว่ามันจะทำงานสำหรับผู้ใช้ใด ๆ ไม่ว่าใครจะเข้าสู่ระบบหรือไม่
Dan

ฉันไม่ได้ตรวจสอบเนื่องจากฉันไม่เคยใช้ Linux กับพีซีที่ใช้ร่วมกัน อย่างไรก็ตามผู้ใช้ที่หงุดหงิดกับกฎของ udev นี้ก็ไม่ได้สนใจอะไรเลย หากพวกเขามีความละเอียดอ่อนมากพวกเขาสามารถได้รับการติดตั้งของตัวเอง
mekkanizer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.