# How to change the GDM theme

To change the GDM (lock/login screen) theme, you need to replace the system's _default_ GNOME Shell theme.

## :warning: Cautions :warning:

- If the replacement fails, your desktop environment will not work properly. So please **be careful** if doing this.
- When applying this, other third-party GNOME Shell themes would look broken until you restore to the original theme.
- If GNOME Shell has been updated and restored to the original theme, you will need to install this again.
  > Tip: On Arch Linux, you can automatically reinstall the GDM theme by creating a [hook](https://wiki.archlinux.org/index.php/Pacman#Hooks) file. For example, if you use Materia-compact as your GDM theme, put [this file](https://gist.github.com/looselyrigorous/a1aa931ce48627cc39daccc9253b30c7) in the `/usr/share/libalpm/hooks/` directory.

## Requirements

- `glib-compile-resources` — The package name depends on the distro.
  - `glib2` (Arch Linux)
  - `glib2-devel` (Fedora, openSUSE, etc.)
  - `libglib2.0-dev-bin` (Debian, Ubuntu, etc.)
- `libxml2-utils` — Ubuntu users only.

## Installation

1. **Back up** the original theme file first. If you are already using a custom GDM theme, skip this:

  ```sh
  sudo cp -av /usr/share/gnome-shell/gnome-shell-theme.gresource{,~}
  ```

2. Select a **GTK** theme to decide which variant to install.
3. Replace the default theme file:

  ```sh
  THEME_NAME="$(gsettings get org.gnome.desktop.interface gtk-theme | sed "s/'//g")"
  THEME_SRC_DIR="/usr/share/themes/$THEME_NAME/gnome-shell"
  sudo glib-compile-resources --target="/usr/share/gnome-shell/gnome-shell-theme.gresource" --sourcedir="$THEME_SRC_DIR" "$THEME_SRC_DIR/gnome-shell-theme.gresource.xml"
  ```

4. Reload the theme. If you are running GNOME Shell, press Alt + F2 then type `rt`.

## Uninstallation

1. Restore to the original theme file from the backup:

  ```sh
  sudo mv -v /usr/share/gnome-shell/gnome-shell-theme.gresource{~,}
  ```

2. Reload the theme. If you are running GNOME Shell, press Alt + F2 then type `rt`.
