Я хочу, чтобы моя сенсорная панель автоматически отключалась при подключении внешней мыши и включалась, когда ее нет. Я попытался использовать 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 , даже если я отмечу «просмотреть все процессы». И, конечно, это не работает!
Основной сценарий, в котором Вы нуждаетесь, просто:
#!/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
Удостоверяется, что Вы заменяете "ПРОФИЛЬ" подлинным именем Вашего профиля LXDE , можно узнать то, что это путем выполнения ls ~/.config/lxsession/
.
Добавляют, что сценарий в файлы автоматического запуска Единицы
Открывает Startup Applications
(поиск в панели инструментов для "Запуска")
Нажимают на "Add" и затем вставляют путь к Вашему сценарию в поле команды:
Хорошо, я заставил 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 соответственно