Configuring Nvidia Jetson Orin Nano Dev Kit for Flexible Display Output

Issue Overview

Users of the Nvidia Jetson Orin Nano Dev Kit are experiencing difficulties in configuring the device to switch between a low-resolution dummy monitor for VNC access when no physical display is connected, and a higher resolution output when a DisplayPort cable is plugged in. This issue is particularly relevant for applications where the device needs to operate headlessly (e.g., on autonomous drones) but also requires occasional direct monitor connection for development or debugging purposes.

The problem is exacerbated by differences in behavior compared to older models like the Xavier NX, suggesting changes in the Orin Nano’s display handling. Users have reported challenges in achieving hot-plugging functionality and issues with automatic display detection.

Possible Causes

  1. Configuration Limitations: The default configuration may not support automatic switching between physical and virtual displays.

  2. Software Changes: Updates in the Jetpack or Ubuntu versions used on the Orin Nano may have altered display handling mechanisms.

  3. Hardware Differences: The Orin Nano’s hardware architecture might differ from previous models, affecting display detection and configuration.

  4. Xorg Configuration Issues: Incorrect or incomplete Xorg configuration files may prevent proper display switching.

  5. Timing Issues: The script for detecting display connections may run before all necessary system components are fully initialized.

Troubleshooting Steps, Solutions & Fixes

  1. Implement a Custom Switching Script:
    Create a script that checks for display connections and adjusts the configuration accordingly. Here’s an example implementation:

    a. Create a dummy configuration file /etc/X11/xorg.conf.d/97-dummy.conf.disabled:

    Section "Device"
        Identifier "dummy_videocard"
        Driver "dummy"
        Option "IgnoreEDID" "1"
    EndSection
    
    Section "Monitor"
        Identifier "dummy_monitor"
        HorizSync 28.0-80.0
        VertRefresh 48.0-75.0
        Modeline "1280x720" 74.50 1280 1344 1472 1664 720 723 728 748 +HSync +VSync
    EndSection
    
    Section "Screen"
        Identifier "dummy_screen"
        Device "dummy_videocard"
        Monitor "dummy_monitor"
        DefaultDepth 24
        SubSection "Display"
            Depth 24
            Modes "1280x720"
        EndSubSection
    EndSection
    

    b. Create a script /usr/local/bin/vnc-display.sh:

    #!/bin/bash
    LOG_FILE="/var/log/vnc_script.log"
    DUMMY_DISABLED="/etc/X11/xorg.conf.d/97-dummy.conf.disabled"
    
    if [ -e $DUMMY_DISABLED ]; then
      if xrandr | grep -q "DP-[0-9]\+\(\.[0-9]\+\)\? connected"; then
        echo "display port was detected" >> "$LOG_FILE"
        mv /etc/X11/xorg.conf.d/97-dummy.conf /etc/X11/xorg.conf.d/97-dummy.conf.disabled
      else
        echo "display port was not detected" >> "$LOG_FILE"
        mv /etc/X11/xorg.conf.d/97-dummy.conf.disabled /etc/X11/xorg.conf.d/97-dummy.conf
        sleep 30
        service gdm restart
        sleep 10
      fi  
    else
      mv /etc/X11/xorg.conf.d/97-dummy.conf /etc/X11/xorg.conf.d/97-dummy.conf.disabled
    fi
    

    c. Add a .desktop file to ~/.config/autostart:

    [Desktop Entry]
    Type=Application
    Exec=sudo /usr/local/bin/vnc-display.sh
    Hidden=false
    NoDisplay=false
    X-GNOME-Autostart-enabled=true
    Name[en_CA]=monitor check
    Name=monitor check
    Comment[en_CA]=Check if display port monitor is plugged in and enable dummy for VNC if not
    Comment=Check if display port monitor is plugged in and enable dummy for VNC if not
    
  2. Use xrandr for Resolution Setting:
    If no monitor is connected, you can set a specific resolution using xrandr:

    export DISPLAY=:0
    xrandr --fb 1920x1080
    

    Adjust the resolution as needed.

  3. Consider Using a Dummy Display Plug:
    A hardware solution involves using a Virtual Display Port Dummy Plug. This device emulates a connected display, allowing the system to configure output without software intervention.

  4. Restart Display Manager:
    After configuring the correct /etc/X11/xorg.conf, you can restart the display manager:

    sudo systemctl restart display-manager
    
  5. VNC Server Configuration:
    If using VNC, ensure it’s properly configured to start automatically. Create a .desktop file in ~/.config/autostart to launch the VNC server.

  6. System Update:
    Ensure your Jetson Orin Nano is running the latest Jetpack and L4T versions, as updates may include fixes for display-related issues.

  7. Monitor Connection Detection:
    Use xrandr to detect monitor connections in your scripts or applications.

While these solutions provide workarounds, it’s important to note that achieving seamless hot-plugging functionality may require further investigation or potential updates from NVIDIA. Users are encouraged to report persistent issues to NVIDIA support for potential inclusion in future software updates.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *