Skip to content

feat(ubuntu): opt-in xrdp remote desktop (XFCE default, LAN-scoped)#8

Open
ns408 wants to merge 6 commits into
mainfrom
feat/ubuntu-remote-desktop
Open

feat(ubuntu): opt-in xrdp remote desktop (XFCE default, LAN-scoped)#8
ns408 wants to merge 6 commits into
mainfrom
feat/ubuntu-remote-desktop

Conversation

@ns408

@ns408 ns408 commented Jun 6, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add an opt-in Ubuntu remote desktop script: install/ubuntu/install-remote-desktop.sh. Not run by bootstrap.sh; default profiles stay minimal-surface.
  • Installs a desktop + xrdp, then LAN-scopes port 3389 via ufw (allows SSH first so it can't lock you out). Auto-detects the subnet; override with SUBNET=<cidr>.
  • Defaults to XFCE (most reliable over RDP); GNOME is opt-in via DESKTOP=gnome.
  • Disables xorgxrdp glamor (forces software rendering) so the X backend works on old/integrated GPUs that otherwise black-screen.
  • Installs a polkit override to silence the Ubuntu 24.04 colord "authentication required to create a color profile" popups over RDP.
  • README documents usage, the one-session-per-user rule, GPU/GNOME caveat, and the SSH-tunnel option for untrusted networks.

Why

ns-bootstrap shipped no graphical remote access. This adds it without weakening the default install: the RDP listener only exists when the script is explicitly run, and it is firewalled to the LAN.

Field testing (Ubuntu 24.04, ASUS, old Intel + NVidia)

  • Root-caused a black screen to xorgxrdp glamor EGL shader failures on the old GPU; disabling glamor fixed the X backend.
  • GNOME Shell still crashed on software GL, so the default is XFCE (confirmed stable). GNOME is reserved for hosts with working GPU acceleration.

Test plan

  • shellcheck install/ubuntu/install-remote-desktop.sh — clean.
  • On an Ubuntu 24.04 host: bash install/ubuntu/install-remote-desktop.sh (defaults to XFCE), then:
    • systemctl is-active xrdp → active
    • ss -tlnp | grep 3389 → listening
    • sudo ufw status → SSH allowed + 3389/tcp ALLOW <subnet>
    • grep -nE 'DRMDevice|DRI3' /etc/X11/xrdp/xorg.conf"" and "0"
    • Connect from a LAN RDP client → stable XFCE desktop
    • Re-run → idempotent ("already installed/disabled")

ns408 added 6 commits June 14, 2026 02:34
Provide LAN-scoped graphical remote access for Ubuntu without weakening the
default install. Kept out of bootstrap.sh so the RDP listener only exists when
explicitly requested, and restricted to the local subnet via ufw (allowing SSH
before enabling, to avoid remote lockout).
XFCE installed alongside an existing GNOME caused session crashes. Support
DESKTOP=gnome|xfce|auto (default to existing GNOME), configure an Xorg GNOME
session for xrdp, and add a polkit override that silences the 24.04 colord
authentication popups that destabilise remote sessions.
On old/integrated GPUs xorgxrdp's glamor EGL shaders fail to compile, breaking
the framebuffer path and producing a black screen. Force software rendering
(DRMDevice/DRI3 off) for broad compatibility; document that GPU-less hosts must
use XFCE since GNOME Shell cannot run on software GL.
XFCE is the reliable desktop over RDP (no GL compositing); GNOME Shell crashes on
software-rendered GL. Make XFCE the default and require DESKTOP=gnome to opt in.
XFCE-over-xrdp starts no Secret Service, so Chromium/Electron apps warn the OS
keyring is unavailable and fall back to plaintext storage. Install gnome-keyring
and hook pam_gnome_keyring into xrdp-sesman (XFCE only, idempotent) so the keyring
unlocks with the login password.
When ~/.xsession is missing or drifts, Ubuntu xrdp falls back to the system
x-session-manager (GNOME), which black-screens on GPU-less hosts. Pin it to
xfce4-session in the XFCE path so the fallback can never silently select GNOME.
@ns408 ns408 force-pushed the feat/ubuntu-remote-desktop branch from 6a1a13b to e42d832 Compare June 13, 2026 16:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant