Что я хочу сделать: иметь возможность вводить нажатия клавиш, когда одна программа находится в фокусе, а также отправлять те же нажатия клавиш другой программе на другом экране.
Что я пробовал: xvkbd - я пробовал несколько способов использовать это, и ни один из них, кажется, не работает должным образом для того, что мне нужно. То, на что я смотрел, но не могу сделать: клавиатурное вещание - я не могу на всю жизнь найти исходные файлы, и везде есть только файлы deb для него, без RPM. (Я запускаю Fedora 21)
Фактическое применение: для чего я собираюсь использовать это, если для ввода моего пароля сразу в нескольких клиентах EvE-Online сделать вход в мои учетные записи более удобным. У меня уже есть скрипт, который позволяет мне запускать их все сразу на соответствующих мониторах (используя wmctrl), но мне все равно приходится вводить пароли по одному. Поскольку я использую один и тот же пароль для всех трех, проще всего клонировать нажатия клавиш, если это возможно.
У меня был некоторый успех с записью в xvkbd -window $ WID -text "REDACTED\r" в конце скрипта, который запускает программу и использует wmctrl для установки их местоположения (windowid для WID извлекается через wmctrl).
Если я использую этот скрипт:
#!/bin/bash
WINEDEBUG=-all wine64 "/home/REDACTED/.wine/drive_c/Program Files/CCP/EVE/bin/exefile.exe" &
PID=$!
while [ "$WID" == "" ]; do
WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
wmctrl -i -r $WID -e 0,0,1680,1050 &&
sleep 2
xvkbd -window $WID -text "REDACTED"\r"
Я могу успешно автоматизировать процесс входа в систему. Просто запустив сценарий, вы откроете игровой клиент, переместите его на любой монитор, который я вам скажу, и измените его размер до того, что я говорю, затем он ждет 2 секунды, а затем передает мой пароль через xvkbd и регистрирует меня.
Я также добился успеха в создании сценария, открывающего окно для ввода моего пароля, чтобы мой PW не сохранялся где-либо в файле.
Тем не менее, когда я пытаюсь сделать это с двумя клиентами, ни один из них не получает текст. Если я сместил время ожидания двух, между тем, когда окно сделано, и xvkbd используется, только тот с более длинным временем ожидания получает информацию.
У меня сложилось впечатление, что это может быть как-то связано с фокусировкой окна, но если сделать wmctrl фокусом на каждое окно (wmctrl -a $ WID), а затем выполнить xvkbd, то, похоже, не сработает, если я не компенсирую таймеры сна ни одна программа не получает, если я делаю, только тот с более длинным таймером делает. Я попытался сместить их всего за 1 секунду и до 10 секунд, и это то же самое.
Есть ли другой способ сделать это? если так как? Я что-то упускаю в своем сценарии? или это просто невозможно? Благодарю.