Previously there was a brief attempt at packaging seatd as an alternative to elogind, but we found some issues and put it aside for awhile. Well time has passed and another look was given. This time around, with the help of an additional pam module, seatd support is looking much, much viable as a valid choice. Some more work needs to be done, but here's a brief tutorial on how to switch your system from using elogind to seatd.
Why use seatd?
elogind works great however it is quite complicated and large. By its nature, it is very tied to upstream systemd development (for better or worse). Additionally, it has a runtime dbus dependency. On the other hand, seatd's source code is magnitudes smaller and much easier to understand. It has a logind API implementation in one single C file so it is still compatible with software that uses logind.
Init System Support Status
openrc: implemented
runit: implemented
s6: implemented
dinit: implemented
Note: it is highly recommended that you perform these commands in a separate TTY and not in a graphical environment. Playing around with the elogind daemon will likely kill your graphical session at some point. Make sure all important work is saved before proceeding.
pam_rundir
One important thing that elogind provides is automatic creation and handling of the XDG_RUNTIME_DIR environment variable and directories. seatd does not do this and many, many programs (wayland, pulseaudio, dbus, etc.) write runtime user data here so you mostly want this. Instead of using the elogind daemon, we can use a PAM module called pam_rundir that handles the directory creation and the XDG_RUNTIME_DIR environment variable. It is merely about 300 lines of C code and only ever executes on system login/logout. All it does it create/delete the /run/user directories as appropriate and export the XDG_RUNTIME_DIR environment variable.
$ sudo pacman -S pam_rundir
seatd-${init}
Installing this likely removes elogind-${init} from your system so do not be surprised if your graphical session dies/restarts at this point. After you have seatd-${init} installed, you can add it to your service manager's defaults. e.g. for s6/s6-rc:
$ sudo pacman -S seatd-s6
$ sudo touch /etc/s6/adminsv/default/contents.d
$ sudo s6-db-reload
elogind removal
Strictly speaking, this part is optional. If you leave elogind on your system, it will still work fine. The dbus autostarting feature will make elogind always start by itself on login so it is a bit wasteful. You can opt to remove it totally.
$ sudo pacman -Rdd elogind
Of course, never lightly use -Rdd but in this case it is okay. seatd only needs libelogind to function. Programs that depend on elogind should function perfectly fine with seatd/libseat. Artix needs to update the package dependencies to be a bit more generic, but for now this is OK.
Add users to groups
One thing systemd (and by extension elogind) did was magically handle a lot of group stuff in the background. So your user did not need to be a part of the video group to start xorg for example. Without elogind, this no longer happens so you have to add your user to the correct groups if you want things to still work normally. See the Arch wiki page for a list of some of these groups. You almost certainly want to add your user to audio and input at a minimum. seatd runs with the seat user so you will need to add yourself there for graphics.
$ sudo gpasswd -a $USER seat
$ sudo gpasswd -a $USER audio
$ sudo gpasswd -a $USER input
Add yourself and other users to more groups as needed. After that, you can just perform a reboot and you should be good to go. Enjoy using seatd!