Stable v0.1.0

gardm

X11/Wayland display manager with graphical greeter

gardm is a display manager for the gardesk ecosystem that manages X11 server startup, user authentication via PAM, and session launching for both X11 and Wayland compositors. It features a customizable graphical greeter with garbg wallpaper integration, user avatar support, session selection, power management buttons, and accessibility options including high contrast mode and large text.

🎯 RPM Available

Installation

gardm is available as an RPM package for Fedora and RHEL-compatible distributions.

Using DNF (Recommended)

$sudo dnf config-manager --add-repo https://repos.musicsian.com/musicsian.repo
$sudo dnf install gardm

Building from Source

$git clone https://github.com/espadon/gardesk
$cd gardesk/gardm
$cargo build --release
$sudo cp target/release/gardmd /usr/bin/
$sudo cp target/release/gardm-greeter /usr/bin/

Components

  • gardmd - Display manager daemon (runs as root)
  • gardm-greeter - Graphical login UI

Enable and Start

gardm runs as a systemd service. First disable any existing display manager, then enable gardm.

$sudo systemctl disable gdm sddm lightdm# disable other DMs
$sudo systemctl enable gardm
$sudo systemctl start gardm# or reboot

On next boot (or after starting), gardm will launch the X server and display the greeter.

PAM Configuration

gardm uses PAM for authentication. Create the PAM configuration file:

# /etc/pam.d/gardm
auth       include      system-auth
account    include      system-auth
password   include      system-auth
session    required     pam_loginuid.so
session    include      system-auth
-session   optional     pam_systemd.so

The pam_systemd.so module registers sessions with systemd-logind, enabling device access for Wayland compositors and proper session tracking.

systemd Service

The RPM package includes a systemd service file. For manual installation:

# /etc/systemd/system/gardm.service
[Unit]
Description=gar Display Manager
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service
Conflicts=getty@tty1.service

[Service]
Type=notify
ExecStart=/usr/bin/gardmd
Restart=always
RestartSec=5

[Install]
Alias=display-manager.service

CLI Options

Option Type Default Description
--no-x - false Use existing X server (for development)
--display, -d - :0 or auto X display to use (e.g., :0)
--vt - auto-detect VT to use
--greeter - from config Greeter command override
--test-mode - false Run IPC server only (no greeter process)