GDM

From GDM - GNOME Display Manager:

The GNOME Display Manager (GDM) is a program that manages graphical display servers and handles graphical user logins.

Display managers provide X Window System users with a graphical login prompt.

Installation

GDM can be installed with the gdm package, and it is installed as part of the gnome group. To start GDM at boot time enable gdm.service.

If you would prefer to use legacy GDM which was used in GNOME 2 and has its own configuration utility, install the gdm-oldAUR package. Note that the rest of this article discusses current GDM, not legacy GDM, unless indicated otherwise.

You might also wish to install the following:

  • gdm3setup — An interface to configure GDM3, autologin options and change Shell theme
https://github.com/Nano77/gdm3setup || gdm3setupAUR

Configuration

Log-in screen background image

Note: Since GNOME 3.16, GNOME Shell themes are now stored binary files (gresource).

Firstly, you need to extract the existing GNOME Shell theme to a folder in your home directory. You can do this using the following script:

extractgst.sh
#!/bin/sh

workdir=${HOME}/shell-theme
if [ ! -d ${workdir}/theme ]; then
  mkdir -p ${workdir}/theme
fi
gst=/usr/share/gnome-shell/gnome-shell-theme.gresource

for r in `gresource list $gst`; do
        gresource extract $gst $r >$workdir${r/#\/org\/gnome\/shell/}
done

Navigate to the created directory. You should find that the theme files have been extracted to it. Now copy your preferred background image to this directory.

Next, you need to create a file in the directory with the following content:

gnome-shell-theme.gresource.xml
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/org/gnome/shell/theme">
    <file>calendar-arrow-left.svg</file>
    <file>calendar-arrow-right.svg</file>
    <file>calendar-today.svg</file>
    <file>checkbox-focused.svg</file>
    <file>checkbox-off-focused.svg</file>
    <file>checkbox-off.svg</file>
    <file>checkbox.svg</file>
    <file>close-window.svg</file>
    <file>close.svg</file>
    <file>corner-ripple-ltr.png</file>
    <file>corner-ripple-rtl.png</file>
    <file>dash-placeholder.svg</file>
    <file>filter-selected-ltr.svg</file>
    <file>filter-selected-rtl.svg</file>
    <file>gnome-shell.css</file>
    <file>gnome-shell-high-contrast.css</file>
    <file>logged-in-indicator.svg</file>
    <file>filename</file>
    <file>more-results.svg</file>
    <file>no-events.svg</file>
    <file>no-notifications.svg</file>
    <file>noise-texture.png</file>
    <file>page-indicator-active.svg</file>
    <file>page-indicator-inactive.svg</file>
    <file>page-indicator-checked.svg</file>
    <file>page-indicator-hover.svg</file>
    <file>process-working.svg</file>
    <file>running-indicator.svg</file>
    <file>source-button-border.svg</file>
    <file>summary-counter.svg</file>
    <file>toggle-off-us.svg</file>
    <file>toggle-off-intl.svg</file>
    <file>toggle-on-us.svg</file>
    <file>toggle-on-intl.svg</file>
    <file>ws-switch-arrow-up.png</file>
    <file>ws-switch-arrow-down.png</file>
  </gresource>
</gresources>

Replace filename with the filename of your background image.

Now, open the gnome-shell.css file in the directory and change the #lockDialogGroup definition as follows:

#lockDialogGroup {
  background: #2e3436 url(filename);
  background-size: [WIDTH]px [HEIGHT]px;
  background-repeat: no-repeat;
}

Set background-size to the resolution that GDM uses, this might not necessarily be the resolution of the image. For a list of display resolutions see Display resolution. Again, set filename to be the name of the background image.

Finally, compile the theme using the following command:

$ glib-compile-resources gnome-shell-theme.gresource.xml

Then copy the resulting gnome-shell-theme.gresource file to the /usr/share/gnome-shell directory.

Restart GDM - you should find that it is using your preferred background image.

For more information, please see the following forum thread.

Tango-dialog-warning.png

Tango-dialog-warning.png

This article or section is out of date.

Reason: I cannot get this to work - tested 2015-07-16. Similar style method for changing the wallpaper was established to be non functional and removed from the article. (Discuss in Talk:GDM#)

To display a logo on your log-in screen, follow the instructions below.

Create the directory to store the logo:

# mkdir /opt/login

Create the necessary configuration file:

# touch /etc/dconf/db/gdm.d/02-logo

Copy this text into the file:

[org/gnome/login-screen]
logo='/opt/login/logo.png'

Copy your logo of choice into the directory:

# cp [YOUR FILE] /opt/login/logo.png

where [YOUR FILE] needs to be a path to a PNG image.

Update dconf:

# dconf update

Changing the GDM cursor theme

See Cursor themes#GDM.

Larger font for log-in screen

Click on the accessibility icon at the top right of the screen (a white circle with the silhouette of a person in the centre) and check the 'Large Text' option.

Tango-dialog-warning.png

Tango-dialog-warning.png

This article or section is out of date.

Reason: I cannot get this to work - tested 2015-07-16. Similar style method for changing the wallpaper was established to be non functional and removed from the article. (Discuss in Talk:GDM#)

Alternatively, follow the instructions below:

Create the necessary configuration file:

# touch /etc/dconf/db/gdm.d/03-scaling

Copy this text into the file:

[org/gnome/desktop/interface]
text-scaling-factor='1.25'

Update dconf:

# dconf update

Turning off the sound

This tweak disables the audible feedback heard when the system volume is adjusted (via keyboard) on the login screen.

Create the necessary configuration file:

# touch /etc/dconf/db/gdm.d/04-sound

Copy this text into the file:

[org/gnome/desktop/sound]
event-sounds='false'

Update dconf:

# dconf update

Make the power button interactive

The default installation sets the power button to suspend the system. Power off or Show dialog is a better choice.

Create the necessary configuration file:

# touch /etc/dconf/db/gdm.d/05-power

Copy this text into the file:

[org/gnome/settings-daemon/plugins/power button]
power='interactive'
hibernate='interactive'

Update dconf:

# dconf update
Warning: Please note that the acpid daemon also handles the "power button" and "hibernate button" events. Running both systems at the same time may lead to unexpected behaviour.

Prevent suspend when closing the lid

Some laptops may experience behaviour where the laptop suspends when the lid is closed despite having set the options Laptop lid close action on battery and Laptop lid close action on AC to blank. If this is the case uncomment the HandleLidSwitch line in the /etc/systemd/logind.conf file and change the value to ignore. The value is set to suspend by default.

GDM keyboard layout

See Keyboard configuration in Xorg#Using X configuration files.

Tip: See Wikipedia:ISO 3166-1 for a list of keymaps.

GNOME Control Center

If the package gnome-control-center is installed, the keyboard layout(s) can be configured using a grapical frontend:

Settings > Keyboard > Input Sources > Login Screen

GDM 2.x layout

Users of legacy GDM may need to follow the instructions below:

Edit ~/.dmrc:

~/.dmrc
[Desktop]
Language=de_DE.UTF-8   # change to your default lang
Layout=de   nodeadkeys # change to your keyboard layout

Change the language

To change the GDM language, edit the file /var/lib/AccountsService/users/gdm and change the language line using the correct UTF-8 value for your language. You should see something similar to the text below:

/var/lib/AccountsService/users/gdm
[User]
Language=fr_FR.UTF-8
XSession=
SystemAccount=true

Now just reboot your computer.

Once you have rebooted, if you look at the /var/lib/AccountsService/users/gdm file again, you will see that the language line is cleared — do not worry, the language change has been preserved.

Automatic login

To enable automatic login with GDM, add the following to /etc/gdm/custom.conf (replace username with your own):

/etc/gdm/custom.conf
# Enable automatic login for user
[daemon]
AutomaticLogin=username
AutomaticLoginEnable=True
Warning: If GDM fails after adding these lines, comment them out from a TTY.

or for an automatic login with a delay:

/etc/gdm/custom.conf
[daemon]

TimedLoginEnable=true
TimedLogin=username
TimedLoginDelay=1

Passwordless login

If you want to bypass the password prompt in GDM then simply add the following line on the first line of /etc/pam.d/gdm-password:

auth sufficient pam_succeed_if.so user ingroup nopasswdlogin

Then, add the group nopasswdlogin to your system. See Groups for group descriptions and group management commands.

Now, add your user to the nopasswdlogin group and you will only have to click on your username to login.

Warning:
  • Do not do this for a root account.
  • You won't be able to change your session type at login with GDM anymore. If you want to change your default session type, you will first need to remove your user from the nopasswdlogin group.

Passwordless shutdown for multiple sessions

GDM uses polkit and logind to gain permissions for shutdown. You can shutdown the system when multiple users are logged in by setting:

/etc/polkit-1/localauthority.conf.d/org.freedesktop.logind.policy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">


<policyconfig>

  <action id="org.freedesktop.login1.power-off-multiple-sessions">
    <description>Shutdown the system when multiple users are logged in</description>
    <message>System policy prevents shutting down the system when other users are logged in</message>
    <defaults>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

</policyconfig>

You can find all available logind options (e.g. reboot-multiple-sessions) here.

Add or edit GDM sessions

Each session is a .desktop file located at /usr/share/xsessions/.

To add a new session:

1. Copy an existing .desktop file to use as a template for a new session:

$ cd /usr/share/xsessions
# cp gnome.desktop other.desktop

2. Modify the template .desktop file to open the required window manager:

# nano other.desktop

If you happen to have KDM installed in parallel, you can alternatively open the new session in KDM which will create the new .desktop file. Then return to using GDM and the new session will be available.

See also Display manager#Session list.

Enable root login in GDM

It is not advised to login as root, but if necessary you can edit /etc/pam.d/gdm-password and add the following line before the line auth required pam_deny.so:

/etc/pam.d/gdm-password

auth            sufficient      pam_succeed_if.so uid eq 0 quiet

The file should look something like this:

/etc/pam.d/gdm-password

...
auth            sufficient      pam_succeed_if.so uid eq 0 quiet
auth            sufficient      pam_succeed_if.so uid >= 1000 quiet
auth            required        pam_deny.so
...

You should be able to login as root after restarting GDM.

Hide user from login list

The users for the gdm user list are gathered by accountsservice. It will automatically hide system users (UID < 1000). To hide ordinary users from the login list create or edit a file named after the user to hide in /var/lib/AccountsService/users/ to contain at least:

/var/lib/AccountsService/users/<username>
[User]
SystemAccount=true

Rotate login screen

If you have your monitors setup as you like (orientation, primary and so on) in ~/.config/monitors.xml and want GDM to honor those settings:

# cp ~/.config/monitors.xml /var/lib/gdm/.config/monitors.xml

Changes will take effect on logout. This is necessary because GDM does not respect xorg.conf.

xrandr at login

If you want to run a script using xrandr that affects the login screen you must add a script in /etc/X11/xinit/xinitrc.d since GDM is not respecting or launching the scripts in /etc/gdm/Init.

For example, to select automatically a external screen connected through HDMI:

extractgst.sh
#!/bin/sh
EXTERNAL_OUTPUT="HDMI1"
INTERNAL_OUTPUT="eDP1"
if (xrandr | grep $EXTERNAL_OUTPUT | grep " connected "); then
    xrandr --output $INTERNAL_OUTPUT --off --output $EXTERNAL_OUTPUT --auto
        echo "extmonitor" >> /home/oscar/gdmtest
else
   xrandr --output $INTERNAL_OUTPUT --auto
fi

Configure X server access permission

You can use the xhost command to configure X server access permissions.

For instance, to grant GDM the right to access the X server, use the following command:

# xhost +SI:localuser:gdm

Troubleshooting

Failure to start with AMD Catalyst driver

Downgrade the xorg-server package or try to use another display manager like LightDM.

Failure on logout

If GDM starts up properly on boot, but fails after repeated attempts on logout, try adding this line to the daemon section of /etc/gdm/custom.conf:

GdmXserverTimeout=60

Xorg 1.16

See Xorg#Rootless Xorg (v1.16).

Use Xorg backend

As of GDM version 3.16, the Wayland backend is used by default and the Xorg backend is used only if the Wayland backend cannot be started. As the Wayland backend has been reported to cause problems for some users, use of the Xorg backend may be necessary. To use the Xorg backend by default, edit the /etc/gdm/custom.conf file and uncomment the following line:

#WaylandEnable=false

See also