The script hereafter is outdated and has been replaced by a newer version. Please Check the Download page for latest version. How to instructions are also available on this page |
Hello World,
Since Ubuntu 21.04 has been released and since the Yaru theme has been redesigned, there is a need to update our Change-Gdm-background script. If you try to run the version 3.1 against Ubuntu 21.04, it will work partially. You will be able to change to set a solid background color. However, if you want to display an image as background, the change will not be recognized. Version 3.2 of our script has been updated and add mainly support to Ubuntu 21.04 and also fixes the issue when the image option is selected.
The version 3.2 works exactly the same way as the version 3.1. Please always use the latest version of the script and check that the version of your Ubuntu machine is supported
Let’s go !
Change-Gdm-Background Script – Version 3.2
Overview
As with the previous version, the Change-gdm-background script can be used to customize the background image you see at the login screen of Ubuntu. So, yes, it’s possible to change the purple background from the login screen with either another solid color or an background image of your choice.
There are probably other ways or tools that can be used to change the login screen background image. However, we wanted to provide a relatively easy way to perform this operation. The Change-Gdm-Background-3.2.sh script offers some new features and offers the following functionalities
- support Ubuntu 18.04.x and Ubuntu 20.04 and Ubuntu 20.10 and Ubuntu 21.04
- can run multiple times
- A basic GUI interface system has been built to be more user friendly
- The script will prompt for choices. You can decide to use a solid color as background or you can decide to specify a picture to be used as background elements
- The script will prompt you to either restart the server or restart the GDM service
- the script create a custom theme folder instead of replacing the original compiled file.
- The GUI offers you the possibility to easily revert back changes if needed for Ubuntu 20.04 and later (see more below)
How to Use the Script
Disclaimer
The script is provided AS IS ! Use it at your own risk !!!
Download the script
To download the script, you have multiple options. You can from a Terminal issue the following command
wget https://www.c-nergy.be/downloads/ChangeGDM/Change-Gdm-Background-3.2.zip
You can also simply use your browser and click on the link to download the script :
Unzip the File
After downloading the zip package containing the file, you will need to unzip it first. To unzip the package, you can use the Terminal console and issue the following command
unzip Change-Gdm-Background-3.2.zip
You can also use the GUI and the Nautilus file manager to select the downloaded package, right-click on it and select the option Extract Here
Set Execute Right on the script
After downloading the script and extracting from the zip, open a Terminal console. From the Terminal console, we will mark the script as executable. To mark the script as executable, you simply navigate to the location where the script is located and you issue the following command
chmod +x Change-Gdm-Background-3.2.sh
Execute the script
In the Terminal console, Browse to the location where the script has been stored and then issue the following command
./Change-Gdm-Background-3.2.sh
You will see some output in your Terminal console and you should be prompted for a password
Click Picture for better Resolution
After entering the password, the GUI part of the script will start and you should be presented with the following dialog box
Click on Picture for Better Resolution
As you can see, you can decide to use a solid color for the login background settings or you can decide to use your favorite picture to be used at login screen.
Solid Color Selection
So, let’s assume you want to use solid color at your login screen, you have then selected the option “Solid Color as background”. Press OK. The script will then display the color palette dialog box where you can easily choose your preferred color.
Click on Picture for Better Resolution
When you are done, click on Select button. A new Dialog Box will be displayed asking you what to do next. You can decide to restart the GDM Service or simply reboot the server completely and see if the changes have been applied successfully. Select your preferred option and Press OK
Click on Picture for Better Resolution
If everything worked as expected, you should see your customized login screen displayed properly with your selected solid color displayed on the screen…
Click on Picture for Better Resolution
Picture as background
If you prefer to use a picture as background login screen, when the script is presenting your the dialog box to choose from, be sure to select the picture as background option. Press OK.
Click on Picture for Better Resolution
The File Browser dialog box will open and you will be able to easily browser and locate the image to be used. When selected, Press OK
Click on Picture for Better Resolution
Again, a new Dialog Box will be displayed asking you to either reboot the server completely or to simply restart the GDM service. Select your preferred option and Press OK. This step is mandatory in order to visualize the changes made at the login screen…..
Click on Picture for Better Resolution
After rebooting or restarting the GDM service, you should see your new customized login screen and you can proceed with the login process
Click on Picture for better Resolution
How to revert back changes via the GUI
If you ever want to revert back the changes made to you login screen and go back to default Ubuntu Theme, you can now use the gui interface to do so. The feature is working great against Ubuntu 20.04 and later. On Ubuntu 18.04, because the theme files are a little bit different, it should be working but you will need to reboot the system to have it working properly
Click on Picture for better Resolution
How to revert back changes if something goes wrong
If something goes really wrong (for example, your login screen is gray and all the elements are overlapping each others) and you cannot use the gnome login screen, you can try to switch to command line login prompt (Press Ctrl+Alt-F2). Provide your credentials and simply execute the command above, reboot the server and you should be back to your standard Ubuntu purple login screen and you should be able to proceed with the login process
Note : This command works for Ubuntu 20.04 and later
sudo update-alternatives --quiet --set gdm3-theme.gresource /usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource
For Ubuntu 18.04, you will need to login to the console and simply copy the backup file we have created before modifying the css file
sudo mv /usr/share/gnome-shell/theme/ubuntu.css.griffon /usr/share/gnome-shell/theme/ubuntu.css
Final Notes
Voila ! This is it for this post !
The Change-Gdm-Background 3.2 script has been released in order to include support for Ubuntu 21.04. Minor changes were needed in the code in order to have the script working as expected against the latest version of gnome desktop version included with this release. Again, if you detect some issues or bugs with the script, please let us know and we will try to fix it.
As we have no time at the moment, no new feature will be added in future releases and only “maintenance” releases will be made available.
Till next time
See ya
References :
- https://wiki.archlinux.org/index.php/GDM
- https://bbs.archlinux.org/viewtopic.php?id=197036
- https://unix.stackexchange.com/questions/310923/how-to-customize-gnome-login-screen-in-debian
Annex – The Script in plain text….
Important Note :
If you copy/paste the script, you might encounter some issues because font formatting might be not maintained during the copy/paste operation. Please ensure that format is accurate before launching the script. The content of the script is presented hereafter so people can review it and see what it’s doing….. A downloadable version of the script is available here
Disclaimer : As usual, use this at your own risk !!
#!/bin/bash ########################################################################## # Script_Name : Change-Gdm-Background-3.2.sh # # Description : Change background image of the GDM Login screen # # on ubuntu 18.04,20.04 and 20.10, 21.04 # # Date : May 2021 # # written by : Griffon # # Web Site :https://www.c-nergy.be - https://www.c-nergy.be/blog # # Version : 3.2 # # History : 3.2 - Adding Support to Ubuntu 21.04 # # - Updating Code Picture background # # 3.1 - Adding Support to Ubuntu 20.10 # # 3.0 - Adding Support to Ubuntu 20.04 # # - New Code structure # # - Added Solid Color Palette GUI # # 2.0 - Updated Version to support 17.10,18.04,18.10 # # 1.0 - Initial Release Ubuntu 17.10 # # # # Disclaimer : Script provided AS IS. Use it at your own risk.... # # You can use this script and distribute it as long as # # credits are kept in place and unchanged # # # ########################################################################## #---------------------------------------------------# # Script Version information Displayed # #---------------------------------------------------# #---------------------------------------------------# # Variables and Constants # #---------------------------------------------------# #--Automating Script versioning ScriptVer="3.2" echo /bin/echo -e "\e[1;36m !----------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;36m ! Change-Gdm-Background script - Ver. $ScriptVer !\e[0m" /bin/echo -e "\e[1;36m ! Written by Griffon - May 2021 !\e[0m" /bin/echo -e "\e[1;36m ! www.c-nergy.be !\e[0m" /bin/echo -e "\e[1;36m !----------------------------------------------------------------!\e[0m" echo /bin/echo -e "\e[1;38m !----------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;38m ! Disclaimer !\e[0m" /bin/echo -e "\e[1;38m ! !! Script provided AS IS. Use it at your own risk.!! !\e[0m" /bin/echo -e "\e[1;38m !----------------------------------------------------------------!\e[0m" echo #--------------------------------------------------------------------------# # -----------------------Function Section - DO NOT MODIFY -----------------# #--------------------------------------------------------------------------# #---------------------------------------------------# # Function 0 - check for supported OS version ....# #---------------------------------------------------# check_os() { echo /bin/echo -e "\e[1;33m |-| Detecting Ubuntu version \e[0m" case $version in *"Ubuntu 18.04"*) /bin/echo -e "\e[1;32m |-| Ubuntu Version : $version\e[0m" call_gui_choice gdm_1804 ;; *"Ubuntu 20.04"*) /bin/echo -e "\e[1;32m |-| Ubuntu Version : $version\e[0m" call_gui_choice gdm_2004 ;; *"Ubuntu 20.10"*) /bin/echo -e "\e[1;32m |-| Ubuntu Version : $version\e[0m" call_gui_choice gdm_2004 ;; *"Ubuntu 21.04"*) /bin/echo -e "\e[1;32m |-| Ubuntu Version : $version\e[0m" call_gui_choice gdm_2004 ;; *) /bin/echo -e "\e[1;31m !--------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;31m ! Your system is not running a supported version !\e[0m" /bin/echo -e "\e[1;31m ! The script has been tested only on the following versions !\e[0m" /bin/echo -e "\e[1;31m ! 18.04.x/20.04.x/20.10/21.04 !\e[0m" /bin/echo -e "\e[1;31m ! The script is exiting... !\e[0m" /bin/echo -e "\e[1;31m !--------------------------------------------------------------!\e[0m" echo exit ;; esac echo } #--------------------------------------------------------------------# # Function 1 - Display GUI for Change Login script # #--------------------------------------------------------------------# call_gui_choice(){ #------ Selection Dialog Box Displayed ----------------------------# echo /bin/echo -e "\e[1;33m |-| Starting Wizard Interface \e[0m" cbxChoice=$(zenity --width="500" --height="190" --list \ --title="Login Screen Background Changer" \ --text "What do you want to do ?" \ --radiolist \ --column "Choice" \ --column "Description" \ FALSE "Solid color as background" \ FALSE "Picture as background" \ FALSE "Revert back to default" 2>/dev/null) #---------Check which option has been selected - Color/picture/Nothing------# if [[ $cbxChoice = "Solid color as background" ]]; then /bin/echo -e "\e[1;32m |-| Solid color selected..Proceeding\e[0m" selectcolor=$(zenity --color-selection --show-palette 2>/dev/null) if [ -z "$selectcolor" ] then /bin/echo -e "\e[1;31m |-| No color has been chosen..Exiting\e[0m" exit else /bin/echo -e "\e[1;32m |-| Solid color ........ : $selectcolor \e[0m" fi elif [[ $cbxChoice = "Revert back to default" ]]; then /bin/echo -e "\e[1;31m |-| Resetting Ubuntu default settings\e[0m" if [[ "$version" = *"Ubuntu 18.04"* ]]; then if [ -f /usr/share/gnome-shell/theme/ubuntu.css.griffon ] then /bin/echo -e "\e[1;32m |-| Resetting Ubuntu 18.04 !\e[0m" sudo rm /usr/share/gnome-shell/theme/ubuntu.css sudo mv /usr/share/gnome-shell/theme/ubuntu.css.griffon /usr/share/gnome-shell/theme/ubuntu.css fi else sudo update-alternatives --quiet --set gdm3-theme.gresource /usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource fi call_gui_rboot echo elif [[ $cbxChoice = "Picture as background" ]]; then /bin/echo -e "\e[1;32m |-| Picture Selected...Proceeding\e[0m" pix=$(zenity --file-selection --title="select the new login image" 2>/dev/null) if [ $? -eq 1 ] then /bin/echo -e "\e[1;31m |-| No Image Selected...Exiting\e[0m" echo exit else #--Get the File Name only not the full path -----## fname=$(basename "$pix") fi else /bin/echo -e "\e[1;31m |-| No option Selected...Exiting\e[0m" echo exit fi } #--------------------------------------------------------------------# # Function 2 - Reboot function # #--------------------------------------------------------------------# call_gui_rboot(){ cbxReboot=$(zenity --width="500" --height="170" --list \ --title="Restart GDM Service or Reboot ?" \ --text "Select which option is best for you?" \ --radiolist \ --column "Choice" \ --column "Description" \ FALSE "Reboot Now (Recommended)" \ FALSE "Restart GDM service" 2>/dev/null) #---------Check which option has been selected - Color/picture/Nothing------# if [[ $cbxReboot = "Reboot Now (Recommended)" ]]; then /bin/echo -e "\e[1;32m |-| want to reboot....;:-) \e[0m" sudo reboot elif [[ $cbxReboot = "Restart GDM service" ]]; then /bin/echo -e "\e[1;32m |-| Restart GDM service....;:-) \e[0m" if [[ "$version" = *"Ubuntu 18.04"* ]]; then zenity --info "Reboot Neeeded" --text "Performing GDM changes on Ubuntu 18.04 Require reboot. Please Manually Reboot your machine" --width 400 else sudo service gdm restart fi else /bin/echo -e "\e[1;31m |-| Nothing here..... \e[0m" echo exit fi } #--------------------------------------------------------------------# # Function 3 - Update css file on Ubuntu 20.04 # #--------------------------------------------------------------------# gdm_2004() { # Step 1 - Install prereqs for compilation later on sudo apt-get -y install libglib2.0-dev-bin sudo apt-get -y install libxml2-utils #--Define some Variable workdir="${HOME}/shell-theme" xmlfile=${workdir}/custom.gresource.xml echo /bin/echo -e "\e[1;33m |-| Creating Directory Structure \e[0m" if [ ! -d ${workdir} ]; then mkdir -p ${workdir} fi if [[ ! -d ${workdir}/Yaru ]]; then mkdir -p ${workdir}/Yaru fi if [[ ! -d ${workdir}/Yaru-dark ]]; then mkdir -p ${workdir}/Yaru-dark fi #Addition to support Ubuntu 21.04 if [[ ! -d ${workdir}/Yaru-light ]]; then mkdir -p ${workdir}/Yaru-light fi if [[ ! -d ${workdir}/icons ]]; then mkdir -p ${workdir}/icons fi if [[ ! -d ${workdir}/icons/scalable ]]; then mkdir -p ${workdir}/icons/scalable fi if [[ ! -d ${workdir}/icons/scalable/actions ]]; then mkdir -p ${workdir}/icons/scalable/actions fi if [[ ! -d ${workdir}/icons/scalable/status ]]; then mkdir -p ${workdir}/icons/scalable/status fi echo /bin/echo -e "\e[1;33m |-| Creating xml file for compilation step \e[0m" bash -c "cat >"$xmlfile <<EOF <?xml version="1.0" encoding="UTF-8"?> <gresources> <gresource prefix="/org/gnome/shell/theme"> EOF echo /bin/echo -e "\e[1;32m |-| Populate xml file... \e[0m" #--Extract Resources -- Important location gst=/usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource for r in `gresource list $gst`; do gresource extract $gst $r >$workdir/${r#\/org\/gnome\/shell\/theme/} if [ $? -eq 0 ] then echo " <file>"${r#\/org\/gnome\/shell\/theme/}"</file>" >>$xmlfile fi done #Close the file echo "</gresource>" >>$xmlfile echo "</gresources>" >>$xmlfile echo /bin/echo -e "\e[1;32m |-| Modifying gdm3.css file...\e[0m" if [ -z "$selectcolor" ] then echo /bin/echo -e "\e[1;32m |-| Copying Picture to working Directory... \e[0m" cp "$pix" ${workdir} #Updated Code - 3.2 sed -i "/#lockDialogGroup {/!b;n;cbackground: #2c001e url('resource:///org/gnome/shell/theme/${fname}');\nbackground-repeat: no-repeat;\nbackground-size: cover;\nbackground-position: center;\n}" ${workdir}/gdm3.css sed -i "/<file>gdm3.css<\/file>/a<file>${fname}<\/file>" $xmlfile else #Find line #lockDialogGroup and replace line below with this code... sed -i "/#lockDialogGroup {/!b;n;cbackground-color: ${selectcolor}; }" ${workdir}/gdm3.css fi /bin/echo -e "\e[1;32m |-| Compile Resource File...\e[0m" cd ${workdir} glib-compile-resources custom.gresource.xml echo /bin/echo -e "\e[1;33m |-| Create new Theme Folder... \e[0m" if [ ! -d "/usr/share/gnome-shell/theme/custom" ]; then sudo mkdir /usr/share/gnome-shell/theme/custom else /bin/echo -e "\e[1;32m |-| Folder exists...Proceeding \e[0m" fi /bin/echo -e "\e[1;32m |-| Copy new gresource file...\e[0m" sudo cp ${workdir}/custom.gresource /usr/share/gnome-shell/theme/custom /bin/echo -e "\e[1;32m |-| Copy picture to new theme folder...\e[0m" #Not Needed actually #sudo cp "$pix" /usr/share/gnome-shell/theme/custom echo /bin/echo -e "\e[1;33m |-| Applying Changes... \e[0m" /bin/echo -e "\e[1;32m |-| redirect to new theme folder...\e[0m" echo sudo update-alternatives --quiet --install /usr/share/gnome-shell/gdm3-theme.gresource gdm3-theme.gresource /usr/share/gnome-shell/theme/custom/custom.gresource 0 sudo update-alternatives --quiet --set gdm3-theme.gresource /usr/share/gnome-shell/theme/custom/custom.gresource echo /bin/echo -e "\e[1;33m |-| Rebooting or Restarting GDM Service... \e[0m" #Reboot Server or Restart GDM Service ... call_gui_rboot } #--------------------------------------------------------------------# # Function 3 - Update css file on Ubuntu 18.04 # #--------------------------------------------------------------------# gdm_1804() { echo /bin/echo -e "\e[1;33m |-| Check if script has been run already \e[0m" if [ -f /usr/share/gnome-shell/theme/ubuntu.css.griffon ] then /bin/echo -e "\e[1;32m |-| Script has already run...resetting !\e[0m" sudo rm /usr/share/gnome-shell/theme/ubuntu.css sudo mv /usr/share/gnome-shell/theme/ubuntu.css.griffon /usr/share/gnome-shell/theme/ubuntu.css fi echo /bin/echo -e "\e[1;33m |-| Backup original ubuntu.css file... \e[0m" sudo cp /usr/share/gnome-shell/theme/ubuntu.css /usr/share/gnome-shell/theme/ubuntu.css.griffon echo /bin/echo -e "\e[1;33m |-| Modifying css file used by GDM \e[0m" if [ -z "$selectcolor" ] then /bin/echo -e "\e[1;32m |-| Update in progress ........ \e[0m" sudo cp "$pix" /usr/share/backgrounds/ sudo chmod og+r /usr/share/backgrounds/"${fname}" #-- Delete 2 lines after #lockDialogGroup sudo sed -i "/#lockDialogGroup {/{n;d}" /usr/share/gnome-shell/theme/ubuntu.css sudo sed -i "/#lockDialogGroup {/{n;d}" /usr/share/gnome-shell/theme/ubuntu.css #-- add modified Value sudo sed -i "/#lockDialogGroup {/a background: #2c001e url('file:///usr/share/backgrounds/${fname}');\nbackground-repeat: no-repeat;\nbackground-size: cover;\nbackground-position: center;\n}\n" /usr/share/gnome-shell/theme/ubuntu.css else /bin/echo -e "\e[1;32m |-| Update in progress ........ \e[0m" #-- Delete 2 lines after #lockDialogGroup sudo sed -i "/#lockDialogGroup {/{n;d}" /usr/share/gnome-shell/theme/ubuntu.css sudo sed -i "/#lockDialogGroup {/{n;d}" /usr/share/gnome-shell/theme/ubuntu.css #-- add modified Value sudo sed -i "/#lockDialogGroup {/a background: ${selectcolor}; }" /usr/share/gnome-shell/theme/ubuntu.css fi echo /bin/echo -e "\e[1;33m |-| Changes Applied.... \e[0m" #Reboot Server or Restart GDM Service ... call_gui_rboot } #--------------------------------------------------------------------# # Function 3 - Show Credits # #--------------------------------------------------------------------# sh_credits() { /bin/echo -e "\e[1;36m !-----------------------------------------------------!\e[0m" /bin/echo -e "\e[1;36m ! Change-Gdm-Background-3.1.sh - Version : $ScriptVer !\e[0m" /bin/echo -e "\e[1;36m ! Written By - Griffon - May 2021 !\e[0m" /bin/echo -e "\e[1;36m ! !\e[0m" /bin/echo -e "\e[1;36m ! Web :www.c-nergy.be - www.c-nergy.be/blog !\e[0m" /bin/echo -e "\e[1;36m !-----------------------------------------------------!\e[0m" echo } #--------------------------------------------------------------------------# # -----------------------END Function Section -----------------# #--------------------------------------------------------------------------# #--------------------------------------------------------------------------# #------------ MAIN SCRIPT SECTION -------------------# #--------------------------------------------------------------------------# #---------------------------------------------------# #-- Step 0 - Try to Detect Ubuntu Version.... #---------------------------------------------------# version=$(lsb_release -sd) codename=$(lsb_release -sc) #Trick to get prompted for sudo password - Nothing will be logged sudo touch gdmlogin.log #Call Check OS Function to validate OS Version check_os #End of script - Show Credits sh_credits
Many thanks, it is not easy to change background color in current gdm version with compiled themes.
Btw the script (with some trivial modification to bypass version control) works successfully in linux mint cinnamon 20.1 with gdm3 installed (mint cinnamon uses lightdm by default so a bit non-standard config); hope it will work in other debian-based distros too.
@Valouch,
Thank you for visiting our blog and providing feedback… The script is targeting indeed Ubuntu operating system because we have no time to check and tweak the script for each possible linux distribution using gdm3. When time permit (and workload will allow this), we might want to extend and support more distributions..
Till next time
See ya
Can the script support .xml files to be used as background as well so that it can change with time of day or depending on wallpaper? Great job on this one though. Works like a charm!
@Prajwal,
Thank you for visiting our blog and sharing your feedback and thoughts. We can try to add this “feature” in the next release… At the moment, this is not yet included or supported in the current version of the script.. we will see if this can included in the feature
Till next time
See ya
Hi, Thank you for hard work. Unfortunately after last update of Ubuntu 20.04 (I made it on October 8, 2021) the script does not work 🙁
@Jack,
Thank you for visiting our blog and providing feedback to us… Indeed, each iteration of Ubuntu introduces some new changes… a new version of the script is being finalized and should be released next week… If you want to give it a try and provide feedback again, that would be cool..
We have tested the version 3.2 against fully updated Ubuntu 20.04 (20.04.3) and the script seems to work accordingly… Can you provide more information, screenshots…to try to investigate your issue. Can you revert back to default first and then re-run the script to see if that would work ?
Waiting for your feedback
Hope this help
Till next time
See ya