Skip to main content
Version: 1.5
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ•—  β–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•”β•β•β•β•β• β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•β•šβ•β•β–ˆβ–ˆβ•”β•β•β•
β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—     β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•  β–ˆβ–ˆβ•”β•β•β•     β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•‘
β•šβ•β•β•β•β•β• β•šβ•β•  β•šβ•β•β•šβ•β•  β•šβ•β•β•β•β•šβ•β•  β•šβ•β• β•šβ•β•β•β•β•β• β•šβ•β•  β•šβ•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•   β•šβ•β•
                                                                          

Configuration

Custom Compositor Configuration​

tip

Custom compositor configurations allow you to configure displays (resolution, refresh rate, position, etc.) specifically for the greeter.

niri​

  1. Create a baseline configuration file at /etc/greetd/niri.kdl:
sudo tee /etc/greetd/niri.kdl > /dev/null << 'EOF'
hotkey-overlay {
skip-at-startup
}

environment {
DMS_RUN_GREETER "1"
}

gestures {
hot-corners {
off
}
}

layout {
background-color "#000000"
}
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command niri -C /etc/greetd/niri.kdl"
#...existing configuration
  1. Edit /etc/greetd/niri.kdl however you see fit, the greeter will run under this compositor configuration

Hyprland​

  1. Create a baseline configuration file at /etc/greetd/hypr.conf:
sudo tee /etc/greetd/hypr.conf > /dev/null << 'EOF'
env = DMS_RUN_GREETER,1

misc {
disable_hyprland_logo = true
}
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command hyprland -C /etc/greetd/hypr.conf"
#...existing configuration
  1. Edit /etc/greetd/hypr.conf however you see fit, the greeter will run under this compositor configuration

Sway​

  1. Create a baseline configuration file at /etc/greetd/sway:
sudo tee /etc/greetd/sway > /dev/null << 'EOF'
# Sway greeter configuration
# The exec command to launch the greeter is automatically appended by dms-greeter
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command sway -C /etc/greetd/sway"
#...existing configuration
  1. Edit /etc/greetd/sway however you see fit, the greeter will run under this compositor configuration

Mango​

  1. Create a baseline configuration file at /etc/greetd/mango.conf:
sudo tee /etc/greetd/mango.conf > /dev/null << 'EOF'
# Mango greeter configuration
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command mango -C /etc/greetd/mango.conf"
#...existing configuration
  1. Edit /etc/greetd/mango.conf however you see fit, the greeter will run under this compositor configuration

Miracle WM​

  1. Create a baseline configuration file at /etc/greetd/miracle-wm.yaml:
sudo tee /etc/greetd/miracle-wm.yaml > /dev/null << 'EOF'
# Miracle WM greeter configuration
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command miracle-wm -C /etc/greetd/miracle-wm.yaml"
#...existing configuration
  1. Edit /etc/greetd/miracle-wm.yaml however you see fit, the greeter will run under this compositor configuration

Syncing with DMS​

You can automatically sync the system greeter with the logged in user's wallpaper, themes, fonts, etc.

Automatic Sync​

You can use dms greeter sync to automatically set up theme syncing. This command is available for:

  • dankinstall users
  • Arch AUR users
  • Fedora COPR users
note

NixOS users: The dms greeter sync command is not available on NixOS. Please follow the manual sync steps below.

dms greeter sync

This will:

  • Add your user to the greeter group (if needed)
  • Set up ACL permissions on parent directories for greeter access
  • Configure group permissions on DMS config directories
  • Create symlinks to sync settings, wallpapers, and color themes
  • Copy your per-user theme slot to /var/cache/dms-greeter/users/<username>/ (for multi-account picker preview)
note

After running dms greeter sync, you will need to log out and log back in for group membership changes to take effect. After logging back in, your greeter will automatically reflect your current DMS theme, wallpaper, and settings.

Multi-user systems​

On a shared PC, each account can have its own greeter theme and profile photo on the login screen. DMS shows a user picker (avatar + inline list) when more than one local account exists.

Recommended workflow: One main admin runs dms greeter sync once (system setup). Every other accountβ€”including other sudo adminsβ€”uses dms greeter sync --profile only. Full sync from multiple accounts repoints root cache symlinks and greetd; --profile updates only that user's login-screen slot.

Roles​

WhoCommandNeeds sudo?
Main admin (first setup)dms greeter syncYes
All other users (including other admins)dms greeter sync --profileNo
Add users to greeter groupSettings β†’ Users (toggle) or sudo usermod -aG greeter <user>Yes (Polkit or sudo)

Full dms greeter sync only adds the user running the command to the greeter group. You must add other accounts explicitly.

Adding users to the greeter group (admin)​

GUI (recommended): In DMS, open Settings β†’ Users. Use the greeter access toggle (login icon) on each account, or enable Allow greeter login access when creating a user. DMS runs usermod -aG for granting administrator access to the user.

note

After you add someone to the greeter group, they must log out and back in before group membership applies, then run dms greeter sync --profile on their account.

CLI alternative:

sudo usermod -aG greeter otheruser1 otheruser2

Each added user must log out and back in, then sync their own slot:

dms greeter sync --profile

One-time setup (main admin)​

# Configure greetd, ACLs, and your own theme slot
dms greeter sync

Then add every other accountβ€”either in Settings β†’ Users (greeter toggle) or from a terminal:

sudo usermod -aG greeter alice bob charlie

Per-user setup (everyone except the main admin)​

After logging out and back in (so the greeter group applies):

dms greeter sync --profile

This writes only to /var/cache/dms-greeter/users/<your-username>/ β€” settings, colors, wallpapers, and profile photo β€” without changing greetd or system configuration. Re-run after theme changes.

What gets stored per user​

Under /var/cache/dms-greeter/users/<username>/:

  • settings.json β€” theme, clock, weather, fonts
  • session.json β€” wallpaper configuration (paths localized into the slot)
  • colors.json β€” color scheme
  • profile.jpg (or .png) β€” profile photo for the user picker
  • Wallpaper image copies as needed

The root cache (/var/cache/dms-greeter/settings.json, etc.) remains the default fallback when no per-user slot exists or no user is selected yet.

Developer note: --local​

When developing from a DMS checkout, only the primary admin should use:

dms greeter sync --local

All other accounts use dms greeter sync --profile. If greetd is already configured with a -p path to a shared checkout, the main admin can refresh that path with --local; other users should not need it.

Not the same as Switch User​

DMS Switch User in the running session (dms switch-user) switches between active Wayland sessions. The greeter user picker lists local login accounts from the system password database for signing in after logout or reboot.

Manual Sync​

If you prefer to set up syncing manually:

  1. Add your user to the greeter group:
sudo usermod -aG greeter <username>
  1. Set up ACL permissions on parent directories:
setfacl -m u:greeter:x ~
setfacl -m u:greeter:x ~/.config
setfacl -m u:greeter:x ~/.local
setfacl -m u:greeter:x ~/.cache
setfacl -m u:greeter:x ~/.local/state
  1. Set group permissions on DMS config directories:
sudo chgrp -R greeter ~/.config/DankMaterialShell
sudo chmod -R g+rX ~/.config/DankMaterialShell

sudo chgrp -R greeter ~/.local/state/DankMaterialShell
sudo chmod -R g+rX ~/.local/state/DankMaterialShell

sudo chgrp -R greeter ~/.cache/quickshell
sudo chmod -R g+rX ~/.cache/quickshell
  1. Create configuration symlinks:
sudo mkdir -p /var/cache/dms-greeter
sudo ln -sf ~/.config/DankMaterialShell/settings.json /var/cache/dms-greeter/settings.json
sudo ln -sf ~/.local/state/DankMaterialShell/session.json /var/cache/dms-greeter/session.json
sudo ln -sf ~/.cache/quickshell/dankshell/dms-colors.json /var/cache/dms-greeter/colors.json
note

You will have to logout or reboot for group change to take effect.

Checking Sync Status​

To verify that your greeter is properly configured and syncing with your user settings, run:

dms greeter status

This command is available for all users and will check:

  • βœ“ Group membership (whether your user is in the greeter group)
  • βœ“ Cache directory existence
  • βœ“ Configuration symlinks (settings, wallpaper, colors)
  • βœ“ Whether source files exist and are readable

Example Output​

=== DMS Greeter Status ===

Group Membership:
βœ“ User is in greeter group

Greeter Cache Directory:
βœ“ /var/cache/dms-greeter exists

Configuration Symlinks:
βœ“ Settings: synced correctly
βœ“ Session state: synced correctly
βœ“ Color theme: synced correctly

Per-user slots (multi-account):
βœ“ users/alice/ β€” synced
βœ“ users/bob/ β€” not synced (run: dms greeter sync --profile)

βœ“ All checks passed! Greeter is properly configured.

Troubleshooting​

If dms greeter status shows issues:

User not in greeter group:

dms greeter sync
# Then log out and log back in

Symlinks missing or broken:

dms greeter sync

Secondary user cannot run full sync (not in sudoers):

# Admin: Settings β†’ Users β†’ enable greeter access for that account
# Or: sudo usermod -aG greeter <username>
# User logs out/in, then:
dms greeter sync --profile

Per-user theme not showing in picker:

# Run on that user's account after group membership is active:
dms greeter sync --profile
# Log out to see the updated theme on the login screen

ACL permission issues (themes/wallpapers not appearing):

# Check if ACLs are set
getfacl ~ ~/.config ~/.local ~/.cache ~/.local/state | grep "user:greeter"

# If not, run sync again
dms greeter sync

Auto-login on startup​

Auto-login skips the greeter password after boot β€” similar to the auto-login option in SDDM or GDM β€” until you sign out. It uses greetd's native [initial_session], so:

  • After a reboot you land straight in your session without entering a password at the greeter.
  • Signing out returns you to the normal greeter, where a password is required.
  • Your lock screen is unaffected β€” unlocking always requires your password.
warning

Auto-login reduces physical security: anyone who powers on or reboots the machine reaches your session without a password. Only enable it on machines you physically trust, ideally with full-disk encryption.

Requirements​

Auto-login needs to know which user and session to start, so it requires Remember last user and Remember last session (both enabled by default). The first login is always interactive β€” DMS remembers the user and session you pick, then auto-logs in on subsequent boots.

Enabling and disabling​

From Settings (recommended): open Settings β†’ Greeter and toggle Sign in automatically on startup. DMS updates greetd in the background and shows a confirmation; the change takes effect on your next reboot. Turn the same toggle off to require a password again.

From the login screen: on the password screen, tap the Auto-login chip before signing in. Auto-login is enabled once you reach your desktop.

If administrator access is needed and passwordless sudo isn't configured, DMS opens a terminal so you can enter your sudo password; it closes automatically when finished.

CLI​

The toggles run a focused sync under the hood. You can also apply just the auto-login state from a terminal:

dms greeter sync --autologin

Unlike a full dms greeter sync, this updates only greetd's [initial_session] block β€” adding it (with your remembered user and session) when enabled, or removing it when disabled β€” and skips the theme, ACL, and permission steps. It reads the greeterAutoLogin setting from your DMS configuration, so run it after changing that setting if you ever need to re-apply greetd manually.

Manual Configuration​

The greeter uses three main configuration files located in /var/cache/dms-greeter/. If you defined a custom directory, it will be in DMS_GREET_CFG_DIR. For NixOS users it is under /var/lib/dms-greeter/:

  • settings.json - Appearance, behavior, and widget settings
  • session.json - Wallpaper configuration
  • colors.json - Color scheme configuration

On multi-user systems, each account may also have a copied slot under /var/cache/dms-greeter/users/<username>/ with the same file names plus localized wallpapers and a profile.* image for the user picker. See Multi-user systems above.

note

These files are read-only by the greeter, not written or updated.

Colors​

Colors can be configured in the exact same way described in DankMaterialShell Custom Themes

Settings​

The settings.json file controls the greeter's appearance and behavior. Here's a complete reference:

Clock & Time​

{
"use24HourClock": true,
"showSeconds": false,
"lockDateFormat": ""
}
  • use24HourClock: Use 24-hour format (true) or 12-hour format (false)
  • showSeconds: Display seconds in the clock
  • lockDateFormat: Custom Qt date format string (empty = Locale.LongFormat)

Weather​

{
"weatherEnabled": true,
"weatherLocation": "New York, NY",
"weatherCoordinates": "40.7128,-74.0060",
"useAutoLocation": false,
"useFahrenheit": false
}
  • weatherEnabled: Show weather widget in top-right
  • weatherLocation: Display name for location
  • weatherCoordinates: "latitude,longitude" string
  • useAutoLocation: Auto-detect location via IP geolocation
  • useFahrenheit: Use Fahrenheit (true) or Celsius (false)

Appearance​

{
"currentThemeName": "blue",
"customThemeFile": "",
"matugenScheme": "scheme-tonal-spot",
"iconTheme": "System Default",
"fontFamily": "Inter Variable",
"fontWeight": 400,
"fontScale": 1.0,
"cornerRadius": 12,
"widgetBackgroundColor": "sch",
"surfaceBase": "s",
"animationSpeed": 2
}
  • currentThemeName: Built-in theme name ("blue", "red", "green", etc.)
  • customThemeFile: Path to custom matugen JSON theme file
  • matugenScheme: Matugen color scheme variant
  • iconTheme: Icon theme name for DankIcon fallbacks
  • fontFamily: Primary font family
  • fontWeight: Font weight (400 = normal, 700 = bold)
  • fontScale: Font size multiplier (1.0 = default)
  • cornerRadius: Corner radius in pixels for UI elements
  • widgetBackgroundColor: Widget background scheme ("sch", "s", "sv")
  • surfaceBase: Surface base color scheme ("s", "sv", "sb")
  • animationSpeed: Animation speed (0 = fastest, 4 = slowest, 2 = default)

Complete Example​

/var/cache/dms-greeter/settings.json:

{
"use24HourClock": true,
"showSeconds": false,
"lockDateFormat": "",
"lockScreenShowPowerActions": true,
"useFahrenheit": false,
"weatherLocation": "New York, NY",
"weatherCoordinates": "40.7128,-74.0060",
"useAutoLocation": false,
"weatherEnabled": true,
"currentThemeName": "blue",
"customThemeFile": "",
"matugenScheme": "scheme-tonal-spot",
"nightModeEnabled": false,
"iconTheme": "System Default",
"fontFamily": "Inter Variable",
"fontWeight": 400,
"fontScale": 1.0,
"cornerRadius": 12,
"widgetBackgroundColor": "sch",
"surfaceBase": "s",
"animationSpeed": 2
}

Wallpapers​

The session.json file controls wallpaper settings.

Basic Configuration​

{
"wallpaperPath": "/path/to/wallpaper.jpg",
"wallpaperFillMode": "PreserveAspectCrop"
}
  • wallpaperPath: Default wallpaper for all monitors
  • wallpaperFillMode: Qt fill mode
    • "PreserveAspectCrop" - Crop to fill (default)
    • "PreserveAspectFit" - Fit within bounds
    • "Stretch" - Stretch to fill

Per-Monitor Wallpapers​

{
"wallpaperPath": "/path/to/default.jpg",
"wallpaperFillMode": "PreserveAspectCrop",
"monitorWallpapers": {
"DP-1": "/path/to/monitor1-wallpaper.jpg",
"DP-2": "/path/to/monitor2-wallpaper.jpg",
"HDMI-A-1": "#1a1a1a"
}
}
  • monitorWallpapers: Per-monitor wallpaper overrides
    • Key: Monitor name from niri msg outputs or hyprctl monitors
    • Value formats:
      • File paths: /path/to/image.jpg
      • Solid colors: #RRGGBB format
      • Wallpaper Engine: we:workshop_id format

Complete Example​

/var/cache/dms-greeter/session.json:

{
"wallpaperPath": "/usr/share/backgrounds/default.jpg",
"wallpaperFillMode": "PreserveAspectCrop",
"monitorWallpapers": {
"DP-1": "/home/user/Pictures/wallpaper-main.png",
"DP-2": "#2e3440",
"HDMI-A-1": "/home/user/Pictures/wallpaper-side.jpg"
}
}