@@ -12,8 +12,27 @@ def setup_websockify():
1212 "vncserver executable not found, please install a VNC server"
1313 )
1414
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+
1530 # {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}" ]
1736
1837 xstartup = os .getenv ("JUPYTER_REMOTE_DESKTOP_PROXY_XSTARTUP" )
1938 if not xstartup and not os .path .exists (os .path .expanduser ('~/.vnc/xstartup' )):
0 commit comments