From 25abd220ad9df1e7e1777bbef4f6cbdf4d8051d1 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Tue, 21 Jul 2026 00:35:26 +0200 Subject: [PATCH] fix(vnc): Bridge nutzt aria-net-Gateway statt host.docker.internal (VNC refused) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kern des "Verbinde..."-Hangs: host.docker.internal loeste zu 172.17.0.1 (docker0) auf, QEMUs VNC ist aber ans aria-net-Gateway 192.168.64.1 gebunden (dorthin bindet der Brain) → Connection refused. Die Bridge ermittelt den VNC-Host jetzt selbst per _docker_gateway() (/proc/net/route) = dasselbe Gateway wie der Brain. ARIA_VNC_HOST-Env hat weiter Vorrang. Live belegt: Bridge->192.168.64.1:5901 liefert RFB-Handshake, ->host.docker. internal:5901 (172.17.0.1) = refused. py_compile clean. Deploy: bridge rebuild. Co-Authored-By: Claude Opus 4.8 --- bridge/aria_bridge.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/bridge/aria_bridge.py b/bridge/aria_bridge.py index 51191ba..c2bea39 100644 --- a/bridge/aria_bridge.py +++ b/bridge/aria_bridge.py @@ -43,6 +43,25 @@ from openwakeword.model import Model as WakeWordModel from modes import Mode, canonical_id, detect_mode_switch, mode_from_id, should_speak + +def _docker_gateway() -> str: + """Docker-Gateway-IP (= Host-IP auf DIESEM Container-Netz, aria-net) aus + /proc/net/route. Genau die IP, an die der Brain QEMUs VNC bindet — im + Gegensatz zu host.docker.internal, das auf die Default-Bridge (docker0) + zeigt und daher die VM nicht trifft.""" + try: + import socket as _sock + import struct as _struct + with open("/proc/net/route") as f: + for line in f.readlines()[1:]: + fields = line.strip().split() + if len(fields) >= 4 and fields[1] == "00000000" and int(fields[3], 16) & 2: + return _sock.inet_ntoa(_struct.pack(" RVS (vnc_data/vnc_input, Base64-in-JSON). self._vnc_sessions: dict[str, dict] = {} - self._vnc_host: str = os.environ.get("ARIA_VNC_HOST", "host.docker.internal") + # VNC-Host: das aria-net-Gateway (dort bindet der Brain QEMUs VNC). + # host.docker.internal zeigt faelschlich auf docker0 (172.17.0.1) → refused. + self._vnc_host: str = (os.environ.get("ARIA_VNC_HOST") + or _docker_gateway() or "host.docker.internal") # Satelliten (Aussenposten in fremden Netzen). id → {location, caps, # control, last_seen}. Registrierung via sat_hello. _pending_sat: # requestId → Future (sat_devices / sat_result), analog _pending_flux.