#!/usr/bin/env bash # Déclenche manuellement le Ctrl+V puis Ctrl+Enter dans DBeaver de la VM via ydotool. # Contournement nécessaire car NoMachine en "passive grab" mange la touche Ctrl # envoyée par pynput depuis Léa Windows (les clics passent, pas les key combos). # # Pré-conditions (vérifiées + auto-réparées par ce script) : # - ydotoold tourne dans la VM avec socket /tmp/.ydotool_socket (perm 0666) # - Le gardien clipboard (prepare_clipboard_linuxdb.sh) maintient le INSERT # dans les clipboards Wayland + X11 de la VM # # Pré-condition manuelle (le script ne peut pas la vérifier) : # - DBeaver console a le focus dans la zone éditeur SQL # # Usage : lancer juste après les clics du workflow linux_db (entre ord 7 et ord 8). set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" VM_HOST="dom@192.168.122.132" SSH_PASS="loli" SUDO_PASS="loli" YDOTOOL_SOCKET="/tmp/.ydotool_socket" ssh_vm() { SSHPASS="$SSH_PASS" sshpass -e ssh -o StrictHostKeyChecking=no "$VM_HOST" "$@" } # 1. Vérifier ydotoold (doit être lancé en amont par opérateur — voir handoff §5) # Le script ne tente PAS de le relancer car invoqué depuis le serveur systemd # qui n'a pas de TTY → sudo via stdin échoue silencieusement. if ! ssh_vm "test -S $YDOTOOL_SOCKET"; then echo "ERREUR: ydotoold (socket $YDOTOOL_SOCKET) absent dans la VM" >&2 echo "Lance manuellement depuis terminal VM (TTY) :" >&2 echo " sudo ydotoold --socket-path=$YDOTOOL_SOCKET --socket-perm=0666 &" >&2 exit 1 fi # 2. Vérifier gardien clipboard, relancer si nécessaire GUARD_OK=$(ssh_vm " if [ -f /tmp/clipboard_guard.pid ]; then P=\$(cat /tmp/clipboard_guard.pid) kill -0 \$P 2>/dev/null && echo OK || echo DEAD else echo MISSING fi ") if [ "$GUARD_OK" != "OK" ]; then echo "[setup] gardien clipboard absent/mort ($GUARD_OK), relance via prepare_clipboard_linuxdb.sh…" "$SCRIPT_DIR/prepare_clipboard_linuxdb.sh" || { echo "ERREUR: échec préparation clipboard" >&2 exit 1 } fi # 3. Envoyer Ctrl+V (scan codes : Ctrl=29, V=47) echo "[ydotool] Ctrl+V" ssh_vm "YDOTOOL_SOCKET=$YDOTOOL_SOCKET ydotool key 29:1 47:1 47:0 29:0" # 4. Délai pour que DBeaver finisse de coller (~1.6k chars) sleep 0.5 # 5. Envoyer Ctrl+Enter (scan codes : Ctrl=29, Enter=28) echo "[ydotool] Ctrl+Enter" ssh_vm "YDOTOOL_SOCKET=$YDOTOOL_SOCKET ydotool key 29:1 28:1 28:0 29:0" echo "" echo "OK INSERT collé et exécuté dans DBeaver." echo "" echo "Pour vérifier en base demo_95 :" echo " sshpass -p $SSH_PASS ssh $VM_HOST \"python3 -c 'import sqlite3; c=sqlite3.connect(\\\"/home/dom/demo_95\\\"); print(list(c.execute(\\\"SELECT id,nom_patient,date_creation FROM requalification_urgence ORDER BY id DESC LIMIT 2\\\")))'\""