Назад | Перейти на главную страницу

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

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

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

Я пробовал xdotool, и он выдает ошибку:

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

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

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

Через окно

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

Через виртуальный телетайп

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

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

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

screen -X at alsamixer stuff 2

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

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

Через аппаратный TTY

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

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