DGX Dashboard JupyterLab: Multi-User Mapping Requires Manual YAML Edit and Service Restart (Enhancement Request)

Platform:

  • Hardware: NVIDIA DGX Spark (GB10)

  • OS: Ubuntu 24.04 LTS (Debian-based)

  • DGX Dashboard: /opt/nvidia/dgx-dashboard-service/ build (Oct 2025 release)

  • Use Case: Multi-user lab environment with individual Linux logins sharing a single Spark node

  • Logs:

    pre-workaround.log (1.5 MB)

    post-workaround.log (169.2 KB)


Problem Description

When multiple Linux users are added to a shared DGX Spark, DGX Dashboard authentication works correctly, but JupyterLab fails to start for any new user that is not explicitly listed in:

/opt/nvidia/dgx-dashboard-service/jupyterlab_ports.yaml

The dashboard returns an error similar to:

username "<newuser>" not found in jupyterlab_ports.yaml file

This occurs even when /home/<user>/jupyterlab/ exists (as required by DGX Dashboard).


Reproduction Steps

  1. Create a new system user and grant sudo access:

    sudo adduser ryan
    sudo usermod -aG sudo ryan
    
    
  2. Log into DGX Dashboard using that username/password.
    → Login succeeds, but JupyterLab fails to spawn.

  3. Examine /opt/nvidia/dgx-dashboard-service/jupyterlab_ports.yaml:

    users:
        - username: nobody
          jupyterlab_port: 11001
        - username: is-win
          jupyterlab_port: 11002
        # <new user missing>
    
    
  4. Append the new user manually:

        - username: ryan
          jupyterlab_port: 11003
    
    
  5. Reboot DGX Spark or restart DGX Dashboard service:

    sudo systemctl restart dgx-dashboard-service
    
    
  6. JupyterLab now spawns successfully.


Observed Behavior

  • Without manual YAML edit, JupyterLab launch fails.

  • Restarting dgx-dashboard-service is required for the new mapping to load.

  • Full reboot is not required.

  • The following directory rule must be respected:

    • /home/<user>/jupyterlab/ must exist

    • /home/<user>/jupyterlab/<workingdir>/ must not exist (Dashboard creates it automatically)


Expected Behavior

For multi-user research environments:

  • DGX Dashboard should dynamically populate jupyterlab_ports.yaml when a new authenticated user first launches JupyterLab, assigning a free port automatically.

  • Manual YAML edits and service restarts should not be necessary.


Proposed Enhancement

  1. Automatic user registration
    On first login, DGX Dashboard detects new system usernames and appends a new entry to jupyterlab_ports.yaml using the next available port.

  2. Hot reload of configuration
    Enable live reload of the YAML mapping without requiring a service restart.

  3. Validation helper
    Provide an admin CLI command, e.g.:

    dgx-dashboard users add <username> [--port <port>]
    dgx-dashboard users list
    
    

    to streamline multi-user provisioning.


Workaround (Verified)

users:
    - username: nobody
      jupyterlab_port: 11001
    - username: is-win
      jupyterlab_port: 11002
    - username: ryan
      jupyterlab_port: 11003

Restarting dgx-dashboard-service applies the change immediately. Note that this may not be the only place fixes are needed, though it appears to be enough to get the JupyterLab server to launch on other accounts.


Impact

Multi-user labs (universities, research groups, and shared HPC environments) currently must manually edit a privileged system file for every new account, which complicates administration and introduces potential configuration drift between updates.


Thank you for considering this enhancement request.
This change would greatly improve out-of-the-box usability for academic and enterprise teams sharing DGX Spark systems. It’s much more organized for us to create our own logins rather than share a common one.

Each aditional user needs sudo access, otherwise /opt/nvidia/dgx-dashboard-service/jupyterlab_ports.yaml fails to update. However, this could be a security issue.

Excellent addition. We generally run the below workflow, which isn’t a problem for our lab’s PhD students, however, yes; it requires elevated access. Establishing a permissions ledger would be ideal.

# Replace <you> with your username
sudo adduser <you>
sudo usermod -aG sudo <you>           # admin rights
sudo usermod -aG docker <you>         # run docker without sudo (log out/in to take effect)

You should be able to just restart the service after a new user is created in the OS. The user should get added to the ports file (no need to manual edit) on service start. Regardless, your feedback is valid and this will be improved in future updates.

Also you should be able to choose any directory within your home dir. ~/jupyterlab is just the default. You can nest like you are suggesting or choose something else.

1 Like

I recently attempted replicating this test with a new user in our lab, and found the yaml file did not update. Perhaps its because the user has no way to indicate a port assignment through the GUI?

With the workaround I indicated, it isn’t an issue, though I wanted to follow up with findings. Thanks!

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.