Я хочу, чтобы моя сенсорная панель автоматически отключалась, когда подключена внешняя мышь, и включалась, когда ее нет. Я пытался использовать, 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 , даже если я отмечаю «просмотреть все процессы». И, конечно же, это не работает!
xinput
требуется работающий X-сервер, и большинство методов запуска вещей в качестве демонов не знают или не могут подключиться к X. В-третьих, и главная причина, почему вы всегда должны объяснять, что вы пытаетесь сделать, это то, что очень часто решение то, что кто-то пытается подать заявку, на самом деле не способ сделать это, и в итоге вы задаете неправильный вопрос, обычно известный как проблема XY .Ответы:
Основной сценарий, который вам нужен, это просто:
Сценарий выше будет переключать трекпад в зависимости от того, подключена ли мышь. После запуска он будет работать вечно и каждую секунду будет проверять наличие мыши, соответственно отключая или включая сенсорную панель.
Теперь сохраните скрипт как
~/touchpad.sh
, сделайте его исполняемым (chmod +x ~/touchpad.sh
) и добавьте его в программы запуска сеанса GUI. Вы не указали, какую среду рабочего стола вы используете, но, поскольку вы упомянулиlxtask
, я предполагаю, что вы используетеLXDE
. В любом случае, здесь приведены инструкции для обоихLXDE
иUnity
:Добавьте скрипт в файлы автозапуска LXDE
Убедитесь, что вы заменили «PROFILE» реальным именем вашего профиля LXDE , вы можете узнать, что это такое, запустив его
ls ~/.config/lxsession/
.Добавьте скрипт в файлы автозапуска Unity
Открыть
Startup Applications
(поиск на панели инструментов для «запуска»)Нажмите «Добавить», а затем вставьте путь к сценарию в поле команды:
источник
Хорошо, я сделал для него правило udev, и, как сказал @terdon, это намного чище
Итак, благодаря этому руководству я создал файл "touchpad_toggle.rules" в /etc/udev/rules.d/ (требуется доступ с правами root) и заполнил его двумя строками:
Не забудьте заменить «имя пользователя» на ваше имя пользователя!
Содержимое этих включенных и выключенных сценариев оболочки - просто кастрированная версия сценария в моем вопросе. Пример - off.sh:
Вам нужно будет использовать xinput enable $ TID в on.sh
И не забудьте добавить скрипт в моем вопросе (или предложенный @terdon, но без цикла) в автозапуск сеанса, как он сказал вам в своем ответе.
Вот и все, но я должен добавить одну вещь:
Если у вас есть тачпад Synaptics (у меня есть Elantech, так что он мне не подходит), вы можете заменить свои скрипты (пути к которым вы пишете после RUN + =) простой командой
/usr/bin/synclient TouchpadOff=0
и 1 соответственноисточник
udev
правила любым способом, может быть лучше сохранить файл в другом месте, чем домашний каталог. Например:/usr/local/bin
или/opt/touchpad-toggle/bin/
.