моделируйте нажатия клавиш в бездисплейной среде

Я должен моделировать нажатия клавиш в бездисплейной среде.

Все xte, xdotool и многие C++ разработанный для работы с окном X11

Я попробовал xdotool, который это бросает некоторую ошибку:

xdotool type "aaaaa"
Error: Can't open display: (null)
Failed creating new xdo instance

Я знаю о Xvfb но ища другое возможное обходное решение

2
задан 31 August 2014 в 14:37
1 ответ

Для того, чтобы приложение получало любые нажатия клавиш, оно должно получать их откуда-то. Обычно только два варианта - через окно или через TTY. Как имитировать нажатие клавиш зависит от того, какой из двух вариантов.

Через окно

Если приложение получает нажатия клавиш через окно, то для имитации их xdotool является подходящим инструментом для задания. Нужно только установить правильную переменную DISPLAY, чтобы xdotool подключился к тому же X-серверу, что и приложение.

Через виртуальную TTY

Многие программы будут вызывать оболочку внутри виртуальной TTY. xterm, sshd, script, screen - вот несколько типичных примеров. Программа, создавшая виртуальную TTY, может посылать на TTY любые нажатия клавиш, записывая их на управляющем конце виртуальной TTY.

Если бы это был xterm или любой аналогичный эмулятор терминала, то симулировать нажатие клавиш можно было бы через окно, как описано выше.

Из остального списка, единственная программа, которую я знаю, с возможностью симулировать нажатия клавиш - это screen. Вы можете посылать нажатия клавиш в любое названное окно в рамках подобного сеанса screen (реальный пример, который я часто использую):

screen -X at alsamixer stuff 2

Здесь screen -X подключится к работающему экрану и вызовет команду. в alsamixer вызовет оставшуюся часть команды в окне с именем alsamixer. вещи 2 будут имитировать нажатие 2 .

Одно из предостережений, чтобы заметить, что вышесказанное работает только в том случае, если сеанс экрана в данный момент откуда-то прикреплен. Я не знаю, как заставить его работать на отдельном экране .

Через аппаратное TTY

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

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

.
5
ответ дан 3 December 2019 в 09:35

Теги

Похожие вопросы