# Option 13: Desktop & Display ### 1. What does this component do? This component manages both desktop environments and display managers. Desktop Environment installs XFCE/LXDE with polkit integration; Display Manager handles LightDM, GDM3, SDDM, and greetd (login screens). It handles autologin setup, user list visibility toggles, and a specific Wayland override for NVIDIA GPUs. Desktop Environment management supports **XFCE** (full / minimal / Wayland `labwc` on Trixie / custom) and **LXDE** (full / core), with polkit rules for suspend/backlight. ### 2. Logical Flow of Execution The execution logic is divided into five functional blocks: **Block 1 — Desktop & Display Menu** - The main menu (`manage_desktop_display` in `desktop_display.sh`) offers two primary options: `1 Desktop Environment` and `2 Display Manager` (plus `3 Back to main menu`). - **Desktop Environment** opens `desktop_environment_menu` — XFCE or LXDE. - **Display Manager** opens `display_manager_menu` — LightDM, GDM3, SDDM, and greetd (12/13 only). - **Available Managers:** - LightDM (available on all Debian versions). - GDM3 (available on all Debian versions). - SDDM (available on all Debian versions). - greetd (available only on Debian 12 and 13). - Each selected manager opens its own dedicated configuration submenu. **Block 2 — LightDM Configuration** - A checklist menu presents three options: 1. Install LightDM + GTK Greeter (auto-selects the display manager via debconf-set-selections). 2. Enable user list at login screen (writes `greeter-hide-users=false` to a configuration file in `.conf.d`). 3. Enable autologin for current user (uncomments `autologin-user` and sets timeout to 0 in the main config). - **Idempotency:** The script checks if `lightdm` and `lightdm-gtk-greeter-settings` are already installed before attempting installation, skipping redundant steps. **Block 3 — GDM3 Configuration** - A checklist menu presents up to four options: 1. Install/Reinstall gdm3 (auto-selects via debconf). 2. Toggle user list visibility (toggles `disable-user-list` in greeter.dconf-defaults). 3. Configure autologin (prompts for a username via whiptail inputbox to set in daemon.conf). 4. Force Enable Wayland on NVIDIA (Bookworm/Trixie + NVIDIA only). - **Mechanism:** Creates or removes a symlink: `/etc/udev/rules.d/61-gdm.rules` → `/dev/null`. - **Purpose:** This disables the udev rule that blocks GDM from using Wayland on NVIDIA GPUs. - **Risk Warning:** Displays a warning that this may break graphics or cause instability. - **Toggle Behavior:** If the symlink exists, removing it reverts to default behavior; if not present, creating it enables the override. **Block 4 — SDDM Configuration** - A submenu offers two options: 1. Install SDDM (auto-selects via debconf). 2. Enable Autologin: - **Session Detection:** Auto-detects the installed session by checking `.desktop` files in priority order: `plasmawayland` → `lxqt-wayland` → `plasma` → `lxqt`. - **Configuration:** Writes autologin settings to `/etc/sddm.conf.d/autologin.conf`. - **Fallback:** If no session is found, it enables autologin but warns that SDDM will use the default session. **Block 5 — greetd Configuration** - greetd is a minimal, modern display manager designed for Wayland environments. - Submenu options vary by Debian version: - **All Versions:** Install base `greetd`, Install `greetd` + `tuigreet` (recommended TUI greeter). - **Debian 13 only:** Additional options to install `gtk-greet`, `nwg-hello`, or `wlgreet`. - **Backports Handling:** On Bookworm, `tuigreet` is installed from backports if not enabled. - **Important Warning:** greetd is installed but NOT configured by the script. The user must manually create `/etc/greetd/config.toml` to be able to log in. The script displays a warning with references to man pages for configuration details. ### 3. Smart Automations The component utilizes several intelligent automation features: - **debconf-set-selections:** Pre-selects the display manager as default before `apt install`, preventing the interactive "Configuring shared/default-x-display-manager" dialog that would otherwise pause the script execution. - **Session Auto-Detection (SDDM):** Checks `.desktop` files in priority order (Wayland first, then X11) to set the correct session type for autologin configuration. - **Wayland Toggle:** Creates or removes a udev rule symlink to `/dev/null`. This is a known workaround that disables the GDM rule blocking NVIDIA Wayland support. - **greetd Backports:** On Bookworm, `tuigreet` is installed from backports (newer version) if not already enabled in the system. - **Manual Config Warning:** The script explicitly informs users that greetd requires manual configuration and points to man pages for further details. - **User Detection:** Uses `SUDO_USER` (the real user who ran sudo) instead of `$USER` (which is root during script execution). This ensures the correct user is set for automatic login across all display managers. ### 4. Packages and Resources Managed **Display Manager Packages:** | DM | Packages | Debian Versions | | --- | --- | --- | | LightDM | lightdm, lightdm-gtk-greeter, lightdm-gtk-greeter-settings | All | | GDM3 | gdm3 | All | | SDDM | sddm | All | | greetd (base) | greetd | 12, 13 | | greetd + tuigreet | greetd, tuigreet | 12 (backports), 13 | | greetd + gtk-greet | greetd, gtk-greet | 13 only | | greetd + nwg-hello | greetd, nwg-hello | 13 only | | greetd + wlgreet | greetd, wlgreet | 13 only | **Configuration Files Modified:** | DM | File Path | Configuration Purpose | | --- | --- | --- | | LightDM | /etc/lightdm/lightdm.conf.d/50-debianito-userlist.conf | User list visibility toggle | | LightDM | /etc/lightdm/lightdm.conf | Autologin user + timeout settings | | GDM3 | /etc/gdm3/greeter.dconf-defaults | User list toggle (disable-user-list) | | GDM3 | /etc/gdm3/daemon.conf | Autologin user and enable flag | | GDM3 | /etc/udev/rules.d/61-gdm.rules | Wayland override (symlink to /dev/null) | | SDDM | /etc/sddm.conf.d/autologin.conf | Autologin user + session type | **Session Detection Priority (SDDM Autologin):** | Priority | Session File | Session Type | | --- | --- | --- | | 1 | /usr/share/wayland-sessions/plasmawayland.desktop | KDE Wayland | | 2 | /usr/share/wayland-sessions/lxqt-wayland.desktop | LXQt Wayland | | 3 | /usr/share/xsessions/plasma.desktop | KDE X11 | | 4 | /usr/share/xsessions/lxqt.desktop | LXQt X11 | > ⚠️ **Warning: Wayland on NVIDIA:** The "Force Enable Wayland on NVIDIA" option creates a symlink that disables the GDM udev rule. This is a known workaround but MAY cause graphics instability or breakage. To revert, remove `/etc/udev/rules.d/61-gdm.rules`. > ⚠️ **Warning: greetd:** Unlike other display managers, greetd is installed but NOT configured by this script. You MUST manually create `/etc/greetd/config.toml` before you can log in. See `man greetd` and `man 5 greetd-sessions` for configuration details. > ⚠️ **Warning: Autologin:** All autologin configurations use `SUDO_USER` (the user who ran sudo) instead of `$USER` (which is root during script execution). This ensures the correct user is set for automatic login. > 💡 **Technical Note:** `debconf-set-selections` pre-selects the display manager before apt install, preventing the interactive "Configuring shared/default-x-display-manager" dialog that would otherwise pause the script.