fix(typing): presse-papier en priorité (fonctionne avec spice-vdagent)
Some checks failed
security-audit / Bandit (scan statique) (push) Successful in 12s
security-audit / pip-audit (CVE dépendances) (push) Successful in 10s
security-audit / Scan secrets (grep) (push) Successful in 7s
tests / Lint (ruff + black) (push) Successful in 15s
tests / Tests unitaires (sans GPU) (push) Failing after 14s
tests / Tests sécurité (critique) (push) Has been skipped
Some checks failed
security-audit / Bandit (scan statique) (push) Successful in 12s
security-audit / pip-audit (CVE dépendances) (push) Successful in 10s
security-audit / Scan secrets (grep) (push) Successful in 7s
tests / Lint (ruff + black) (push) Successful in 15s
tests / Tests unitaires (sans GPU) (push) Failing after 14s
tests / Tests sécurité (critique) (push) Has been skipped
Remet xclip+Ctrl+V comme méthode prioritaire. Les spice tools sont installés dans la VM → le presse-papier est partagé → pas de problème de mapping clavier. xdotool envoie des événements synthétiques X11 que spice/QEMU traite différemment des vraies frappes (: → M). Citrix partage aussi le clipboard nativement → même méthode en prod. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -78,26 +78,16 @@ def safe_type_text(text):
|
||||
"""Saisie de texte compatible VM/Citrix et claviers AZERTY/QWERTY.
|
||||
|
||||
Priorité :
|
||||
1. xdotool type → frappes clavier réelles, traverse QEMU/Citrix/RDP
|
||||
2. Presse-papier (xclip) + Ctrl+V → fallback local uniquement
|
||||
3. pyautogui.write() → dernier recours
|
||||
1. Presse-papier (xclip) + Ctrl+V → fiable, traverse spice/Citrix/RDP
|
||||
2. xdotool type → fallback si clipboard échoue
|
||||
3. pyautogui.write() → dernier recours
|
||||
"""
|
||||
import shutil
|
||||
import pyautogui
|
||||
|
||||
# Méthode 1 : xdotool key par caractère (frappes clavier réelles)
|
||||
# xdotool type envoie des scancodes QWERTY que les VM AZERTY interprètent
|
||||
# mal (: → M, / → !, etc.). xdotool key avec les noms de keysym est
|
||||
# indépendant du layout et traverse QEMU/Citrix/RDP correctement.
|
||||
if shutil.which('xdotool'):
|
||||
try:
|
||||
_xdotool_type_by_keysym(text)
|
||||
print(f" ✅ Saisie via xdotool key ({len(text)} car.)")
|
||||
return
|
||||
except Exception as e:
|
||||
print(f" ⚠️ xdotool key échoué: {e}")
|
||||
|
||||
# Méthode 2 : Presse-papier (fonctionne seulement en local, pas en VM)
|
||||
# Méthode 1 : Presse-papier (le plus fiable)
|
||||
# Traverse les VM via spice-vdagent et les sessions Citrix/RDP
|
||||
# via le clipboard partagé natif. Pas de problème de layout clavier.
|
||||
xclip = shutil.which('xclip')
|
||||
if xclip:
|
||||
try:
|
||||
@@ -117,6 +107,19 @@ def safe_type_text(text):
|
||||
except Exception as e:
|
||||
print(f" ⚠️ xclip échoué: {e}")
|
||||
|
||||
# Méthode 2 : xdotool type (fallback si clipboard échoue)
|
||||
if shutil.which('xdotool'):
|
||||
try:
|
||||
subprocess.run(
|
||||
['xdotool', 'type', '--delay', '0', '--clearmodifiers', '--', text],
|
||||
timeout=max(30, len(text) * 0.05),
|
||||
check=True
|
||||
)
|
||||
print(f" ✅ Saisie via xdotool type ({len(text)} car.)")
|
||||
return
|
||||
except Exception as e:
|
||||
print(f" ⚠️ xdotool type échoué: {e}")
|
||||
|
||||
# Méthode 3 : pyautogui (dernier recours — problèmes AZERTY possibles)
|
||||
print(" ⚠️ Saisie via pyautogui.write() (AZERTY non garanti)")
|
||||
pyautogui.write(text)
|
||||
|
||||
Reference in New Issue
Block a user