A "Remote desktop tunnel" entry under SSH configuration. It lists the targets, resolves them, and composes the full command -- nothing to fill in. todo.py runs on the libvirt HOST; the tunnel starts from the workstation. It cannot open it, but it alone knows the VM's private IP, its port and the address through which it was reached. That last one comes from SSH_CONNECTION, whose third field is exactly the server address used -- far safer than a "hostname" that may resolve to nothing outside. When ~/.ssh/config already carries the entry, the tunnel takes it: "ssh -N -L 5902:localhost:5901 <vm>". ProxyJump makes the route and "localhost" means the VM's OWN loopback, so the tunnel survives an IP change. That config is also the right source of targets, not the local libvirt: a graphical VM is often nested, and virsh would only ever list the orchestrator. Two details: the hypervisor console needs VNC bound to the loopback, as "listen=none" opens no socket at all; and two menu entries had no icon. --- FR --- Une entrée « Tunnel bureau distant » sous Configuration SSH. Elle liste les cibles, les résout, et compose la commande complète — rien à remplir. todo.py tourne sur l'HÔTE libvirt ; le tunnel, lui, part du poste de travail. Il ne peut donc pas l'ouvrir, mais il est le seul à connaître l'IP privée de la VM, son port et l'adresse par laquelle on l'a joint. Cette dernière vient de SSH_CONNECTION, dont le troisième champ est exactement l'adresse serveur utilisée — bien plus sûr qu'un « hostname » qui peut ne rien résoudre depuis l'extérieur. Quand ~/.ssh/config porte déjà l'entrée, le tunnel l'emprunte : « ssh -N -L 5902:localhost:5901 <vm> ». Le ProxyJump fait la route et « localhost » désigne le bouclage DE LA VM, si bien que le tunnel survit à un changement d'IP. Ce fichier est aussi la bonne source de cibles, pas le libvirt local : une VM graphique est souvent imbriquée, et virsh ne listerait jamais que l'orchestrateur. Deux détails : la console de l'hyperviseur exige un VNC sur la boucle locale, « listen=none » n'ouvrant aucun socket ; et deux entrées de menu n'avaient pas d'icône. Assisted-by: Claude Opus 5 |
||
|---|---|---|
| .. | ||
| database_manager.py | ||
| kdbx_manager.py | ||
| logo_ascii.txt | ||
| migration_form.py | ||
| migration_stats.py | ||
| qemu_deploy_form.py | ||
| qemu_install_monitor.py | ||
| README.base.md | ||
| README.fr.md | ||
| README.md | ||
| source_todo.sh | ||
| textual_setup.py | ||
| todo.json | ||
| todo.py | ||
| todo_example.json | ||
| todo_file_browser.py | ||
| todo_i18n.py | ||
| todo_prefs.py | ||
| todo_telemetry.py | ||
| todo_upgrade.py | ||
| version_manager.py | ||
TODO is an assistant robot to use ERPLibre
Execute it with ./script/todo/todo.py or make todo.
For a new project, copy todo_example.json to private/todo/todo_override.json | private/todo/todo_override_private.json and edit it.
The mail/ package is the mail client reachable from Assistant > Mail:
several IMAP/SMTP accounts, a local cache, and a Textual TUI. See
../../doc/EMAIL.md.