You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Kenny Levinsen 1ae6c3b3dd libseat: Check euid before using builtin 3 years ago
.builds ci: Install scdoc for alpine and archlinux 3 years ago
common libseat: Improve logging with seatd conn helpers 3 years ago
contrib/systemd contrib: Add example systemd service 3 years ago
examples/simpletest simpletest: Set log level to debug 3 years ago
include libseat: Improve logging with seatd conn helpers 3 years ago
libseat libseat: Check euid before using builtin 3 years ago
man Nuke LIBSEAT_LOGLEVEL 3 years ago
seatd Introduce libseat_set_log_level 3 years ago
tests linked_list: Add unittest 3 years ago
.clang-format Add clang format specification 3 years ago
LICENSE Add LICENSE 3 years ago Add platform support note to README 3 years ago Bump version to 0.2.0 3 years ago
meson_options.txt man: Add simple seatd(1) page 3 years ago

seatd and libseat

A minimal seat management daemon, and a universal seat management library.

Currently supports Linux and FreeBSD. Alpha

What is seat management?

Seat management takes care of mediating access to shared devices (graphics, input), without requiring the applications needing access to be root.

What's in the box?


A seat management deamon, that does everything it needs to do. Nothing more, nothing less. Depends only on libc.


A seat management library allowing applications to use whatever seat management is available.


  • seatd
  • (e)logind
  • embedded seatd for standalone operation

Each backend can be compile-time included and is runtime auto-detected or manually selected with the LIBSEAT_BACKEND environment variable.

Which backend is in use is transparent to the application, providing a simple common interface.

Why not (e)logind?

systemd-logind is not portable, and being part of the systemd project, it cannot be used in an environment not based on systemd. Furthermore, "simple" is definitely not within the set of adjectives that can be used to describe logind. For those in the dark, take a glance at its API. Plus, competition is healthy.

elogind tries to isolate systemd-logind form systemd through brute-force. This requires actively fighting against upstream design decisions for deep integration, and the efforts must be repeated every time one syncs with upstream. And even after all this work, one is left with nothing but a hackjob.

Why spend time isolating logind and keeping up with upstream when we could instead create something better with less work?

Why does libseat support (e)logind?

In order to not be part of the problem. We will not displace systemd-logind anytime soon, so for user shells like sway, seatd joins the ranks of logind and direct session management for things they need to support.

Instead of giving user shell developers more work, libseat aims to make supporting seatd less work than what they're currently implementing. This is done by taking care of all the seat management needs with multiple backends, providing not only seatd support, but replacing the existing logind and direct seat management implementations.

I want more

Go to #kennylevinsen @ to discuss, or use ~kennylevinsen/