greetd
Generic display manager, capable of anything from text-based login to shell (replacing agetty), to graphical login to a Wayland compositor (replacing GDM/lightdm/...).
List of known greetd greeters
- agreety - The simple, text-based greeter.
- gtkgreet - Simple GTK based greeter (xdg-shell or wlr-layer-shell, to be used with something like
cage
) - dlm - Dumb Login Manager (using fbdev)
- wlgreet - Wayland greeter (using wlr-layer-shell, to be used with something like
sway
)
Overview
greetd is a daemon which:
- Launches a configured greeter of your choice.
- Listens on a socket for a login message.
- If the credentials are valid, terminates the greeter (if it didn't do so itself) and starts the requested session application.
- When the session application terminates, the greeter is started once again.
All the greeter of choice needs to do is to be able to write a message to a socket. It could be anything from a simple terminal application to a fully-fledged desktop environment in which one of the applications present a user prompt. Of course, the same goes for the session the user logs into.
The greeter runs as a configured user, which is supposed to be one with no interesting privileges except for what the greeter itself needs to run.
Included in the box:
Binaries
- greetd, the daemon itself
- agreety, a simple agetty greeter clone.
- greetctl, a WIP tool meant to interact with greetd.
- greet_proto, a protocol library in Rust. Don't worry if you don't use Rust, the protocol is very simple.
Configuration files
- greeter.pam, a PAM service file that should be put as
/etc/pam.d/greeter
- config.toml, a configuration file example
- greetd.service, a systemd service file example.
Installation
cp greeter.pam /etc/pam.d/greeter
cp greetd.service /etc/systemd/system/greetd.service
mkdir /etc/greetd
cp config.toml /etc/greetd/config.toml
- Look in the configuration file
/etc/greetd/config.toml
and edit as appropriate. - Start the greetd service.
Dumb standalone demo
(Requires the pam service installed)
sudo greetd --vt next --greeter "agreety" --greeter-user $LOGNAME
- Answer the questions (username, password, command), and
agreety
will be replaced by the command you typed if your login is successful. See theagreety
andgreetd
help texts for more info
Protocol
_______________________________
| | |
| payload_length u32 | payload |
|____________________|_________|
payload_length
is native endianness, payload is JSON.
Requests and responses are encoded the same.
Requests
CreateSession
Create a new session for the given user. This may result in authentication questions.
{
"type": "create_session",
"username": "user"
}
PostAuthMessageResponse
Answer an authentication question.
{
"type": "post_auth_message_response",
"response": "password"
}
StartSession
Start a fully authenticated session.
{
"type": "start_session",
"cmd": ["sway"],
"env": [
"XDG_SESSION_TYPE=wayland",
"XDG_SESSION_DESKTOP=sway"
]
}
CancelSession
Cancel a session being configured.
{
"type": "cancel_session"
}
Response
Success
The action was successful.
{
"type": "success",
}
Error
The action failed.
{
"type": "error",
"error_type": "loginError",
"description": "..."
}
AuthMessage
The action resulted in authentication questions.
{
"type": "auth_message",
"message": "Password: ",
"message_type": "secret"
}