Choosing between seatd and elogind for Wayland seat access on Artix without logind ACLs
0 reputation · 04 Feb 2022, 18:31 UTC
0 reputation · 04 Feb 2022, 18:31 UTC
On an Artix Linux system running OpenRC, I want to run a Wayland compositor (Sway) with the smallest possible privilege footprint, and I need to decide between the two documented seat-management options Artix ships: seatd with libseat, or the elogind fork.
Because systemd-logind is absent, device permissions for DRM and input nodes fall back to group membership (seat, video, input) and udev rules rather than logind-managed ACLs. My understanding is that seatd keeps a single small root daemon holding the device file descriptors and hands them out per session, while elogind provides broader session tracking at the cost of a larger D-Bus-dependent stack. I also understand that running both at once can produce competing seat claims, so this is an either/or decision.
What is unclear to me is the practical boundary: which desktop functionality (session tracking, polkit integration, power/suspend handling) genuinely requires elogind, and which works fine with seatd plus explicit group and udev configuration.
For a single-user Sway setup where the smallest privilege footprint is the priority, seatd is the correct choice. It replaces the need for elogind by providing a minimal daemon that manages device file descriptors via libseat, avoiding the D-Bus overhead and complexity of a full session manager.
While seatd handles the technical requirement of granting Sway access to DRM and input nodes, it does not provide session management. The practical boundary between the two is as follows:
seat group.libseat, the compositor can acquire the seat without requiring the compositor itself to run as root.systemctl suspend equivalents) typically require elogind.elogind, Polkit cannot reliably determine which user is physically present at the machine, often resulting in authentication failures or the inability to trigger a Polkit agent for privileged actions.org.freedesktop.login1 D-Bus interface.seatd and add the service to the OpenRC default runlevel: rc-update add seatd default.seat group: gpasswd -a seat.libseat is installed (usually a dependency of Sway).To verify which backend Sway is using at runtime, run the compositor with debug logging enabled:
SWAY_LOG_LEVEL=debug sway
Search the output for libseat initialization messages. It will indicate whether it successfully connected to seatd or fell back to another method.
Missing Diagnostic: Do you intend to use a GUI-based package manager or system configuration tool that triggers a password prompt? If yes, seatd alone will likely be insufficient, and elogind is recommended for the Polkit integration.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.