Вопрос или проблема
Мне нужна команда CLI, чтобы отключить устройства ввода (клавиатуру и мышь), а также команда, чтобы снова их включить.
Чтобы отключить устройства ввода на Xorg, используйте: xinput float <id#>
, а чтобы включить их, используйте xinput reattach <id#>
, но я использую Wayland, как это сделать там?
Могут быть другие методы в зависимости от используемого вами рабочего стола, но для любого из них вы должны суметь использовать evtest -grab
на устройстве ввода. Эта программа перехватывает все события, поступающие от устройства (для отладки), и опция захвата останавливает дальнейшую передачу событий. Программа должна оставаться работающей, и когда она завершена, события снова будут передаваться в Wayland.
Вы можете найти имя мыши и клавиатуры, посмотрев вывод команд
libinput list-devices
ls -l /dev/input/*/*{kbd,mouse}
Например, у меня есть
/dev/input/by-id/usb-Logitech_USB_Optical_Mouse-event-mouse -> ../event6
/dev/input/by-id/usb-05f3_0007-event-kbd -> ../event2
поэтому мне нужно сделать
evtest -grab /dev/input/event2 >/dev/null &
evtest -grab /dev/input/event6 >/dev/null &
а затем завершить эти процессы, чтобы вернуть контроль.
Ответ или решение
Вопрос о том, как отключить и включить устройства ввода, такие как клавиатура и мышь, в среде Ubuntu 24.04 LTS под управлением Wayland, часто возникает у пользователей, сталкивающихся с переходом от Xorg. В Xorg эта задача решается с помощью команд xinput float <id#>
и xinput reattach <id#>
. Однако в Wayland, ввиду его архитектурных особенностей, таких как отсутствие прямого доступа к устройствам ввода, этот подход неприменим.
Теория: Wayland не использует xinput
для управления устройствами ввода. Вместо этого, главным инструментом работы с устройствами ввода является libinput
, который предоставляет информацию и управляющие функции для этих устройств, но не для их отключения напрямую.
Пример
На платформе Wayland вы можете использовать утилиту evtest
для временной блокировки событий от устройств ввода. При использовании команды evtest -grab
, программа начинает перехватывать все события от заданного устройства, предотвращая их дальнейшую передачу в систему, что фактически блокирует устройство ввода.
Применение
Вот шаги для реализации:
-
Узнайте устройство ввода, которое необходимо отключить, с помощью команд:
libinput list-devices
или
ls -l /dev/input/*/*{kbd,mouse}
-
Например, вы можете увидеть следующее:
/dev/input/by-id/usb-Logitech_USB_Optical_Mouse-event-mouse -> ../event6 /dev/input/by-id/usb-05f3_0007-event-kbd -> ../event2
-
Заблокируйте устройство, введя команды:
evtest -grab /dev/input/event2 >/dev/null & evtest -grab /dev/input/event6 >/dev/null &
Каждая из этих команд запускает evtest
в фоновом режиме (&
), и устройство блокируется до тех пор, пока процесс evtest
не будет завершен.
- Чтобы разблокировать устройство, завершите процессы
evtest
:- Найдите ID процесса, используя команду
ps aux | grep evtest
, и завершите его с помощьюkill <PID>
.
- Найдите ID процесса, используя команду
Этот метод применим в рабочих окружениях, где необходимо временно отключать устройства ввода, например, для отладки или тестирования. Однако следует помнить, что Wayland спроектирован с целью обеспечения безопасности и стабильности системы, поэтому работа с аппаратными устройствами может быть менее гибкой по сравнению с Xorg.