From a718086140289528401f2ee6b8a202cef71b7bd6 Mon Sep 17 00:00:00 2001 From: Dom Date: Wed, 22 Apr 2026 18:08:10 +0200 Subject: [PATCH] fix(ORA): xdotool windowactivate QEMU + key super+d pour focus VM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pyautogui.click cliquait SUR Chrome. xdotool search --name QEMU trouve la fenêtre VM et la force au premier plan avant Win+D. Co-Authored-By: Claude Opus 4.6 (1M context) --- core/execution/observe_reason_act.py | 31 +++++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/core/execution/observe_reason_act.py b/core/execution/observe_reason_act.py index 75fa936b3..eaffe335b 100644 --- a/core/execution/observe_reason_act.py +++ b/core/execution/observe_reason_act.py @@ -926,14 +926,29 @@ Règles: pyautogui.hotkey('super', 'd') time.sleep(1.0) else: - # Pas de dialogue connu → fenêtre devant → clic focus + Win+D - print(f"🔧 [ORA/recovery/overlay] Fenêtre devant — clic focus + Win+D") - if PYAUTOGUI_AVAILABLE: - screen_w, screen_h = pyautogui.size() - pyautogui.click(screen_w // 2, screen_h // 2) - time.sleep(0.3) - pyautogui.hotkey('super', 'd') - time.sleep(1.0) + # Pas de dialogue connu → fenêtre devant → focus VM + Win+D + print(f"🔧 [ORA/recovery/overlay] Fenêtre devant — focus VM + Win+D") + try: + # Trouver la fenêtre QEMU/VM et lui donner le focus + result = subprocess.run( + ['xdotool', 'search', '--name', 'QEMU'], + capture_output=True, text=True, timeout=2 + ) + vm_windows = result.stdout.strip().split('\n') + if vm_windows and vm_windows[0]: + subprocess.run(['xdotool', 'windowactivate', vm_windows[0]], timeout=2) + time.sleep(0.5) + subprocess.run(['xdotool', 'key', 'super+d'], timeout=2) + time.sleep(1.0) + print(f"✅ [ORA/recovery/overlay] Focus VM + Win+D envoyé") + elif PYAUTOGUI_AVAILABLE: + pyautogui.hotkey('super', 'd') + time.sleep(1.0) + except Exception as e: + print(f"⚠️ [ORA/recovery/overlay] Erreur focus VM: {e}") + if PYAUTOGUI_AVAILABLE: + pyautogui.hotkey('super', 'd') + time.sleep(1.0) # --- Étape 3 : Retry l'action originale --- act_ok = self.act(decision, step_params)