Skip to content

4.20.1-1: When no monitor is connected, the Xfce desktop has no icons, background image, or context menu

Issue Description

If the user runs the Xfce desktop remotely (example, using VNC) and the PC doesn't have a monitor connected, the Xfce desktop doesn't show any icons, background image, or a right-click menu. This problem was found in Debian 13 Trixie, xfdesktop4, 4.20.1-1.

Steps to Reproduce Issue

  • Requirements
    • Another PC with a VNC client installed.
  • Setup (VNC server)
    • Install a VNC server: sudo apt-get install x11vnc
    • Manually run it in a console: x11vnc -display :0 -forever
    • Connect the 2nd PC's VNC client to the test PC.
  • Reproduce the bug
    • Unplug all video cables from the PC.
    • Open a console and run "xrandr" to confirm that no monitors are connected.
      • On my test PC, this is enough to eliminate the background image, desktop icons, and right-click menu.
    • Run "xfdesktop --quit" to stop the current instance.
    • Run "xfdesktop" to start a new instance.
      • The desktop icons, background image, etc are still not loaded.

Expected Behavior

In Debian 12 Bookworm's xfdesktop4 (4.18.1-1), the desktop icons, background image, etc are loaded, even when no monitor is connected.

Additional Information

  • Analysis

    • The problem occurs in xfdesktop_application_start().

      GList *monitors = xfw_screen_get_monitors(app->screen);
      
      for (GList *l = monitors; l != NULL; l = l->next) {
          XfwMonitor *monitor = XFW_MONITOR(l->data);
          screen_monitor_added(app->screen, monitor, app);
      }

      When a monitor is connected, xfw_screen_get_monitors() returns a list of detected monitors. The code manually calls the handler function screen_monitor_added(), which eventually creates an Xfce desktop for that monitor.

    But when there are NO monitors, xfw_screen_get_monitors() returns NULL, so screen_monitor_added() is skipped. As a result, no Xfce desktop is created, no icons, background, etc.

    Debian 12 Bookworm's xfdesktop4 (4.18.1-1)'s xfdesktop_application_start() doesn't have this code that detects monitors and adds Xfce desktops to each monitor. It always goes straight into creating a new Xfce desktop, even if there are no monitors.

  • debian bug URL

Edited by LogicFinity