βββββββ ββββββ ββββ ββββββ βββ βββββββ βββββββ βββββββββββββββββββββββββ
βββββββββββββββββββββ ββββββ ββββββββββββ βββββββββββββββββββββββββββββββββ
βββ βββββββββββββββββ ββββββββββ βββ ββββββββββββββββββ ββββββ βββ
βββ ββββββββββββββββββββββββββββ βββ βββββββββββββββββ ββββββ βββ
βββββββββββ ββββββ βββββββββ βββββββββββββββ βββββββββββββββββββ βββ
βββββββ βββ ββββββ ββββββββ βββ βββββββ βββ βββββββββββββββββββ βββ
Configuration
Custom Compositor Configurationβ
Custom compositor configurations allow you to configure displays (resolution, refresh rate, position, etc.) specifically for the greeter.
niriβ
- 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
- 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
- Edit
/etc/greetd/niri.kdlhowever you see fit, the greeter will run under this compositor configuration
Hyprlandβ
- 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
- 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
- Edit
/etc/greetd/hypr.confhowever you see fit, the greeter will run under this compositor configuration
Swayβ
- 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
- 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
- Edit
/etc/greetd/swayhowever you see fit, the greeter will run under this compositor configuration
Mangoβ
- Create a baseline configuration file at
/etc/greetd/mango.conf:
sudo tee /etc/greetd/mango.conf > /dev/null << 'EOF'
# Mango greeter configuration
EOF
- 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
- Edit
/etc/greetd/mango.confhowever you see fit, the greeter will run under this compositor configuration
Miracle WMβ
- 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
- 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
- Edit
/etc/greetd/miracle-wm.yamlhowever 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
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
greetergroup (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)
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β
| Who | Command | Needs sudo? |
|---|---|---|
| Main admin (first setup) | dms greeter sync | Yes |
| All other users (including other admins) | dms greeter sync --profile | No |
| Add users to greeter group | Settings β 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.
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, fontssession.jsonβ wallpaper configuration (paths localized into the slot)colors.jsonβ color schemeprofile.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:
- Add your user to the
greetergroup:
sudo usermod -aG greeter <username>
- 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
- 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
- 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
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
greetergroup) - β 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.
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 settingssession.json- Wallpaper configurationcolors.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.
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 clocklockDateFormat: 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-rightweatherLocation: Display name for locationweatherCoordinates:"latitude,longitude"stringuseAutoLocation: Auto-detect location via IP geolocationuseFahrenheit: 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 filematugenScheme: Matugen color scheme varianticonTheme: Icon theme name for DankIcon fallbacksfontFamily: Primary font familyfontWeight: Font weight (400= normal,700= bold)fontScale: Font size multiplier (1.0= default)cornerRadius: Corner radius in pixels for UI elementswidgetBackgroundColor: 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 monitorswallpaperFillMode: 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 outputsorhyprctl monitors - Value formats:
- File paths:
/path/to/image.jpg - Solid colors:
#RRGGBBformat - Wallpaper Engine:
we:workshop_idformat
- File paths:
- Key: Monitor name from
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"
}
}