Отключите мышь (не тачпад!) В Xorg во время простоя

17

Я заядлый пользователь клавиатуры, но мне все еще нужна мышь время от времени. Чтобы свести к минимуму перемещение руки, у меня под мышкой расположена мышь. (Кстати, использование мыши таким образом более естественно для моей руки.)

В настоящее время я использую unclutter, чтобы скрыть указатель, пока я не использую мышь. К сожалению, я время от времени подталкиваю его, что приводит к повторному появлению указателя. Иногда это перемещает указатель на другое окно, что, в свою очередь, убирает фокус с моего текущего окна. (Я использую неаккуратный фокус, и изменить это не вариант.)

Сейчас я ищу возможность не только скрыть указатель после определенного времени простоя, но и вообще отключить мышь. Нажатие любой кнопки мыши или использование колесика мыши должно затем повторно включить мышь.

игорь
источник

Ответы:

16

Первое, что нам нужно сделать, это отключить мышь, но только в X. Для этого мы могли бы использовать xinput.

Нам нужно обнаружить устройства ввода, которые подключены к компьютеру (к X-серверу):

pbm@tauri ~ $ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ A4Tech USB Mouse                          id=10   [slave  pointer  (2)]
⎜   ↳ Macintosh mouse button emulation          id=11   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
     [...]

Устройство, которое нам нужно использовать, A4Tech USB Mouseс id=10. Далее нам нужно проверить свойства этого устройства:

pbm@tauri ~ $ xinput list-props "A4Tech USB Mouse"
Device 'A4Tech USB Mouse':
       Device Enabled (121):   1
       [....]

Чтобы выключить устройство, нам нужно изменить свойство Device Enabled:

xinput set-prop DEV PROP STATE
xinput set-prop "A4Tech USB Mouse" "Device Enabled" 0

Включить это:

xinput set-prop "A4Tech USB Mouse" "Device Enabled" 1

Следующее, что нужно сделать автоматически ...;) В этом примере мы будем отключать мышь с помощью сочетания клавиш и активировать ее, нажимая левую + правую кнопку мыши.

Для этого мы могли бы использовать actkbd - демон сочетания клавиш (но не только), работающий вне X-сервера.

Во- первых , мы должны создать пустой файл конфигурации для actkbd: touch /etc/actkbd.conf. Следующее, что нужно для обнаружения устройств, подключенных к компьютеру:

pbm@tauri ~ $ cat /proc/bus/input/devices 
I: Bus=0003 Vendor=046d Product=c312 Version=0110
N: Name="BTC USB Multimedia Keyboard"
P: Phys=usb-0000:00:1d.0-1.6/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0/input/input6
U: Uniq=
H: Handlers=kbd event3 
B: EV=120013
B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0003 Vendor=09da Product=000a Version=0110
N: Name="A4Tech USB Mouse"
P: Phys=usb-0000:00:1d.0-1.5/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.0/input/input8
U: Uniq=
H: Handlers=mouse1 event5 
B: EV=17
B: KEY=ff0000 0 0 0 0
B: REL=343
B: MSC=10

[...]

В этой части наиболее интересными для использования являются имена и обработчики устройств клавиатуры и мыши.

Сначала мы осуществляем отключение мыши с помощью сочетания клавиш, поэтому нам нужно найти идентификаторы клавиш:

pbm@tauri ~ $ sudo actkbd -s -d /dev/input/event3
Keys: 29+41+42 //we need to press keys that will turn off mouse, 29+41+42 is Ctrl + Shift + `

Когда мы знаем, что такое идентификаторы ключей, нам нужно поместить их в файл конфигурации ( /etc/actkbd.conf):

29+41+42:::sudo -u pbm DISPLAY=:0 xinput set-prop "A4Tech USB Mouse" "Device Enabled" 0

Чтобы проверить это, нам нужно запустить actkbdв режиме демона:

pbm@tauri ~ $ sudo actkbd -d /dev/input/event3 -D

Точно так же нам нужно обработать событие включения:

  1. Проверьте обработчики устройства мыши
  2. Проверьте коды клавиш левой + правой кнопки мыши, используя actkbd
  3. Поместите это в actkbd.conf
  4. Запустите демон actkbd для мониторинга устройства ввода мыши

Запуск демонов может быть реализован как сценарий инициализации или сценарий автозапуска в среде.

Чтобы автоматически выключить мышь, мы могли бы контролировать устройство ввода ( cat /dev/input/event5) и выключать его, когда нет ввода ...

Я надеюсь, что мое короткое вступление поможет вам ...;)

постоянный репер
источник
Спасибо за подсказку с actkbd! После публикации моего вопроса я уже решил использовать xinput, но я не узнал, как я могу снова включить мышь, нажимая кнопки мыши.
Игорь
Это очень хорошо написанный ответ.
pjc50
Спасибо за эту информацию, особенно за подсказку с atkkbd
Вместо использования параметра --set-prop вместе со свойством «Device Enabled / Disabled» можно также использовать параметры --enable и --disable, например, xinput --enable [device] и xinput --disable [device] ,
Thebodzio
1

Вы пробовали апплет панели Gnome "Pointer Capture" ?

Указатель мыши можно зафиксировать в области экрана, чтобы указательное устройство было свободно для других задач. Например, эта возможность позволяет пользователю коляски управлять как коляской, так и указателем мыши с помощью одного джойстика.

Апплет панели «Захват указателя» создает на панели такую ​​область, в которую пользователь может заблокировать указатель, пока он не будет выпущен определенным образом.

Апплет панели захвата указателя можно установить, щелкнув правой кнопкой мыши строку меню / системную панель рабочего стола GNOME, выбрав «Добавить на панель», выбрав «Захват указателя» и нажав кнопку «Добавить».

Если описание из gnome.org неясно, это создаст область на панели, где, когда мышь входит (или вы щелкаете), курсор исчезнет и не появится, пока не произойдет определенное действие, например второй клик. Похоже, именно то, что вам нужно?

мистифицировать
источник
Я использовал это, но создал некоторые проблемы. Я не смог использовать, Alt + F1чтобы открыть меню приложений. Я не знаю, что вызвало это. Я пользователь Ubuntu.
балки