Симулировать нажатия клавиш в безголовом окружении
Мне нужно имитировать нажатия клавиш в безголовом окружении.
Все xte
, xdotool
и много C++
предназначен для работы с окном X11
Я пробовал xdotool, который выдает ошибку:
xdotool type "aaaaa"
Error: Can't open display: (null)
Failed creating new xdo instance
Я знаю о Xvfb
но ищет другой возможный обходной путь
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
подключится к работающему экрану и вызовет команду. at alsamixer
будет вызывать остальную часть команды в окне с именем alsamixer
, stuff 2
будет имитировать нажатие 2.
Следует заметить, что вышесказанное работает только в том случае, если screen
сессия в данный момент прикреплена откуда-то. Я не знаю, как заставить это работать на отдельном screen
,
Через аппаратный TTY
Вы могли бы аппаратно отправлять реальные нажатия клавиш. Если это последовательная линия, вы можете отправлять нажатия клавиш, записывая их в последовательный порт компьютера на другом конце линии. Если это локальная консоль, у вас может быть аппаратная часть, соединяющаяся как настоящая клавиатура (я уверен, что есть возможность найти USB-устройства, которые могут это сделать).
В случае Linux существуют драйверы, которые могут имитировать нажатия клавиш на локальной консоли так же, как если бы они исходили от реального оборудования.