Skip to main content

Jupyter Remote Desktop Proxy

Binder Test Latest PyPI version Issue tracking - GitHub Help forum - Discourse

Run XFCE (or other desktop environments) on Jupyter.

This is based on https://github.com/ryanlovett/nbnovnc.

When this extension is launched it will run a Linux desktop on the Jupyter single-user server, and proxy it to your browser using VNC via Jupyter.

Screenshot of jupyter-remote-desktop-proxy XFCE desktop

VNC Server

This extension requires installing a VNC server on the system (likely in a container image). Compatibility with the latest version of TigerVNC and TurboVNC is maintained and verified with tests, but other VNC servers available in $PATH as vncserver could also work. The vncserver binary needs to accept the flags seen passed here, such as -rfbunixpath and a few others.

For an example, see the Dockerfile in this repository which installs either TigerVNC or TurboVNC together with XFCE4.

Installation

  1. Install this package itself, with pip from PyPI:

    pip install jupyter-remote-desktop-proxy
    
  2. Install the packages needed to provide a VNC server and the actual Linux Desktop environment. You need to pick a desktop environment (there are many!) - here are the packages to use TigerVNC and the light-weight XFCE4 desktop environment on Ubuntu 24.04:

    dbus-x11
    xfce4
    xfce4-panel
    xfce4-session
    xfce4-settings
    xorg
    xubuntu-icon-theme
    tigervnc-standalone-server
    

    The recommended way to install these is from your Linux system package manager of choice (such as apt).

Docker

To spin up such a notebook first build the container:

$ docker build -t $(whoami)/$(basename ${PWD}) .

Now you can run the image:

$ docker run --rm --security-opt seccomp=unconfined -p 8888:8888 $(whoami)/$(basename ${PWD})
Executing the command: jupyter notebook
[I 12:43:59.148 NotebookApp] Writing notebook server cookie secret to /home/jovyan/.local/share/jupyter/runtime/notebook_cookie_secret
[I 12:44:00.221 NotebookApp] JupyterLab extension loaded from /opt/conda/lib/python3.7/site-packages/jupyterlab
[I 12:44:00.221 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 12:44:00.224 NotebookApp] Serving notebooks from local directory: /home/jovyan
[I 12:44:00.225 NotebookApp] The Jupyter Notebook is running at:
[I 12:44:00.225 NotebookApp] http://924904e0a646:8888/?token=40475e553b7671b9e93533b97afe584fa2030448505a7d83
[I 12:44:00.225 NotebookApp]  or http://127.0.0.1:8888/?token=40475e553b7671b9e93533b97afe584fa2030448505a7d83
[I 12:44:00.225 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 12:44:00.229 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///home/jovyan/.local/share/jupyter/runtime/nbserver-8-open.html
    Or copy and paste one of these URLs:
        http://924904e0a646:8888/?token=40475e553b7671b9e93533b97afe584fa2030448505a7d83
     or http://127.0.0.1:8888/?token=40475e553b7671b9e93533b97afe584fa2030448505a7d83
*snip*

Now head to the URL shown and you will be greated with a XFCE desktop.

Note the --security-opt seccomp=unconfined parameter - this is necessary to start daemons (such as dbus, pulseaudio, etc) necessary for linux desktop to work. This is the option kubernetes runs with by default, so most kubernetes based JupyterHubs will not need any modifications for this to work.

Configuration

The VNC server will default to launching ~/.vnc/xstartup. If this file does not exist jupyter-remote-desktop-proxy will use a bundled xstartup file that launches dbus-launch xfce4-session. You can specify a custom script by setting the environment variable JUPYTER_REMOTE_DESKTOP_PROXY_XSTARTUP.

Limitations

  1. Desktop applications that require access to OpenGL are currently unsupported.

Release files for jupyter-remote-desktop-proxy 3.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jupyter-remote-desktop-proxy 3.0.1
File Size Uploaded
jupyter_remote_desktop_proxy-3.0.1.tar.gz 402.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jupyter-remote-desktop-proxy 3.0.1
File Interpreter ABI Platform
jupyter_remote_desktop_proxy-3.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 806.8 kB

Release files / jupyter_remote_desktop_proxy-3.0.1.tar.gz

Download URL jupyter_remote_desktop_proxy-3.0.1.tar.gz
Size 402.5 kB
Tags Source
SHA-256 checksum
How to use checksums
92c428621464c9f7b51694c8b18aa60ba7e39266cb4af8f420d13b498f1b1cd9
BLAKE2b-256 checksum
How to use checksums
4efce7eba005a781526de713dbc362dcfa88134276cf5214de4001d686640ed2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 11, 2025.

Transparency log

Release files / jupyter_remote_desktop_proxy-3.0.1-py3-none-any.whl

Download URL jupyter_remote_desktop_proxy-3.0.1-py3-none-any.whl
Size 404.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da305e5980c87235330a6576e4fb8469753a8196fbda39acd6e7aa521c6a7942
BLAKE2b-256 checksum
How to use checksums
3c821406638818021e2a28d2b247dc4bda807d8cb483aa60557056307904c013
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 11, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

3.0.1 This release

2 release files

3.0.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.2.0

2 release files

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page