We rewrote how Armbian installs desktops. Here's what changed
A friendlier, faster, snap-free desktop install in armbian-config
If you've installed a desktop environment with armbian-config over the last few months, you may have noticed things feel different: there's a tier you can pick, the browser actually works on every arch, uninstall doesn't take half your system with it, and there's no snap pop-up surprising you on Ubuntu builds. That's not by accident — the desktop submodule has been quietly rebuilt from the ground up. Here's what landed, why we did it, and what it means for you.
Pick the desktop you want — at install, and after
Three tiers, instead of one all-or-nothing install:
- minimal — DE + display manager + a terminal. About 500 MB. Perfect for headless boards with an occasional HDMI session, or anyone who'd rather curate apps themselves.
- mid — adds a WWW browser, file manager, image viewer, media player, calculator, archive tool, torrent client, and the SD-card flasher. About 1 GB. The "everyday desktop" sweet spot.
- full — adds LibreOffice, GIMP, Inkscape, Audacity, Thunderbird, and VS Code. About 2.5 GB. Workstation-shaped.
And — because changing your mind is allowed — you can move between tiers any time without a reinstall. armbian-config --api module_desktops upgrade de=xfce tier=full computes the delta and only adds what's missing. The reverse path, downgrade, only removes packages from the original install manifest, never anything you added on your own.
Snap-free Chromium, Firefox, and Thunderbird
On Ubuntu, the apt names chromium, firefox, and thunderbird are snap-transitional packages — installing them silently pulls in snapd, runs the apps in a snap sandbox, and gives you a slow start, broken hardware acceleration, and a confusing menu of "two Chromiums" if you ever want the real thing.
Armbian images don't ship snapd, so we now route those names to real, native .debs hosted on apt.armbian.com. The desktop install path writes an apt pin priority file at /etc/apt/preferences.d/armbian-desktops that forces our packages to win over the snap-shims — even on systems where the snap version is technically newer. The result: apt install chromium gives you a real, native Chromium. No snapd. No surprise pop-ups.
On amd64 systems, the browser slot maps to Google Chrome (also from apt.armbian.com); on RISC-V Ubuntu builds you get real Firefox. Debian releases keep using upstream chromium / firefox-esr — those have always been real .debs and need no help.
One desktop, every supported distro and arch
Each DE — XFCE, GNOME, KDE Plasma, KDE Neon, MATE, Cinnamon, i3-wm, xmonad, Enlightenment, Budgie, Deepin — is now a single declarative YAML file in the configng repo. The engine works out which packages exist on which release on which arch, substitutes per-platform replacements where needed, and silently drops broken ones. Same XFCE definition runs on Debian bookworm/trixie/forky and Ubuntu noble/resolute across arm64 / amd64 / armhf / riscv64.
Adding a new desktop environment is a YAML edit and a smoke test — no per-distro shell scripts, no codepaths to chase.
Clean uninstall, every time
Every desktop install records a manifest of exactly which packages it added — under /etc/armbian/desktop/<de>.packages. Removal undoes only those. Packages that were already on your system before you installed the desktop stay put. No more "I uninstalled XFCE and lost half my system."
The little stuff that's easy to miss
- Auto-login that doesn't trash your config. Enable / disable autologin for
gdm3,sddm, orlightdmvia in-place sed edits — yourWaylandEnable=falseand other tweaks survive. - Container-aware. Same code path works inside Docker without trying to start a display manager. CI builds and scripted installs work without special-casing.
- U2F security keys. Plug in your Yubikey and WebAuthn just works — the udev rules ship via
libfido2-1on resolute,libu2f-udevon older releases. - Printer panel works. GNOME Settings → Printers no longer says "some settings cannot be unlocked" —
cups-pk-helperships with every desktop install now. - VS Code from us, not Microsoft's repo. Installing
codeno longer prompts you to add Microsoft's apt source — we host the real package, the prompt is suppressed, the pin keeps Microsoft from sneaking in over the top.
A weekly self-audit catches drift
A scheduled Claude AI supported GitHub Actions workflow scans the YAML matrix against armbian/build's supported releases and the live Debian/Ubuntu archives — flags releases not yet covered, flags packages that no longer exist upstream — then opens a PR with proposed YAML fixes. Dead packages and missing releases stop accumulating silently.
Try it
On any modern Armbian install:
sudo armbian-config
# or scripted:
sudo armbian-config --api module_desktops install de=xfce tier=full
sudo armbian-config --api module_desktops upgrade de=xfce tier=full
sudo armbian-config --api module_desktops downgrade de=xfce tier=mid
sudo armbian-config --api module_desktops remove de=xfce
Supported desktops today: XFCE, GNOME, KDE Plasma, KDE Neon (Ubuntu noble only), MATE, Cinnamon, i3-wm and xmonad, Enlightenment, Budgie and Deepin experimental. Supported targets: Debian bookworm / trixie / forky and Ubuntu noble / resolute on every Armbian arch.