Argvus Greeter is a keyboard-first Ratatui terminal frontend for greetd built for the Argvus Desktop Environment.
It is designed for Wayland and for Argvus' Hyprland-based desktop, while still
discovering installed Wayland sessions instead of hardcoding a single session.
The packaged launcher opens it through argvus-tui-terminal using Kitty's
graphics protocol, preserving avatars while remaining navigable with arrows,
Enter and Tab. Its colors and semantic controls follow the active ARGVUS theme
for the currently selected account; the greeter does not render a wallpaper.
Because the greeter runs before authentication as the isolated greeter user,
argvus-appearance publishes only the validated theme name to
/var/lib/argvus/greeter/themes/<uid>; private user configuration remains
unreadable to the login process.
The launcher also requests a Greeter-only Kitty profile, which keeps the
normal Kitty tab configuration unchanged while disabling tabs during login.
Screenshot placeholder.
systemd
-> greetd
-> minimal Wayland compositor session
-> argvus-tui-terminal
-> argvus-greeter
-> DRM/KMS handoff spinner
-> selected Wayland desktop session
The greeter does not authenticate users itself. It uses the greetd IPC socket
from GREETD_SOCK; greetd then delegates authentication to PAM.
Diagnostic logs are written to the runtime greeter directory instead of the
interactive terminal, so backend messages cannot corrupt the TUI layout.
- Rust 1.95 or newer
argvus-tui-terminaland Kitty graphics support- greetd
- A Wayland compositor suitable for running the greeter, such as Hyprland
argvus-appearancefor the official ARGVUS TUI themes- systemd/logind for the power menu
cargo build --releaseThe binary is produced at target/release/argvus-greeter.
Expected package locations:
/usr/bin/argvus-greeter/etc/argvus/greeter.toml/usr/share/argvus-greeter//usr/share/backgrounds/argvus//usr/share/wayland-sessions/argvus.desktop
Arch packaging can install this repository's packaging/greetd examples as
documentation or adapt them into package defaults.
Arch packaging is owned by this repository through
packaging/arch/ci/PKGBUILD. Tag pushes build and publish signed
.pkg.tar.zst packages to the shared
argvus/packages repository.
See:
packaging/greetd/config.tomlpackaging/greetd/hyprland-argvus-greeter.lua
The example starts a dedicated minimal Hyprland instance for the greeter
through argvus-greeter-session and does not start the user's normal Argvus
desktop configuration before authentication. The launcher clears VT1 and
redirects compositor output to the greeter user's state directory, or to a
per-UID fallback under /tmp when greetd does not provide a writable HOME, so
boot or terminal logs do not remain visible under the login screen.
The greeter compositor still sets XDG_CURRENT_DESKTOP=Hyprland to satisfy
Hyprland's startup checks, while XDG_SESSION_DESKTOP=argvus-greeter identifies
the login environment. When authentication succeeds, the greeter app exits and
the handoff helper starts a direct DRM/KMS spinner before the minimal
compositor is stopped. The spinner keeps the display covered until
argvus-session releases DRM immediately before starting the real user
compositor. The Wayland splash remains available as a fallback after the user
compositor becomes available. The session startup path does not start a second
Wayland spinner, so the DRM/KMS handoff is the only transition indicator.
When installed from the Arch package, apply the Argvus greetd configuration with:
sudo argvus-greeter-setup --enableUse --now instead of --enable to restart greetd.service immediately.
The helper backs up an existing /etc/greetd/config.toml before replacing it.
If /etc/greetd/config.toml still points to Hyprland --config ...conf, run
the helper again so greetd uses the packaged argvus-greeter-session + Lua
configuration. Older direct commands can leave terminal output visible while
the graphical greeter starts.
The package synchronizes existing .active-theme files during installation.
To refresh the public pre-login theme projections manually without changing
greetd configuration, run:
sudo argvus-greeter-setup --sync-themesSystem configuration is read from /etc/argvus/greeter.toml.
[appearance]
show_clock = true
show_date = true
[session]
default = "argvus"If the file does not exist, safe defaults are used.
The greeter shows the avatar of the account selected on the login screen. The
avatar belongs to the system account, not to the greeter configuration; there
is no avatar entry in greeter.toml and no way to change an avatar from the
login screen.
For each user discovered in /etc/passwd, Argvus Greeter resolves the avatar
in this order:
$HOME/.face— written and validated byargvus-accounts, the official account-metadata source of the Argvus desktop (regular PNG file, 256x256, mode0644, owned by the user);/var/lib/AccountsService/icons/<username>— freedesktop AccountsService convention, kept for interoperability with GNOME/KDE and other display managers;- The
Icon=path declared in/var/lib/AccountsService/users/<username>.
If none of these sources yields an existing, readable, regular image file —
or if the file cannot be decoded at render time (corrupted or unsupported
format) — the built-in Argvus default avatar (assets/avatar-default.svg) is
shown instead. No network access is ever performed.
Security details of the lookup:
.faceis checked withlstat: only real regular files qualify and symlinks are never followed, so a stale or hostile link cannot redirect the greeter to arbitrary paths;- usernames are sanitized before being used in any path construction;
- reading
$HOME/.facerequires the user's home directory to be traversable by thegreeteruser (the Arch Linux default is0755). Hardened setups that restrict home directories should relax traversal for the greeter or keep using the AccountsService locations.
The preferred way inside Argvus is the account manager:
argvus-accounts self avatar ~/Pictures/avatar.png # own avatar, no privileges
sudo argvus-accounts avatar alice photo.png # another user, adminAs an administrator, the AccountsService locations also work and stay compatible with other desktop environments:
sudo install -Dm644 photo.png /var/lib/AccountsService/icons/alicePNG and JPEG images work out of the box on Arch Linux; SVG also works when librsvg's gdk-pixbuf loader is installed. A custom location can be registered through the AccountsService user file:
# /var/lib/AccountsService/users/alice
[User]
Icon=/var/lib/AccountsService/icons/alice
SystemAccount=falseDesktop environments that integrate with AccountsService (GNOME, KDE Plasma) write both locations automatically when an avatar is set in their settings panels.
Because the image path is re-read from disk every time the selected user changes:
- changing a user's photo takes effect on the next login screen selection without rebuilding or restarting the greeter;
- selecting another user in the dropdown immediately switches name and avatar;
- users without a photo always receive the Argvus default avatar.
The login screen is strictly read-only with respect to avatars: there is no
button, menu, or flow to upload, choose, or remove them. Avatar lifecycle
(set, replace, remove) belongs exclusively to argvus-accounts.
Useful checks:
cargo build --release --locked
cargo test --locked
cargo clippy --locked --all-targets --all-features -- -D warningsThe greeter expects GREETD_SOCK to be set by greetd for real authentication.
Without greetd it can still be compiled and inspected, but login cannot proceed.
- Passwords and other PAM responses are never logged.
- Authentication is handled only through greetd IPC.
- The greeter never reads
/etc/shadow. - Session commands come from standard Wayland
.desktopfiles and are parsed into argv vectors rather than passed through a shell. - Power operations use systemd/logind over D-Bus.
- User discovery intentionally filters obvious service accounts and avoids depending on user home directories.