Skip to content

Releases: kavau/atrium

atrium v0.4.0

Choose a tag to compare

@kavau kavau released this 29 Jun 16:10

atrium is a Linux display manager built for multiseat setups.

What's new in 0.4.0

Support for greeter background images

Set background-image in /etc/atrium-greeter.conf to an image path, or to a directory to pick a random image on each greeter launch.

Greeter themes

Set theme in /etc/atrium-greeter.conf to a theme .css file in order to override built-in colors and styles. A handful of themes are shipped with atrium and installed in /usr/local/share/atrium/themes.

Architectural redesign

Making atrium's core architecture simpler and more robust. The changes are purely internal and should not be visible to the user.

Smaller improvements

  • On seats with multiple displays, the login card is now centered correctly on the primary display (#68)
  • Sessions whose compositor binary is not installed are now filtered from the session picker
  • Session runner processes are now named atrium- in the process list

Bugfixes

  • Fixed a message size mismatch in the daemon-greeter IPC protocol
  • Session runner was incorrectly restarted while a session was already active
  • Session runner was restarted after shutdown was initiated (#106)
  • fork() failures during session start are now retried

Installing

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

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

Then follow the README for all steps to build, install, and enable atrium.

Arch Linux / CachyOS users can install from the AUR instead (v0.4.0 package coming soon).

Feedback

atrium v0.3.0

Choose a tag to compare

@kavau kavau released this 11 May 12:00

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 hardcoded (src/config.h) are now in /etc/atrium.conf (daemon) and /etc/atrium-greeter.conf (greeter). The meson setup flag is now -Ddist= (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. 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 talk. This can be overridden with allow-duplicate-login = true in atrium.conf.

Deferred seat handling

Seats whose GPU has no connected monitor are now held in an idle state rather than crash-looping the greeter; the greeter launches when a monitor appears. atrium also subscribes to the logind SeatNew D-Bus signal and launches a greeter on seats that appear after startup.

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. 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.
  • XDG_SESSION_ID - correctly set in the compositor and greeter environments.
  • 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.
  • 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

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.
  • No SIGKILL escalation - compositors that ignore SIGTERM are waited on indefinitely rather than force-killed.
  • 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.
  • 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

atrium v0.2.0

Choose a tag to compare

@kavau kavau released this 24 Apr 20:19

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. When the compositor exits, the greeter restarts.

This is the first tagged release. atrium is usable as a daily-driver display manager today. Expect rough edges; see known limitations below.

Warning: atrium runs as a system service with root privileges. It is experimental software - use at your own risk. See LICENSE for warranty and liability terms.

What works in 0.2.0

  • Seat discovery via logind ListSeats at startup.
  • Greeter on every seat - GTK4 user picker and password prompt, running inside cage.
  • PAM authentication - full pam_authenticate / pam_acct_mgmt / pam_setcred / pam_open_session sequence.
  • logind session creation via sd-bus CreateSession, with VT allocation on seat0 and full privilege drop before exec.
  • Compositor handoff - login shell wrapping so .profile runs.
  • Automatic greeter restart when compositor exits.
  • Screen blanking after 5 minutes of greeter inactivity.
  • Passwordless users via CONFIG_PASSWORDLESS_USERS.
  • Clean shutdown - systemctl stop atrium terminates greeters and compositors and closes logind sessions.

Supported distros

Distro Status
CachyOS / Arch Linux Verified (primary development target)
Debian / Ubuntu PAM stack provided and tested
Fedora PAM stack provided; untested end-to-end

Other systemd-based distros should work - the only distro-specific piece is the PAM stack.

Install requirements

  • libsystemd, libudev, libpam, gtk4, cage
  • meson, ninja
  • systemd/logind; Wayland sessions only (X11 not supported)

See the README for the full build, install, and enable steps.

Known limitations

  • No hotplug - seats and displays added/removed after startup are not detected. Restart atrium (systemctl restart atrium) to pick up hardware changes.
  • No display-connected check - a seat with a GPU but no attached monitor will crash-loop the cage compositor. Workaround: list the affected seats in CONFIG_IGNORE_SEATS.
  • Compile-time configuration only - all settings live in src/config.h.
  • No session discovery - atrium does not read .desktop files from /usr/share/wayland-sessions/. The compositor command and XDG_CURRENT_DESKTOP value are hardcoded in src/config.h.
  • Same-user multi-seat cross-talk - when the same user logs in on multiple seats, both sessions share XDG_RUNTIME_DIR and the D-Bus session bus, so desktop environments that use D-Bus can leak actions between seats.
  • See the README for the full list.

Installing

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

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

Then follow the build and install instructions.

Feedback