Блокировка клавиатуры и мыши при выполнении команд xdtool через скрипт sh

Рассмотрим следующий иллюстративный сценарий sh, который использует xdtool для открытия новой вкладки в терминале, изменяет ее на вкладку 1, а затем пишет Hello world:

#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory

xdotool key ctrl+shift+t                                   #Open new terminal tab

xdotool key alt+1                                          #Switch to the tab 1 of the terminal

xdotool type "echo \"Hello world\""                        #Write something

xdotool key Return                                         #Press "Enter"

Если я что-то напишу или щелкну кнопкой мыши в другом месте во время работы скрипта, текст Hello world может быть написан там, где я щелкнул, смешавшись с буквами, которые я набрал на клавиатуре. Я хотел бы заблокировать клавиатуру и мышь, пока выполняются команды xdotool, чтобы этого не произошло. Возможно, для этой цели есть вариант xdotool, хотя я его не нашел. У Вас есть какие-то предложения?


person Élio Pereira    schedule 28.07.2020    source источник


Ответы (1)


сначала введите xinput в терминале, чтобы получить список устройств. Затем выберите идентификатор устройства, которое вы хотите отключить. Добавьте строки в свой скрипт следующим образом:

#!/bin/sh

export DISPLAY=:0
xinput set-int-prop $ID "Device Enabled" 8 0

cd ${0%/*} || exit 1 # run from this directory

xdotool key ctrl+shift+t                                   #Open new terminal tab

xdotool key alt+1                                          #Switch to the tab 1 of    the terminal

xdotool type "echo \"Hello world\""                        #Write something

 xinput set-int-prop $ID "Device Enabled" 8 1

xdotool key Return
person Andres Ordorica    schedule 06.08.2020
comment
Кажется, это путь к решению. Однако существует проблема с разрешениями на доступ к устройствам. У меня возникла следующая ошибка: X Ошибка неудачного запроса: BadAccess (попытка доступа к частному ресурсу запрещена) Основной код операции неудачного запроса: 131 (XInputExtension) Второстепенный код операции неудачного запроса: 57 () Серийный номер неудачного запроса: 19 Текущий серийный номер число в выходном потоке: 20 - person Élio Pereira; 06.08.2020
comment
Также хочу указать на упущение: команда xinput set-int-prop $ID Device Enabled 8 1 должна стоять после команды xdotool key Return. - person Élio Pereira; 06.08.2020
comment
Изучив этот сайт wiki.archlinux.org/index.php/Libinput, я подумайте теперь, что устройства, указанные командой xinput list, которые не указаны командой libinput list-devices, не будут поддерживаться. Таким образом, команда xinput set-int-prop будет работать только для устройств, указанных в командах xinput list и libinput list-devices. - person Élio Pereira; 07.08.2020
comment
Поместите xinput set-int-prop $ID Device Enabled 8 1 после возврата ключа xdotool в свой ответ, и я приму его. - person Élio Pereira; 07.08.2020
comment
Да, извините, я попробовал, и это сработало. Может быть, есть лучший способ, менее технический, особенно в идентификаторе устройства. - person Andres Ordorica; 07.08.2020
comment
Ваш ответ в любом случае удовлетворил мои потребности, поскольку он позволил заблокировать наиболее важные устройства мыши и клавиатуры, которые я использую. - person Élio Pereira; 07.08.2020
comment
Другая проблема может быть вопросом для другого поста. - person Élio Pereira; 07.08.2020
comment
Я рад слышать, что это помогло! - person Andres Ordorica; 07.08.2020