@@ -48,6 +48,10 @@ def __init__(self, agent_defaults: Dict[str, Any]):
4848 self .font_family = console_defaults .get ("font_family" ) or "Monospace"
4949 self .font_size = int (console_defaults .get ("font_size" , 10 ))
5050 self .read_only = bool (console_defaults .get ("read_only" , False ))
51+ self .direct_proxy = bool (console_defaults .get ("direct_proxy_enabled" , False ))
52+ if self .direct_proxy :
53+ self .bind_host = "127.0.0.1"
54+ self .require_password = not self .direct_proxy
5155
5256 self .tmux = TmuxManager ()
5357
@@ -58,7 +62,7 @@ def ensure_console(self, vm_name: str) -> Dict[str, Any]:
5862 current_state = self ._load_state (vm_state_path )
5963 if current_state and self ._state_active (current_state ):
6064 logger .debug ("Reusing existing VNC console for %s (state=%s)" , vm_name , current_state )
61- return self . _response_payload ( current_state )
65+ return current_state
6266
6367 if current_state :
6468 logger .debug ("Cleaning up stale VNC console for %s" , vm_name )
@@ -70,8 +74,11 @@ def ensure_console(self, vm_name: str) -> Dict[str, Any]:
7074 raise RuntimeError (f"tmux session { session_name } not found; VM console is not available" )
7175
7276 port = self ._allocate_port ()
73- password = self ._generate_password ()
74- password_file = self ._write_password_file (vm_name , password )
77+ password = None
78+ password_file = None
79+ if self .require_password :
80+ password = self ._generate_password ()
81+ password_file = self ._write_password_file (vm_name , password )
7582 display , xvfb_proc = self ._start_xvfb (vm_name )
7683 xterm_proc = self ._start_xterm (display , vm_name , session_name )
7784 x11vnc_proc = self ._start_x11vnc (vm_name , display , port , password_file )
@@ -85,14 +92,15 @@ def ensure_console(self, vm_name: str) -> Dict[str, Any]:
8592 "x11vnc_pid" : x11vnc_proc .pid ,
8693 "port" : port ,
8794 "password" : password ,
88- "password_file" : str (password_file ),
95+ "password_file" : str (password_file ) if password_file else None ,
8996 "bind_host" : self .bind_host ,
9097 "session_name" : session_name ,
98+ "direct_proxy" : self .direct_proxy ,
9199 }
92100 self ._write_state (vm_state_path , state )
93101 logger .debug ("VNC console state stored for %s: %s" , vm_name , state )
94102 self ._monitor_console (vm_name , state )
95- return self . _response_payload ( state )
103+ return state
96104
97105 def stop_console (self , vm_name : str ) -> Dict [str , Any ]:
98106 """Terminate VNC bridge for the VM."""
@@ -150,14 +158,7 @@ def _state_active(self, state: Dict[str, Any]) -> bool:
150158 return True
151159
152160 def _response_payload (self , state : Dict [str , Any ]) -> Dict [str , Any ]:
153- return {
154- "status" : "success" ,
155- "vm_name" : state .get ("vm_name" ),
156- "host" : state .get ("bind_host" , self .bind_host ),
157- "port" : int (state .get ("port" )),
158- "password" : state .get ("password" ),
159- "created_at" : state .get ("created_at" ),
160- }
161+ return state
161162
162163 def _cleanup_state (self , state : Dict [str , Any ]) -> None :
163164 for key in ("x11vnc_pid" , "xterm_pid" , "xvfb_pid" ):
@@ -339,15 +340,18 @@ def _start_x11vnc(self, vm_name: str, display: str, port: int, password_file: Pa
339340 display ,
340341 "-rfbport" ,
341342 str (port ),
342- "-rfbauth" ,
343- str (password_file ),
344343 "-once" ,
345344 "-shared" ,
346345 "-noxdamage" ,
347346 "-nolookup" ,
348347 "-o" ,
349348 str (log_file ),
350349 ]
350+ if self .direct_proxy :
351+ cmd .append ("-localhost" )
352+ cmd .append ("-nopw" )
353+ elif password_file :
354+ cmd .extend (["-rfbauth" , str (password_file )])
351355 if self .bind_host not in ("127.0.0.1" , "::1" ):
352356 cmd .extend (["-listen" , self .bind_host ])
353357 else :
0 commit comments