add: every launch of a listed app lands in bypass (#67) #112
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/bypass-every-launch"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #67.
Problem: an app on the bypass list was only bypassed when launched from the GUI's list button (or the raw-cgroup console trick). Launching the same app from the desktop menu, taskbar or a terminal ignored the list entirely — the opposite of the mark-once UX. The one architecture that must not fix this is a process-event watcher (eBPF/proc-events); placement has to stay deterministic at launch time.
Fix: launcher shims, per the candidate design on the issue.
aqomui-bypass <command>CLI (aqomui/launcher.py, new console script): joins the bypass cgroup and execs the command in place, so terminals/launchers see the pid they started. A forked child runs the existingreclaim_straysElectron sweep. When the cgroup is absent — the service deletes it on teardown — it degrades to a plain exec: a listed app still starts with the VPN down, and joining a rule-less cgroup is inert anyway.~/.local/share/applications/<id>.desktop(XDG precedence shadows the system entry) with everyExec=wrapped by the CLI —[Desktop Action]sections included — andDBusActivatableforced off so launchers can't skip Exec. Marker keyX-Aqomui-Bypassguards all destructive ops: removal only ever deletes marker files, and a picked entry that was itself user-local is backed up and restored on removal. Overrides regenerate from their sources at every GUI start (absorbs package updates, clears uninstalled apps). The CLI is written by absolute path when resolvable (pip user installs aren't on launcher PATH), self-healing via the same regeneration.bypass_tunnel/sweep_bypassand the temp-script machinery are deleted. The app picker skips aqomui's own overrides so a wrapper never wraps a wrapper.aqomui-bypassterminal usage. Kept: second-tunnel paragraphs, DNS behavior, "membership survives reconnects, no restarts needed".Deferred, still tracked on #67's comments: exclude/include/bypass mode split, folding bypass into the one-page UX rework, auto-connect for the bypass server — all belong to the UX-overhaul version, not 0.9.1. Restart prompting (detecting a running listed app) is approximated by the unconditional "restart it if it is running now" notification; real process detection from Exec lines is guesswork across flatpak/wrappers and didn't seem worth it.
Verification: 224 tests pass (18 new in
tests/test_launcher.py: override wrapping incl. actions/DBusActivatable/TryExec, double-wrap refusal, backup/restore, marker-guarded removal, refresh regenerate/clear/skip-bad, CLI join/degrade/exec/127/usage). ruff + compileall clean. Override generation smoke-tested against a real system .desktop. Live round: add an app in the tab → check~/.local/share/applications/→ launch it from the desktop menu with bypass up → its traffic should show the physical interface; remove it → override gone (menu entry back to stock).🤖 Generated with Claude Code
99bfc46cc7c4bc104c68