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.