Skip to content

atrium v0.3.0

Latest

Choose a tag to compare

@kavau kavau released this 11 May 12:00
· 15 commits to main since this release

atrium is a Wayland display manager for Linux with first-class multiseat support. It discovers seats via logind, launches a GTK4 greeter on each seat inside a cage kiosk compositor, authenticates the user via PAM, and hands off to a Wayland session.

What's new in 0.3.0

Runtime configuration files

All settings previously requiring a recompile (src/config.h) are now in /etc/atrium.conf (daemon) and /etc/atrium-greeter.conf (greeter), both parsed at startup using inih. The meson setup flag is now -Ddist=<arch|debian|fedora> (previously -Dpam_config).

Session picker

The greeter now discovers available Wayland sessions from /usr/share/wayland-sessions/*.desktop and presents a session picker on the login screen. The last session used on each seat is remembered and preselected on the next login.

PAM keyring integration

GNOME Keyring and KWallet are unlocked automatically on login via PAM (pam_gnome_keyring.so, pam_kwallet5.so). Both are included in the provided PAM stacks. Note: on Fedora, these daemons are managed by systemd user units and may not unlock via PAM — see Known Limitations.

Duplicate login prevention

By default, atrium now blocks the same user from logging in on more than one seat simultaneously, avoiding cross-seat compositor state collisions (XDG_RUNTIME_DIR, D-Bus session bus). This can be relaxed with allow-duplicate-login = true in atrium.conf.

Deferred seat handling

Seats whose GPU has no connected monitor are now held in a deferred state rather than crash-looping the greeter; the greeter launches when a monitor appears (detected via udev DRM events and a periodic sysfs poll). atrium also subscribes to the logind SeatNew D-Bus signal and launches a greeter on seats that appear after startup (e.g. a USB DisplayLink adapter plugged in later).

Crash-loop detection

The greeter is now monitored for crash loops. After a configurable number of rapid restarts, atrium backs off and eventually gives up rather than spinning indefinitely. The threshold and delays are configurable in atrium.conf.

Fedora / SELinux support

A local SELinux policy module (atrium-local.te) is now provided and installed by meson install on Fedora targets (-Ddist=fedora). File context labels are set automatically post-install. End-to-end testing was completed on Fedora 42 (SELinux enforcing).

Bug fixes

  • logind session class — greeter sessions are now registered with class=greeter instead of class=user, preventing GNOME from listing atriumdm as a blocking user in the shutdown dialog. (#87)
  • XDG_SESSION_ID — correctly set in the compositor and greeter environments. (#90)
  • basename() mutationbasename() could modify pw_shell in place before execl used it, corrupting the shell argument. (#83)
  • Duplicate-login race — the duplicate-login check could observe a logind session that was already being torn down, incorrectly blocking a fresh login on that seat. (#79)
  • DRM event feedback loop — a DRM udev event generated by atrium's own seat assignment could trigger a second greeter launch attempt during crash-loop give-up.

Internal / architecture

  • Daemon restructured into daemon/core/, daemon/auth/, and daemon/policy/ with an enforced build-time boundary check (mechanism vs policy separation).
  • inih replaces the custom conf_parse library.
  • atriumdm home directory standardised to /var/lib/atrium.

Supported distros

Distro Status
CachyOS / Arch Linux Tested — primary development target
Debian / Ubuntu Tested
Fedora Tested; SELinux handled via xdm_t workaround (issue #86)

Known limitations

  • No hotplug — GPU or seat removal/re-addition at runtime is not yet handled cleanly. Restart atrium to recover; note this ends active sessions. A clean redesign is in progress. (#28)
  • No SIGKILL escalation — compositors that ignore SIGTERM are waited on indefinitely rather than force-killed. (#3)
  • Fedora keyring unlock — GNOME Keyring and KWallet are not unlocked on login on Fedora because both daemons are managed by systemd user units started before the D-Bus session bus is available. (#92)
  • See the README for the full list.

Installing

Download the source tarball attached to this release, or clone the tag:

git clone --branch v0.3.0 https://github.com/kavau/atrium.git

Then follow the README for the full build, install, and enable steps.

Arch Linux / CachyOS users can install from the AUR instead.

Upgrading from v0.2.0

The src/config.h compile-time configuration is gone. meson install now installs /etc/atrium.conf and /etc/atrium-greeter.conf with commented-out defaults — review both after upgrading. The defaults match the previous hardcoded values for most options.

The meson -Dpam_config flag has been renamed to -Ddist.

Feedback