# Handoff session 2026-05-16 matinée — Contournement Ctrl+V NoMachine via ydotool **Auteur** : Claude (session 10:00 → 15:10 CEST) **Suite de** : `2026-05-16_handoff_demo3_workflow.md` (handoff du 16 mai 02:04, session 15→16 mai) **Objectif** : démo vidéo "demo 95" jeudi 21 mai 2026 (J-5) --- ## 1. Problème résolu Bloqueur n°1 du handoff précédent (« clics ne traversent pas NoMachine ») : partiellement résolu. - **Clics Léa via NoMachine** : OK (traversent normalement, propagation pynput → SendInput Windows → NoMachine → VM) - **Key combos avec Ctrl (Ctrl+V, Ctrl+Enter)** : **bloqués par NoMachine en mode "passive grab" par défaut** Cause root identifiée (agent de recherche web) : NoMachine Player Windows en passive grab intercepte/avale la touche Ctrl quand "Grab the keyboard input" n'est pas explicitement activé. Source : [KB NoMachine AR01P00959](https://kb.nomachine.com/AR01P00959), [TR08R09811](https://www.nomachine.com/TR08R09811). Solution 1 testée (chercher l'option dans le menu NoMachine 9.5.7) : **option introuvable dans l'UI**. Solution 2 retenue : **bypasser entièrement NoMachine pour le paste/execute** en injectant les touches *directement dans la VM* via `ydotool` (compatible Wayland natif Ubuntu 26.04). --- ## 2. Architecture finale ``` [Léa Windows] --pynput--> [clics Windows] --NoMachine--> [VM Ubuntu DBeaver] (clics OK) (focus zone éditeur SQL) [hôte Linux] --SSH--> [VM Ubuntu] prepare_clipboard.sh wl-copy + xsel (gardien boucle) → clipboards Wayland + X11 remplis paste_and_execute.sh ydotool key 29:1 47:1 47:0 29:0 → Ctrl+V dans VM (bypasse NoMachine) ydotool key 29:1 28:1 28:0 29:0 → Ctrl+Enter dans VM ``` --- ## 3. Livrables créés ### Scripts (`~/ai/rpa_vision_v3/scripts/`) | Fichier | Rôle | |---|---| | `payload_insert_morel.sql` | Payload INSERT SQL (1632 bytes, source de vérité) extrait du backup DB | | `prepare_clipboard_linuxdb.sh` | Pousse payload sur VM, lance gardien boucle qui re-pousse clipboard Wayland + X11 toutes les 0.5s (sinon écrasé par sélection terminal/etc.) | | `paste_and_execute_linuxdb.sh` | Vérifie ydotoold + gardien, déclenche Ctrl+V puis Ctrl+Enter via ydotool dans la VM | ### Modifications workflows.db (3 backups successifs) ``` workflows.db.backup_2026-05-16_102755_avant_clipboard_relay (avant 1er UPDATE) workflows.db.backup_2026-05-16_111541_avant_rawkeys (tentative raw_keys, abandonnée) workflows.db.backup_2026-05-16_150853_avant_suppr_steps_8_9 (avant suppression key_combos) ``` État final workflow `linux_db` (`wf_0786343fb2b7_1778879244`) : **7 steps**, tous des clics ``` 0 double_click_anchor LINUX_demo 1 click_anchor 2 click_anchor 3 wait_for_anchor 4 click_anchor 5 click_anchor 6 click_anchor ``` Les ex-steps 7 (Ctrl+V) et 8 (Ctrl+Enter) ont été **supprimés** car remplacés par `paste_and_execute_linuxdb.sh` lancé à la main. ### DB demo_95 (VM) Nettoyée : 3 rows propres (DURAND, MARTIN, PETIT), AUTOINCREMENT reset à 3. Prochain INSERT MOREL aura id=4. --- ## 4. Dépendances installées dans la VM (Ubuntu 26.04 Wayland) ``` wl-clipboard (wl-copy/wl-paste — clipboard Wayland) openssh-server (SSH depuis Linux hôte) xsel (xsel — clipboard X11/XWayland) x11-xserver-utils (xhost — autoriser connexions X11 locales) ydotool (1.0.4-3 — injection clavier uinput, Wayland-compatible) ``` Démarrage `ydotoold` daemon (pas de service systemd fourni par le paquet Ubuntu) : ```bash echo 'loli' | sudo -S sh -c 'nohup setsid ydotoold --socket-path=/tmp/.ydotool_socket --socket-perm=0666 >/var/log/ydotoold.log 2>&1 /dev/null | head -1); \ DISPLAY=:0 XAUTHORITY=\$XAUTH xhost +local:" ``` 2. **prepare_clipboard_linuxdb.sh** (relance gardien clipboard + daemon ydotoold via paste_and_execute si nécessaire) --- ## 6. Procédure démo finale ```bash # AVANT la démo (1 fois, à froid après reboot) : ~/ai/rpa_vision_v3/scripts/prepare_clipboard_linuxdb.sh # Pour chaque take de la démo : # 1. Lancer workflow linux_db dans VWB (bouton bleu "→ Windows") # 2. Attendre que Léa termine les 7 steps (clics visibles dans la VM via NoMachine) # 3. Dans un terminal Linux hôte : ~/ai/rpa_vision_v3/scripts/paste_and_execute_linuxdb.sh # → INSERT collé + exécuté instantanément dans DBeaver (visible à l'écran) ``` Vérif post-démo (compter rows) : ```bash sshpass -p loli ssh dom@192.168.122.132 \ 'python3 -c "import sqlite3; c=sqlite3.connect(\"/home/dom/demo_95\"); print(list(c.execute(\"SELECT id,nom_patient,date_creation FROM requalifications_t2a ORDER BY id DESC LIMIT 2\")))"' ``` Reset pour nouveau take : ```bash sshpass -p loli ssh dom@192.168.122.132 \ 'python3 -c " import sqlite3 c = sqlite3.connect(\"/home/dom/demo_95\") c.execute(\"DELETE FROM requalifications_t2a WHERE id > 3\") c.execute(\"UPDATE sqlite_sequence SET seq = 3 WHERE name = '\''requalifications_t2a'\''\") c.commit()"' ``` --- ## 7. Dette technique créée par cette session 1. **Couplage hôte ↔ VM dur** : password `loli` en clair dans les scripts (`SSH_PASS`, `SUDO_PASS`). À remplacer par clé SSH + sudoers NOPASSWD pour ydotoold. Hors scope J-5. 2. **Gardien clipboard boucle 0.5s** : consomme CPU négligeable mais pas propre. À remplacer post-démo par un mécanisme dbus signal ou systemd path unit qui re-pousse seulement sur événement "clipboard cleared". 3. **paste_and_execute lancé à la main** : pas intégré au workflow VWB. Pour intégration auto post-démo, deux options : - **A** : ajouter à Léa un nouveau action_type `shell_remote` (modif executor.py côté Windows + déploiement SCP) - **B** : modifier `replay_engine.py` côté serveur pour exécuter localement (Linux hôte) certains step types au lieu de dispatcher à Léa 4. **xhost +local:** : large. À remplacer par xhost SI:localuser:dom post-démo. 5. **AUTOINCREMENT id=9** déjà consommé par les tests : reset à 3 pour la démo, mais à vérifier après chaque take. --- ## 8. État infra runtime - Serveur `rpa-streaming` : actif (PID 308418 mentionné dans handoff précédent) - ydotoold daemon : actif côté VM, socket `/tmp/.ydotool_socket` (0666) - Gardien clipboard : actif côté VM (PID dans `/tmp/clipboard_guard.pid`) - 3 clipboards remplis : - Wayland VM (1633 bytes via wl-copy) - X11 VM (1632 bytes via xsel) - Windows (1632 bytes via Set-Clipboard — peut nécessiter re-push manuel si vidé) --- ## 9. Sessions du jour (16 mai) - 06:52 → 07:55 : session reprise courte (fermée par Dom par erreur), test workflow → blocage Ctrl+V - 10:00 → 15:10 : session diagnostic+fix complet - Diagnostic clipboard Wayland ≠ X11 (XWayland ne synchronise pas) - Fix : gardien double-write wl-copy + xsel + xhost +local: - Diagnostic NoMachine passive grab mange Ctrl - Fix : bypass via ydotool en SSH dans la VM - Workflow linux_db simplifié (suppression key_combos)