Как я могу переключать тачпад в зависимости от того, подключена ли мышь?

Я хочу, чтобы моя сенсорная панель автоматически отключалась при подключении внешней мыши и включалась, когда ее нет. Я попытался использовать 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-значное число, которое, я думаю, должно быть PID запущенного процесса, но когда я запускаю lxtask нет процессов с этим PID , даже если я отмечу «просмотреть все процессы». И, конечно, это не работает!

10
задан 23 June 2016 в 17:50

2 ответа

Основной сценарий, в котором Вы нуждаетесь, просто:

#!/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 , можно узнать то, что это путем выполнения ls ~/.config/lxsession/.

  2. Добавляют, что сценарий в файлы автоматического запуска Единицы

    Открывает Startup Applications (поиск в панели инструментов для "Запуска")

    enter image description here

    Нажимают на "Add" и затем вставляют путь к Вашему сценарию в поле команды:

    enter image description here

0
ответ дан 23 June 2016 в 17:50

Хорошо, я заставил 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, таким образом, это не подходит для меня), можно заменить сценарии (пути, в которые Вы пишете, после того, как ВЫПОЛНЕНО + =) с простой командой /usr/bin/synclient TouchpadOff=0 и 1 соответственно

0
ответ дан 23 June 2016 в 17:50

Другие вопросы по тегам:

Похожие вопросы: