greetd - ArchWiki

Jump to content
From ArchWiki

Related articles

- Display manager
- Wayland
- Sway

greetd is a minimal, agnostic and flexible login manager daemon which does not make assumptions about what the user wants to launch, should it be console-based or graphical. Any script or program which can be started from the console may be launched by greetd, which makes it particularly suitable for Wayland compositors. It can also launch a greeter to start user sessions, like any other display manager.

## Installation

Install the greetd or greetd-gitAUR packages.

The default greetd configuration file is located at `/etc/greetd/config.toml`. PAM-specific configuration is set in `/etc/pam.d/greetd`.

### Greeters

In order to allow user sessions to be started, greetd requires a greeter to be installed, as there is none bundled by default. Several greeters are available:

- greetd-agreety — The default, a text-based greeter similar to agetty.

  https://git.sr.ht/~kennylevinsen/greetd || greetd-agreety

- dlm — An fbdev greeter.

  https://git.sr.ht/~kennylevinsen/dlm || greetd-dlm-gitAUR

- ddlm — An fbdev greeter. Enhanced/extended version of `dlm`.

  https://github.com/deathowl/ddlm || greetd-ddlm-gitAUR

- gtkgreet — A GTK greeter.

  https://git.sr.ht/~kennylevinsen/gtkgreet || greetd-gtkgreet, greetd-gtkgreet-gitAUR

- ReGreet — A GTK greeter. Supports various customization options. Wayland only.

  https://github.com/rharish101/ReGreet || greetd-regreet, greetd-regreet-gitAUR

- wlgreet — A Wayland greeter.

  https://git.sr.ht/~kennylevinsen/wlgreet || greetd-wlgreetAUR, greetd-wlgreet-gitAUR

- tuigreet — A console UI greeter.

  https://github.com/apognu/tuigreet || greetd-tuigreet

- qtgreet — A Qt greeter.

  https://gitlab.com/marcusbritanicus/QtGreet || greetd-qtgreetAUR

## Starting greetd

Enable `greetd.service` so greetd will be started at boot.

See also Display manager#Loading the display manager.

## Greeter configuration

Configuring the greeter run by greetd is done using the `command` option in the `default_session` section in `/etc/greetd/config.toml`. The included `agreety` greeter will be used if no changes are made. Also see #agreety.

By default, greeters are run as the `greeter` user. This can be changed by editing the `user` option in the `default_session` section of the configuration file and replacing another_user with the chosen user:

    ...
    [default_session]
    user = "another_user"
    ...

Make sure the ownership of the `/etc/greetd` directory is set accordingly.

### agreety

This is the default greeter. It is launched by greetd with the configuration file set as follows:

    ...
    [default_session]
    command = "agreety --cmd $SHELL"
    ...

agreety can launch any arbitrary command once a user logs in. For example, in order to start Sway, replace `$SHELL` in the example above with `sway`.

### gtkgreet

In order to run, gtkgreet needs a compositor. For the full experience, a compositor with `wlr-layer-shell-unstable` support is required but others can work. As such, it is recommended to use sway, but something like cage can also be used. Examples for both cage and sway are provided below.

In order to specify which login environments can be started by gtkgreet, list them in `/etc/greetd/environments`. For example:

    sway
    bash

You can also invoke gtkgreet with the `-c mycommand` parameter, replacing mycommand with the desired program (for example, `gtkgreet -c bash` or `gtkgreet -c sway`). Do so in the below compositor examples as desired.

#### Using cage

Install cage and set the `command` option as follows:

    ...
    [default_session]
    command = "cage gtkgreet"
    ...

#### Using sway

Install sway. When using Sway, it must be terminated once the user logs in. For that purpose, a specific configuration file must be created, for example in `/etc/greetd/sway-config`, with the following content:

    # `-l` activates layer-shell mode. Notice that `swaymsg exit` will run after gtkgreet.
    exec "gtkgreet -l; swaymsg exit"

    bindsym Mod4+shift+e exec swaynag \
    -t warning \
    -m 'What do you want to do?' \
    -b 'Poweroff' 'systemctl poweroff' \
    -b 'Reboot' 'systemctl reboot'

    include /etc/sway/config.d/*

Then, greetd must be set to start Sway with the configuration file above. Set the `command` option as follows:

    ...
    [default_session]
    command = "sway --config /etc/greetd/sway-config"
    ...

### ReGreet

Similar to gtkgreet, ReGreet needs a compositor. For example, both Cage and Sway can be used just like they're used for gtkgreet, replacing the gtkgreet command with regreet. The config for Sway would thus look like:

    # Notice that `swaymsg exit` will run after ReGreet.
    exec "regreet; swaymsg exit"

    bindsym Mod4+shift+e exec swaynag \
    -t warning \
    -m 'What do you want to do?' \
    -b 'Poweroff' 'systemctl poweroff' \
    -b 'Reboot' 'systemctl reboot'

    include /etc/sway/config.d/*

ReGreet picks up available sessions from `/usr/share/xsession` (for X11 sessions) and `/usr/share/wayland-sessions` (for Wayland sessions). Thus, there is no need to list sessions in `/etc/greetd/environments`.

ReGreet can be configured through a TOML file in `/etc/greetd/regreet.toml`. A sample file is provided in `/usr/share/doc/greetd-regreet/regreet.sample.toml` with all available options. Copy this to `/etc/greetd/regreet.toml` and make the changes you want, commenting out or deleting the lines you don't need. Any invalid options are ignored.

### wlgreet

In order to start wlgreet, a compositor with `wlr-layer-shell-unstable` is required. Follow the steps required to set up gtkgreet with Sway as described above but use the following for `/etc/greetd/sway-config` instead:

    exec "wlgreet --command sway; swaymsg exit"

    bindsym Mod4+shift+e exec swaynag \
    -t warning \
    -m 'What do you want to do?' \
    -b 'Poweroff' 'systemctl poweroff' \
    -b 'Reboot' 'systemctl reboot'

    include /etc/sway/config.d/*

### tuigreet

tuigreet does not require any special setup, just set the `command` option as follows:

    ...
    [default_session]
    command = "tuigreet --cmd sway"
    ...

`tuigreet --help` will display customization options.

### ddlm

ddlm does not require any special setup, just set the `command` option as follows:

    ...
    [default_session]
    command = "ddlm --target sway"
    ...

### qtgreet

In order to use qtgreet, you need a WLR based compositor (e.g. wayfireAUR, sway).

#### Using Wayfire

Install wayfireAUR and set the `command` option as follows:

    ...
    [default_session]
    command = "wayfire --config /etc/qtgreet/wayfire.ini"
    ...

The Wayfire configuration file referred to is included with qtgreet.

## Tips and tricks

### Enabling autologin

If you want a user to be logged in automatically, an `initial_session` section must be defined in `/etc/greetd/config.toml`:

    ...
    [initial_session]
    command = "sway"
    user = "myuser"
    ...

The `command` option may contain the name of any executable file. In the example above, Sway will be started by `myuser` at boot and gtkgreet will be launched after the user logs out.

If you do not want to use greetd and always want autologin to be enabled, see autologin.

### Run local programs

Add your PATH to `~/.profile`, or the DE called by greetd will not be able to run local programs. Greetd will not have access to `.bashrc` or `.zshrc`, so do not define the PATH there.

    ~/.profile

    export PATH="$HOME/.local/bin:$PATH"

## See also

- greetd project page
- greetd source code
- greetd wiki

Category:

- Display managers