@@ -12,8 +12,27 @@ def setup_websockify():
12
12
"vncserver executable not found, please install a VNC server"
13
13
)
14
14
15
+ # TurboVNC and TigerVNC share the same origin and both use a Perl script
16
+ # as the executable vncserver. We can determine if vncserver is TigerVNC
17
+ # by searching tigervnc string in the Perl script.
18
+ #
19
+ # The content of the vncserver executable can differ depending on how
20
+ # TigerVNC and TurboVNC has been distributed. Below are files known to be
21
+ # read in some situations:
22
+ #
23
+ # - https://github.com/TigerVNC/tigervnc/blob/v1.13.1/unix/vncserver/vncserver.in
24
+ # - https://github.com/TurboVNC/turbovnc/blob/3.1.1/unix/vncserver.in
25
+ #
26
+ with open (vncserver ) as vncserver_file :
27
+ vncserver_file_text = vncserver_file .read ().casefold ()
28
+ is_turbovnc = "turbovnc" in vncserver_file_text
29
+
15
30
# {unix_socket} is expanded by jupyter-server-proxy
16
- vnc_args = [vncserver , '-rfbunixpath' , '{unix_socket}' ]
31
+ vnc_args = [vncserver , '-rfbunixpath' , "{unix_socket}" , "-rfbport" , "-1" ]
32
+ if is_turbovnc :
33
+ # turbovnc doesn't handle being passed -rfbport -1, but turbovnc also
34
+ # defaults to not opening a TCP port which is what we want to ensure
35
+ vnc_args = [vncserver , '-rfbunixpath' , "{unix_socket}" ]
17
36
18
37
xstartup = os .getenv ("JUPYTER_REMOTE_DESKTOP_PROXY_XSTARTUP" )
19
38
if not xstartup and not os .path .exists (os .path .expanduser ('~/.vnc/xstartup' )):
0 commit comments