
В настоящее время я работаю над скриптом "автотипа" дляпроходить. Чтобы это сделать, мне нужно ввести имя пользователя, нажать «Tab», а затем ввести пароль.
Для тестирования я использую следующий код:
WID=$(xdotool selectwindow)
xdotool windowactivate $WID type --delay 100 "Hello World"
xdotool windowactivate $WID key --clearmodifiers Tab
xdotool windowactivate $WID type --delay 100 "Hello World"
Затем я выбираю kate
как окно, но вывод Hello World8Hello World
вместо Hello World Hello World
. Что я делаю не так?
РЕДАКТИРОВАТЬ:
Как обходной путь можно использовать xte 'key Tab'
из xautomation
пакета. Но изначальный вопрос все еще остается.
решение1
xdotool
ищет"X Keysym"string, но его документация относительно того, как он это определяет, лаконична:
В общем, подойдет любая допустимая строка X Keysym. Несколько клавиш разделяются знаком '+'. Существуют псевдонимы для "alt", "ctrl", "shift", "super" и "meta", которые все сопоставляются с Foo_L, например
Alt_L
иControl_L
, и т. д.
Я использовал такие коды клавиш, как 0xff09
(код клавиши дляВкладка) при разработке страницы на xtermспециальные клавиши. При таком подходе мне удалось отправить все клавиши, которые были определены в конфигурации моей клавиатуры.
Моя командная строка отличалась. Только соответствующая часть тестового скрипта показывает это:
KEY=0xff09 # XK_tab
sendkey() {
echo "** $1"
xdotool key --window $ID $1 2>/dev/null
}
sendkey "$KEY"
Ваша проблемная команда будет
xdotool windowactivate $ID key --clearmodifiers $1 2>/dev/null
xdotool
руководство предполагает, что может потребоваться добавить --sync
опцию, и подразумевает, что цепочка команд будет работать (так что windowactivate
и key
цепочка вместе), но эта комбинация у меня тоже не работает. Но опция --window
работает key
:
xdotool key --window $ID --clearmodifiers $1 2>/dev/null
решение2
Я знаю, что это немного устарело, но, возможно, это кому-то поможет. Вы также можете использовать KP_Tab или KP_Enter, например.