dotool – 설치 및 구성 (Manjaro / Arch-basiert)¶
is dotool이었나?¶
dotool은 Linux용 Werkzeug zum Simulieren von Tastatureingaben의 기능입니다.
X11에 대한 기능은 Wayland와 마찬가지로 xdotool로 표시되며 기능도 포함되어 있습니다.
설치 (만자로/아치)¶
1. 패키지 설치¶
pamac build dotool
# oder mit yay:
yay -S dotool
2. 사용자 zur input - Gruppe Hinzufügen¶
sudo gpasswd -a $USER input
3. udev-Regel erstellen¶
echo 'KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"' \
| sudo tee /etc/udev/rules.d/80-dotool.rules
4. udev neu laden¶
sudo udevadm control --reload-rules && sudo udevadm trigger
5. Neu einloggen (wichtig!)¶
Ohne Neu-Login grift die Gruppenzugehörigkeit nicht.
프로젝트 구성¶
config/settings.py¶
# Eingabemethode für X11: "dotool" (schnell) oder "xdotool" (Fallback)
x11_input_method_OVERRIDE = "dotool"
# Delay zwischen Tastenanschlägen in Millisekunden
# 2ms = dotool-Default, zuverlässig auch für Umlaute (ä, ö, ü, ß)
# 0ms = maximal schnell, kann Sonderzeichen verschlucken
dotool_typedelay = 2
Wie das Skript dotool 버전¶
Eingabe-Funktion¶
do_type() {
local text="$1"
if [[ "$INPUT_METHOD" == "dotool" ]]; then
printf 'typedelay %s\ntype %s\n' "$DOTOOL_TYPEDELAY" "$text" | dotool
else
LC_ALL=C.UTF-8 xdotool type --clearmodifiers --delay 12 "$text"
fi
}
구성 auslesen(ohne Seiteneffekte)¶
설정은 다음과 같습니다. das print() -settings.py의 Ausgaben
den Wert nicht verfälschen:
OVERRIDE=$(python3 -c "
import importlib.util, sys, io
spec = importlib.util.spec_from_file_location('settings', '$(pwd)/config/settings.py')
old_stdout = sys.stdout
sys.stdout = io.StringIO()
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
sys.stdout = old_stdout
print(mod.x11_input_method_OVERRIDE)
")
[[ "$OVERRIDE" == "dotool" ]] && INPUT_METHOD="dotool"
DOTOOL_TYPEDELAY=$(python3 -c "
import importlib.util, sys, io
spec = importlib.util.spec_from_file_location('settings', '$(pwd)/config/settings.py')
old_stdout = sys.stdout
sys.stdout = io.StringIO()
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
sys.stdout = old_stdout
print(mod.dotool_typedelay)
")
힌바이제¶
Umlaute und Sonderzeichen:
유형 지연 2(도구 기본값 수행) ist empfohlen. Beitypedelay 0können Zeichen wie ä, ö, ü, ß verloren gehen.Zu schnell für die Zielanwendung? Manche Apps(z. B. Electron, 브라우저 입력) Verlieren Zeichen bei niedrigem 지연. 가을에는
dotool_typedelay = 5oder höher verwenden.Wayland: Wayland에서 dotool 기능을 사용하면 xdotool을 사용할 수 있습니다.
폴백: Wenn dotool nicht installiert ist, fällt das Skript automatisch auf
xdotoolzurück.
Wie das Skript dotool 버전¶
Das Skript startet einen persisten dotool-Prozess über ein FIFO,
um den Overhead eines neuen Prozeses bei jedem Tastendruck zu vermeiden.
관련 코드(type_watcher.sh)¶
export DOTOOL_DELAY=0
# Alten Listener beenden falls noch läuft
pkill -f "dotool < /tmp/dotool_fifo" 2>/dev/null
DOTOOL_PID=$!
# typedelay direkt nach Start setzen
sleep 0.1
echo "typedelay 0" > /tmp/dotool_fifo
# Cleanup beim Beenden
trap "kill $DOTOOL_PID 2>/dev/null; rm -f /tmp/dotool_fifo" EXIT
Eingabe-Funktion¶
do_type() {
local text="$1"
if [[ "$INPUT_METHOD" == "dotool" ]]; then
printf 'typedelay 0\ntype %s\n' "$text" | dotool
# printf 'typedelay 0\ntype %s\n' "$text" > /tmp/dotool_fifo
# printf 'type %s\n' "$text" | dotool
else
LC_ALL=C.UTF-8 xdotool type --clearmodifiers --delay 12 "$text"
fi
}
구성 auslesen(ohne Seiteneffekte)¶
설정은 다음과 같습니다. das print() -settings.py의 Ausgaben
den Wert nicht verfälschen:
OVERRIDE=$(python3 -c "
import importlib.util, sys, io
spec = importlib.util.spec_from_file_location('settings', '$(pwd)/config/settings.py')
old_stdout = sys.stdout
sys.stdout = io.StringIO()
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
sys.stdout = old_stdout
print(mod.x11_input_method_OVERRIDE)
")
[[ "$OVERRIDE" == "dotool" ]] && INPUT_METHOD="dotool"
힌바이제¶
Zu schnell für die Zielanwendung? Manche Apps(z. B. Electron, 브라우저 입력) verlieren Zeichen bei ‘typedelay 0’. 가을에는 ‘typedelay 5’ 또는 ‘typedelay 10’ 버전이 제공됩니다.
Wayland: Wayland에서 dotool 기능을 사용하면 xdotool을 사용할 수 있습니다.
폴백: Wenn dotool nicht installiert ist, fällt das Skript automatisch auf
xdotoolzurück.