Wie kann verhindert werden, dass xdotool das aktuelle Fenster nach einem Skript sperrt?

Wie kann verhindert werden, dass xdotool das aktuelle Fenster nach einem Skript sperrt?

Ich habe ein einfaches BASH-Skript mit xdotool, das einige Daten aus einer CSV-Datei liest und sie in ein Formular einer anderen Software eingibt:

#!/bin/bash

sleep 5

while read -r line
do
    a="$(echo $line | awk '{ print $1 }')"
    xdotool type $a
    xdotool key "$Tab"
done < ./data.csv

aplay Beep.wav

Das Skript funktioniert wie vorgesehen, aber nach dem Piepton wird der Bildschirm gesperrt:

  • Die Maus bewegt sich, ist aber in keinem Fenster sichtbar (z. B. werden keine QuickInfos angezeigt) und kann auf nichts klicken, nicht einmal auf das aktuelle Fenster.
  • Die Tastatureingaben erfolgen jedoch nur innerhalb des aktuellen Fensters.
  • Das Fenster bleibt auf diese Weise etwa 5 Minuten lang verriegelt, danach ist die Verriegelung plötzlich aufgehoben.

Mit STRG+ALT+F1 kann ich die Konsole wechseln, aber die Sperre wird killall -9 xfce4-terminaldadurch nicht aufgehoben.killall -9 xdotool

Wie kann ich verhindern, xdotooldass das aktuelle Fenster gesperrt wird, nachdem es in einem Skript ausgeführt wurde?

Antwort1

Es piept, weil es darauf wartet, dass Sie auf das Fenster klicken, mit dem es interagieren soll. Haben Sie nicht bemerkt, dass sich der Cursor in ein „+“-Symbol verwandelt?

Lesen Sie die Manpage noch einmal. Sie müssen eine Fenster-ID angeben (--windowAusweis)

Antwort2

Ich bin auf diese ziemlich alte Frage gestoßen, als ich selbst nach einer Antwort gesucht habe, weil ich ein ähnliches Problem habe/hatte. Ich verwende xdotool, um Anmeldeinformationen auf Websites (in Firefox) automatisch einzugeben.

Ich habe mit xbindkeys eine Tastenkombination an ein Skript gebunden. Das Skript ermittelt den Fensternamen (ebenfalls mit xdotool), sucht in einer verschlüsselten Datei nach einem zugehörigen Eintrag, lädt die entsprechenden Anmeldeinformationen und gibt diese ein.

Ich werde hier nicht die Feinheiten meines Skripts, die Benutzerinteraktion damit und die Art und Weise, wie es Informationen in Eingabefelder eingibt, erklären. Ich habe das Problem jedoch gelöst, indem ichHinzufügen eines kurzen Schlafs kurz vor dem eigentlichen Tippen.

sleep 0.4
xdotool type ...

Ich gebe zu, dass dies eine Hacker-Lösung ist, aber sie scheint zu funktionieren. Ich hoffe, dass diese Lösung jedem anderen helfen kann, der versucht, diesen sehr frustrierenden Fehler(?) zu beheben, oder vielleicht jemand anderen dazu anregt, eine bessere Antwort zu schreiben.

verwandte Informationen