How to customize Gnome login screen in Debian

(Tested on Ubuntu Gnome Shell 16.04+)

Two ways. If you want to know what exactly you are doing, follow Solution #1. If you want a single script to do all for you, follow Solution #2 (All it does it automate Solution #1)

Solution 1

Background Info: Gnome Login Background is not a parameter which you can change directly (weird!). It's present within Gnome Shell CSS file which is present in binary file. Hence, you have to extract binary file, modify it, and replace new binary with old file.

Step1: Extracting Gnome shell binary file

Run the following script extractgst.sh to extract Gnome shell theme to ~/shell-theme directory

#!/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

Step2: Modifying it

  • Copy your background image to this folder ~/shell-theme/theme.
  • Create file ~/shell-theme/theme/gnome-shell-theme.gresource.xml with content
  • Replace filename with your background image filename
  • 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 filename to be the name of the background image and background-size to your resolution.

Step3: Create new Gnome shell theme binary and replacing existing

Inside theme directory, run

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

You will get a binary file. Copy it to

/usr/share/gnome-shell

Now restart GDM using

service gdm restart

If it doesn't work or got stuck, restart your computer to see your new login wallpaper :))

Solution 2

Ok, as promised, there is a simpler way to automate all this. Simply save this script as login-background.sh

WORKDIR=~/tmp/gdm-login-background
GST=/usr/share/gnome-shell/gnome-shell-theme.gresource
GSTRES=$(basename $GST)

mkdir -p $WORKDIR
cd $WORKDIR
mkdir theme

for r in `gresource list $GST`; do
  gresource extract $GST $r >$WORKDIR$(echo $r | sed -e 's/^\/org\/gnome\/shell\//\//g')
done

cd theme
cp "$IMAGE" ./

echo "
#lockDialogGroup {
  background: #2e3436 url(resource:///org/gnome/shell/theme/$(basename $IMAGE));
  background-size: cover;
  background-repeat: no-repeat;
}" >>gnome-shell.css

echo '<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/org/gnome/shell/theme">' >"${GSTRES}.xml"
for r in `ls *.*`; do
  echo "    <file>$r</file>" >>"${GSTRES}.xml"
done
echo '  </gresource>
</gresources>' >>"${GSTRES}.xml"

glib-compile-resources "${GSTRES}.xml"

sudo mv "/usr/share/gnome-shell/$GSTRES" "/usr/share/gnome-shell/${GSTRES}.backup"
sudo mv "$GSTRES" /usr/share/gnome-shell/

rm -r $WORKDIR

if [ "$CREATED_TMP" = "1" ]; then
  rm -r ~/tmp
fi

Run the script using

IMAGE=~/Bat.jpg sh login-background.sh

Now restart gdm using service gdm restart or restart laptop for your new login background :))

References: https://wiki.archlinux.org/index.php/GDM

https://bbs.archlinux.org/viewtopic.php?id=197036


After a few more researching and some testing later, I finally have changed my login background, those are the steps I followed:

1) I've placed the file I wanted as background in /usr/share/pictures directory (I've created that directory myself)

2) I've entered the terminal and, as root user, I've edited /etc/gdm3/greeter.dconf-defaults file in order to look like this:

[org/gnome/desktop/background]
picture-uri='file:///usr/share/Pictures/background.png'
picture-options='zoom'

[org/gnome/login-screen]
logo='/usr/share/icons/gnome/48x48/places/debian-swirl.png'
fallback-logo='/usr/share/icons/gnome/48x48/places/debian-swirl.png'
disable-user-list=true
disable-restart-buttons=true

(background.png is my actual background picture)

3) In order to regenerate the configuration I ran "dpkg-reconfigure gdm3" and "dpkg-reconfigure gdebi-core"

Tags:

Gnome

Debian