You boot up and the login screen looks wrong
You switch to Fedora and spend a few weeks customizing your desktop. You change the wallpaper, tweak the font scaling, and install a few extensions. Then you log out and stare at the GDM login prompt. It still shows the default gradient. You want your custom image there, or maybe a completely different theme. You search the forums, find a three-line guide, and follow it. The next time you restart, the screen goes black. Or the changes vanish after a routine dnf upgrade. You need a reliable way to change the GDM background and theme without breaking your login session or losing your work.
What's actually happens
GDM is the GNOME Display Manager. It handles the graphical login prompt, user authentication, and session startup. It does not run as your user. It runs under a dedicated system account named gdm with its own isolated environment. When you change the desktop background in GNOME Tweaks, you are modifying dconf keys or XML files in your home directory. GDM ignores those paths entirely. It reads its own configuration file at /etc/gdm/custom.conf and expects assets in system-wide directories like /usr/share/backgrounds/gdm/.
The separation exists for stability. The login screen must remain functional even if your user profile is corrupted, your desktop environment crashes, or your home directory is mounted read-only. Because GDM operates independently, applying configuration changes requires restarting the GDM service. Restarting GDM terminates all active graphical sessions. Any open applications will close. Save your work before you proceed.
Edit /etc/ files, never /usr/lib/ files. The /etc/ directory holds user-modified configuration that survives package updates. The /usr/lib/ directory ships with the package and gets overwritten on the next dnf upgrade. Trust the package manager. Manual file edits drift, snapshots stay.
The fix
Start by placing your custom image in the correct directory. GDM expects backgrounds in /usr/share/backgrounds/gdm/. You can use PNG or JPEG. Copy the file there with root privileges and set the correct ownership.
Here is how to place the image and secure the permissions so the gdm user can read it.
sudo mkdir -p /usr/share/backgrounds/gdm
# WHY: Creates the directory if it does not exist, ensuring a valid path for GDM assets
sudo cp /path/to/your/image.png /usr/share/backgrounds/gdm/
# WHY: Copies your image into the system-wide GDM background directory
sudo chown root:root /usr/share/backgrounds/gdm/your-image.png
# WHY: Ensures the gdm user can read the file without permission errors
sudo chmod 644 /usr/share/backgrounds/gdm/your-image.png
# WHY: Sets world-readable permissions so GDM can load the image on startup
Next, edit the GDM configuration file. The file lives in /etc/gdm/custom.conf. If the file does not exist, create it. Open it with a terminal editor.
Here is how to open the configuration file and prepare it for editing.
sudo nano /etc/gdm/custom.conf
# WHY: Opens the GDM override configuration file in a terminal editor
Add or modify the [daemon] section. If the file only contains comments, create the section from scratch. Set the Background path to your new image. You can also change ThemeName to apply a different GTK theme to the login prompt. The default is usually Adwaita.
Here is the exact configuration block you need to add or modify.
[daemon]
# WHY: Tells GDM to apply these settings to the display manager session
Background=/usr/share/backgrounds/gdm/your-image.png
# WHY: Points GDM to the exact file path of your custom wallpaper
ThemeName=Adwaita
# WHY: Sets the GTK theme for the login prompt. Change this if you installed a custom GDM theme
If you want to use a custom GDM theme, download the theme archive, extract it, and place the folder in /usr/share/gdm/themes/. The folder name must match the ThemeName value exactly. GDM looks for a gdm3.css or gtk.css file inside that directory. Set the folder ownership to root:root and permissions to 755.
Save the configuration file and restart the GDM service. This command drops your current graphical session and reloads the login screen.
Here is how to apply the changes by restarting the display manager.
sudo systemctl restart gdm
# WHY: Restarts the display manager to apply the new configuration and background
Reboot before you debug. Half the time the symptom is gone.
Verify it worked
Log in and check the prompt. If you see the new image, the configuration is active. If the screen remains unchanged, verify the file path in custom.conf matches the actual location. GDM is strict about paths. A typo in the filename or a missing directory will cause it to fall back to the default gradient.
Run a status check to confirm GDM is running without errors.
Here is how to check the service state and recent log output.
systemctl status gdm
# WHY: Shows the current state of the service and recent log lines
Look for active (running) in green. If you see failed or inactive, check the journal for the exact failure reason. Most sysadmins type journalctl -xeu <unit> muscle-memory style because the x flag adds explanatory text and the e flag jumps to the end.
Here is how to pull the relevant logs for troubleshooting.
journalctl -xeu gdm
# WHY: Pulls recent GDM logs with explanatory context and jumps to the end
Run journalctl first. Read the actual error before guessing.
Common pitfalls and what the error looks like
The most common mistake is setting incorrect permissions on the background image. GDM runs as the gdm user, not root. If the file is owned by your user and lacks read permissions for others, GDM will silently ignore it. You will not see an error in the terminal. The login screen will just show the default gradient. Fix it by ensuring the file is world-readable or owned by root.
Another frequent issue is editing the wrong configuration file. Some guides point to /etc/gdm3/custom.conf. That path belongs to Debian and Ubuntu. Fedora uses /etc/gdm/custom.conf. Using the wrong path creates a file that GDM never reads.
If you break the login screen entirely, you will see a black screen with a blinking cursor or a fallback TTY prompt. Do not panic. Press Ctrl+Alt+F3 to switch to a virtual terminal. Log in with your username and password. Restart GDM from the command line.
Here is how to recover the graphical session from a TTY.
sudo systemctl restart gdm
# WHY: Recovers the graphical session by reloading the display manager
If the restart fails, check your custom.conf syntax. A missing bracket or a malformed path will prevent GDM from starting. You will see a failure message in the journal that looks like this:
gdm[1234]: Failed to load theme 'CustomTheme': No such file or directory
gdm[1234]: Gdm: Error: Theme 'CustomTheme' not found in /usr/share/gdm/themes/
systemd[1]: gdm.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: gdm.service: Failed with result 'exit-code'.
Revert the file to its original state and try again. Trust the package manager. Manual file edits drift, snapshots stay.
When to use this vs alternatives
Use the GDM configuration file when you need a permanent, system-wide login screen change that survives user logouts and desktop environment updates. Use GNOME Tweaks or the Appearance settings when you only want to change the background for your personal desktop session. Use a custom GDM theme package when you need to modify the login prompt layout, font rendering, or CSS styling. Stick to the default Fedora GDM configuration when you are running a server or a multi-user workstation where consistency matters more than customization.