Отключить мышь, когда клавиша клавиатуры нажата в Linux
Я перестал пытаться правильно зарегистрировать мой тачпад. Он хочет быть устройством imps/2, и я не могу тратить больше времени на то, чтобы убедить его в обратном (справедливо, оно весьма неплохо работает как устройство imps/2 - нажмите, чтобы щелкнуть, 3-пальцевое нажатие - на середину). нажмите, горизонтальной прокрутки нет, но у вас не может быть всего этого)
Однако я не могу смириться с тем фактом, что самая легкая щетка вызывает срабатывание крана.
Есть ли команда, которую я могу использовать, чтобы отключить тачпад, когда недавно была нажата клавиша? xinput, кажется, мой друг здесь, устройство появляется и может быть настроено как "ImPS/2 Generic Wheel Mouse"
1 ответ
Мое очень хакерское решение до сих пор:
xinput test-xi2 --root | grep --line-buffered RawKeyRelease | while read -r line ; do pause-mouse-with-kill & sleep 0 ; done
Он сообщает обо всех входных данных, переданных в xorg, проверяет, является ли это нажатием клавиши (так что я все еще могу нажимать клавиши ctrl) и на мгновение отключает мышь. Вот где все становится еще более хакерским - необходимы два файла, чтобы предотвратить повторные нажатия клавиш, увеличивающие время ожидания мыши:
/usr/bin/pause-mouse
сделать фактическое отключение мыши:
#!/bin/bash
DEV="ImPS/2 Generic Wheel Mouse" ; xinput set-prop "$DEV" "Device Enabled" 0 && sleep 0.5 && xinput set-prop "$DEV" "Device Enabled" 1
/usr/bin/pause-mouse-with-kill
Отмените предыдущее отключение мыши и перезапустите часы
#!/bin/bash
killall pause-mouse
pause-mouse
Более хорошие решения будут предпочтительнее!
Я улучшил ваше решение, чтобы не было необходимости в нескольких файлах, меньше необходимости в grep и незначительных улучшениях надежности. В коде я использую устройство Logitech K400, которое я использую, но вы можете его изменить. (С этим устройством я хочу отключить мышь, когда Ctrl не работает, но это другая история и другой код.) Я не знаю, насколько хорошо это работает для вас, когда вы отключаете мышь только после отпускания клавиши. Возможно, вам будет лучше запускать отключение при нажатии клавиши, за исключением случаев, когда это клавиша-модификатор, например Ctrl, и включать ее после некоторой задержки после отпускания клавиши (снова игнорируя клавиши-модификаторы).
#!/bin/bash
# Use
# $ xinput --list
# to get the device names and test them with
# $ xinput --list "name"
# Modify the pointer device name to match your hardware
pointer_id=$(xinput list --id-only 'pointer:Logitech K400')
# Modify the keyboard name to match your hardware
keyb_id=$(xinput list --id-only 'keyboard:Logitech K400')
# exit, if the devices are not available
[[ $pointer_id && $keyb_id ]] || exit 1
quit_jobs() {
# terminate all running jobs, if any
kill $(jobs -pr) 2>/dev/null || :
}
# Prepare the script for exit
revert() {
# Terminate `xinput test` and other possible processes
quit_jobs
# The pointer may be disabled
xinput enable $pointer_id
}
trap revert EXIT
disable_pointer_temporarily() {
xinput disable $pointer_id
sleep 0.5
xinput enable $pointer_id
}
xinput test $keyb_id | while read -r line; do
if [[ $line == key\ release* ]]; then
quit_jobs
disable_pointer_temporarily &
fi
done