
Ich arbeite derzeit an einem "Autotype"-Skript fürpassieren. Dazu muss ich den Benutzernamen eingeben, die Tabulatortaste drücken und dann das Passwort eingeben.
Zum Testen verwende ich den folgenden Code:
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"
Dann wähle ich kate
als Fenster aus, aber die Ausgabe ist Hello World8Hello World
statt Hello World Hello World
. Was mache ich falsch?
BEARBEITEN:xte 'key Tab'
Als Workaround können Sie das Paket verwenden xautomation
. Die ursprüngliche Frage bleibt jedoch bestehen.
Antwort1
xdotool
ist auf der Suche nach einem"X Keysym"Zeichenfolge, aber die Dokumentation dazu, wie dies ermittelt wird, ist knapp:
Im Allgemeinen funktioniert jede gültige X-Keysym-Zeichenfolge. Mehrere Tasten werden durch '+' getrennt. Es gibt Aliase für "alt", "ctrl", "shift", "super" und "meta", die alle auf Foo_L abgebildet werden, wie zum Beispiel
Alt_L
UndControl_L
, usw.
Ich habe Keycodes wie 0xff09
(den Keycode fürTab) bei der Entwicklung einer Seite auf xterm'sSondertasten. Mit diesem Ansatz konnte ich alle Tasten senden, die in meiner Tastaturkonfiguration definiert waren.
Meine Kommandozeile war anders. Nur der entsprechende Teil eines Testskripts zeigt Folgendes:
KEY=0xff09 # XK_tab
sendkey() {
echo "** $1"
xdotool key --window $ID $1 2>/dev/null
}
sendkey "$KEY"
Ihr problematischer Befehl wäre
xdotool windowactivate $ID key --clearmodifiers $1 2>/dev/null
xdotool
Das Handbuch von legt nahe, dass es notwendig sein könnte, eine Option hinzuzufügen --sync
, und impliziert, dass die Befehlsverkettung funktionieren würde (so dass windowactivate
und key
miteinander verkettet werden), aber diese Kombination funktioniert bei mir auch nicht. Aber die --window
Option von key
funktioniert:
xdotool key --window $ID --clearmodifiers $1 2>/dev/null
Antwort2
Ich weiß, das ist schon etwas älter, aber vielleicht hilft es jemandem. Sie können beispielsweise auch KP_Tab oder KP_Enter verwenden.