Как я могу переключать тачпад в зависимости от того, подключена ли мышь?
Я хочу, чтобы моя сенсорная панель автоматически отключалась при подключении внешней мыши и включалась, когда ее нет. Я пытался использовать 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, даже если я отмечаю "просмотреть все процессы". И, конечно, это не работает!
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
:
Добавьте скрипт в файлы автозапуска LXDE
echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file
Убедитесь, что вы заменили "PROFILE" реальным именем вашего профиля LXDE, вы можете узнать, что это такое, запустив
ls ~/.config/lxsession/
,Добавьте скрипт в файлы автозапуска Unity
открыто
Startup Applications
(поиск на панели инструментов для "запуска")Нажмите "Добавить", а затем вставьте путь к вашему сценарию в поле команды:
Хорошо, я сделал для него правило udev, и, как сказал @terdon, это намного чище
Итак, благодаря этому руководству я создал файл "touchpad_toggle.rules" в /etc/udev/rules.d/ (требуется доступ с правами root) и заполнил его двумя строками:
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 enable $TID в on.sh
И не забудьте добавить скрипт в моем вопросе (или тот, который предложил @terdon, но без цикла) в автозапуск сеанса, как он сказал вам в своем ответе.
Вот и все, но я должен добавить одну вещь:
Если у вас есть тачпад Synaptics (у меня есть Elantech, так что он мне не подходит), вы можете заменить свои скрипты (пути к которым вы пишете после RUN+=) простой командой /usr/bin/synclient TouchpadOff=0
и 1 соответственно