Repository navigation
Releases: kavau/atrium
Release list
atrium v0.4.0
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.gitThen 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
- Bug reports and feature requests: GitHub issues
- Questions and discussion: GitHub Discussions
- General Linux multiseat topics: r/linux_multiseat
atrium v0.3.0
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=greeterinstead ofclass=user, preventing GNOME from listingatriumdmas 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/, anddaemon/policy/with an enforced build-time boundary check (mechanism vs policy separation). inihreplaces the customconf_parselibrary.atriumdmhome 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.gitThen 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
- Bug reports and feature requests: GitHub issues
- Questions and discussion: GitHub Discussions
- General Linux multiseat topics: r/linux_multiseat
atrium v0.2.0
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
ListSeatsat 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_sessionsequence. - logind session creation via
sd-busCreateSession, with VT allocation on seat0 and full privilege drop before exec. - Compositor handoff - login shell wrapping so
.profileruns. - Automatic greeter restart when compositor exits.
- Screen blanking after 5 minutes of greeter inactivity.
- Passwordless users via
CONFIG_PASSWORDLESS_USERS. - Clean shutdown -
systemctl stop atriumterminates 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,cagemeson,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
.desktopfiles from/usr/share/wayland-sessions/. The compositor command andXDG_CURRENT_DESKTOPvalue are hardcoded insrc/config.h. - Same-user multi-seat cross-talk - when the same user logs in on multiple seats, both sessions share
XDG_RUNTIME_DIRand 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.gitThen follow the build and install instructions.
Feedback
- Bug reports and feature requests: GitHub issues
- Questions and discussion: GitHub Discussions
- General Linux multiseat topics: r/linux_multiseat