xdotool выводит 8 вместо Tab

xdotool выводит 8 вместо Tab

В настоящее время я работаю над скриптом "автотипа" дляпроходить. Чтобы это сделать, мне нужно ввести имя пользователя, нажать «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, например.

Связанный контент