A display manager, or login manager, is typically a graphical user interface that is displayed at the end of the boot process in place of the default shell. There are various implementations of display managers, just as there are various types of window managers and desktop environments. There is usually a certain amount of customization and themeability available with each one.
List of display managers
- CDM — Ultra-minimalistic, yet full-featured login manager written in Bash.
- Console TDM — Extension for xinit written in pure Bash.
- nodm — Minimalistic display manager for automatic logins, unmaintained since 2017.
- Ly — Lightweight TUI (ncurses-like) display manager for Linux and BSD.
- tbsm — A pure bash session or application launcher. Supports X and Wayland sessions.
- emptty — Dead simple CLI Display Manager on TTY with X and Wayland support.
- udm — A micro display manager (like cdm, tdm etc.) with Wayland and multi display/session support. Written in POSIX shell with zero dependencies and having only ~38 SLOC.
- || AUR
- LightDM — Cross-desktop display manager, can use various front-ends written in any toolkit.
- XDM — X display manager with support for XDMCP, host chooser.
- greetd — Minimal, flexible and agnostic login daemon which supports both console and graphical greeters.
Loading the display manager
This should work out of the box. If not, you might have to reset a custom
default.target symlink to point to the default
graphical.target. See systemd#Change default target to boot into.
After enabling SDDM a symlink
display-manager.service should be set in
/etc/systemd/system/. You may need to use
--force to override old symlinks.
$ file /etc/systemd/system/display-manager.service
/etc/systemd/system/display-manager.service: symbolic link to /usr/lib/systemd/system/sddm.service
In order to check the status of your user session, you can use loginctl. All polkit actions like suspending the system or mounting external drives will work out of the box.
$ loginctl show-session $XDG_SESSION_ID
Many display managers read available sessions from
/usr/share/xsessions/ directory. It contains standard desktop entry files for each desktop environment or window manager. Some display managers use a separate
/usr/share/wayland-sessions/ to list Wayland-specific sessions.
To add/remove entries to your display manager's session list; create/remove the .desktop files in
/usr/share/xsessions/ as desired. A typical .desktop file will look something like:
[Desktop Entry] Name=Openbox Comment=Log in using the Openbox window manager (without a session manager) Exec=/usr/bin/openbox-session TryExec=/usr/bin/openbox-session Icon=openbox.png Type=Application
Run ~/.xinitrc as a session
Installing xinitrc as a session. Simply set
xinitrc as the session in your display manager's settings and make sure that the
~/.xinitrc file is executable.
Starting applications without a window manager
You can also launch an application without any decoration, desktop, or window management. For example to launch
web-browser.desktop file in
/usr/share/xsessions/ like this:
[Desktop Entry] Name=Web Browser Comment=Use a web browser as your session Exec=/usr/bin/google-chrome --auto-launch-at-startup TryExec=/usr/bin/google-chrome --auto-launch-at-startup Icon=google-chrome Type=Application
In this case, once you login, the application set with
Exec will be launched immediately. When you close the application, you will be taken back to the login manager (same as logging out of a normal desktop environment or window manager).
It is important to remember that most graphical applications are not intended to be launched this way and you might have manual tweaking to do or limitations to live with (there is no window manager, so do not expect to be able to move or resize any windows, including dialogs; nonetheless, you might be able to set the window geometry in the application's configuration files).
Tips and tricks
Most display managers source
/etc/X11/xinit/xinitrc.d/. For more details, see xprofile.
Set language for user session
where your_locale is a value such as
Alternatively, you can achieve this using D-Bus:
busctl call org.freedesktop.Accounts /org/freedesktop/Accounts/User$UID org.freedesktop.Accounts.User SetLanguage s your_locale
Log out and then back in again for the changes to take effect.