Отключить мышь, когда клавиша клавиатуры нажата в 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
Другие вопросы по тегам