Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/06/2020, à 09:15

lynn

Changer le fond d'écran de GDM3 avec une interface graphique

Bonjour,

Je propose ici une manière simple de changer le fond d'écran de connexion (GDM) en se servant de zenity. Ce dernier est présent sur les distributions qui sont prises en charge par le programme.
Tout ce qu'il y a faire est de copier/coller ce qui suit dans fichier que vous nommez comme vous voulez, rendre exécutable ce fichier, cliquer sur celui ci et suivre les instructions.

N'hésitez pas à faire part de vos remarques et suggestions. smile

Actuellement, sont prises en charge les distributions suivantes :

  • Ubuntu 16.04

  • Ubuntu 18.04

  • Ubuntu 20.04

  • Ubuntu 20.10

  • Ubuntu 21.04

  • Ubuntu 21.10

  • Debian 10

  • Fedora 32

  • Arch Linux

  • Mageia 7

  • CentOS 8

  • Pop!_OS 20.04

  • PureOS 9.0

  • Kali Linux 2020.2

  • EndeavourOS

  • OpenSUSE 15.1

  • Manjaro Linux

  • Zorin-OS 15

  • ArcoLinux

  • Trisquel 8.0

Edit 01 : Ajout du support pour Arch Linux
Edit 02 : Ajout du support pour Mageia 7
Edit 03 : Ajout du support pour Ubuntu 16.04 --> Bien évidemment, il faut au préalable avoir remplacé lightdm par gdm... tongue
Edit 04 : Ajout du support pour CentOS 8 + correction sur contrôle des dépendances
Edit 05 : Ajout du support pour Pop!_OS 20.04
Edit 06 : Ajout du support pour PureOS 9.0 + correction sur contrôle du nom et de la version du système d'exploitation
Edit 07 : Ajout du support pour Kali Linux 2020.2
Edit 08 : Ajout du support pour EndeavourOS
Edit 09 : Ajout du support pour OpenSUSE 15.1
Edit 10 : Ajout du support pour Manjaro Linux
Edit 11 : Ajout du support pour Zorin-OS 15.2
Edit 12 : Ajout du support pour ArcoLinuxB-Gnome --> Bien que ce soit une version Gnome, lightdm est le gestionnaire de session par défaut... Il faut donc pensé à remplacer lightdm par gdm.
Edit 13 : Ajout du support pour Trisquel 8.0
Edit 14 : Ajout du support pour Ubuntu 21.10 (avec Gnome Shell 40.2) et modifications mineures du script

#!/bin/bash

## This script allows to replace easily the GDM login wallpaper and
## also may restore the default values.
##
## It uses Zenity program which is installed by default on
## the O.S versions for which it is supposed to work.
##
## If necessary, it will be proposed the installation of 
## certain glib libraries essential to the continuation of the script.
##
## by lynn
## version 1.1
##
## Licence : https://www.gnu.org/licenses/gpl-3.0.html


# Constants
required_packages='glib-compile-resources'
workdir="/tmp"
supported_os=( \
'Ubuntu 16.04' \
'Ubuntu 18.04' \
'Ubuntu 20.04' \
'Ubuntu 20.10' \
'Ubuntu 21.04' \
'Ubuntu 21.10' \
'Debian 10' \
'Fedora 32' \
'Arch Linux' \
'Mageia 7' \
'CentOS 8' \
'Pop!_OS 20.04' \
'PureOS 9.0' \
'Kali 2020.2' \
'EndeavourOS' \
'openSUSE 15.1' \
'Manjaro' \
'Zorin 15' \
'ArcoLinuxB-gnome' \
'Trisquel 8.0')


# Set O.S name and version
case $(. /etc/os-release; echo "$ID") in
	ubuntu|pureos|fedora|mageia|pop|debian|centos|kali|opensuse-leap|zorin|trisquel ) 
		os_version=$(. /etc/os-release; echo "${PRETTY_NAME%% *}" "${VERSION_ID%% *}");;
	arch|manjaro|arcolinux )  
		os_version=$(. /etc/os-release; echo "${NAME%% *}");;
	* )
	zenity --warning \
			--width="300" \
			--height="100" \
			--ok-label="Ok" \
			--title="GDM Background Changer" \
			--text="\n<b>Unable to determine your operating system!</b>" || exit 1;;
esac


# Check supported O.S
[[ ! "${supported_os[@]}" =~ ${os_version}*.? ]] && \
	zenity --info \
			--width="400" \
			--height="100" \
			--ok-label="Quit program" \
			--title="GDM Background Changer" \
			--text="<b>Your current operating system is not supported\!</b> \n\n<u>Only these versions are:</u>\n\n`printf '%s\n' "${supported_os[@]}"`" && { \
				exit 1 || \
				exit 1; }


# Check display manager
shopt -s nocasematch
[[ ! $XDG_CURRENT_DESKTOP =~ gnome ]] && \
	zenity --info \
			--width="400" \
			--height="100" \
			--ok-label="Quit program" \
			--title="GDM Background Changer" \
			--text="\n<b>Your current display manager is not GDM\!</b>" && exit 1;


# Check dependencies
[[ "$(command -v $required_packages)" == "" ]] && { \
	zenity --question \
			--title="GDM Background Changer" \
			--width="400" \
			--height="100" \
			--ok-label="Yes" \
			--cancel-label="Quit program" \
			--text="<b>Additional glib libraries need to be installed\n\nProceed?</b>" || exit; } && { \
		if [[ "$os_version" =~ ^(Fedora|CentOS)$*.? ]]; then
			pkexec yum install -y glib2-devel
		  elif [[ "$os_version" =~ openSUSE ]]; then
			pkexec zypper install -y glib2-devel
		  elif [[ "$os_version" =~ ^(Ubuntu|Zorin)$*.? ]]; then 
			pkexec apt install -y libglib2.0-dev-bin
		fi
	};


# Set some variables according to O.S version used
case "${os_version}" in

	'CentOS 8'|'Fedora 32'|'Debian 10'|'Arch Linux'| \
	'Mageia 7'|'Ubuntu 16.04'|'PureOS 9.0'|'Kali 2020.2'| \
	'EndeavourOS'|'openSUSE 15.1'|'Manjaro'|'ArcoLinuxB-gnome'| \
	'Trisquel 8.0' )
	gdm_gresource=/usr/share/gnome-shell/gnome-shell-theme.gresource
	css=gnome-shell.css;;
	
	'Ubuntu 18.04' )
	gdm_gresource=/usr/share/gnome-shell/gnome-shell-theme.gresource
	custom_css=/usr/share/gnome-shell/theme/ubuntu.css
	css=gnome-shell.css;;

	'Zorin 15' )
	gdm_gresource=/usr/share/gnome-shell/gnome-shell-theme.gresource
	custom_css=/usr/share/themes/ZorinBlue-Dark/gnome-shell/gnome-shell.css
	css=gnome-shell.css;;

	'Ubuntu 20.'*|'Ubuntu 21.04')   
	gdm_gresource=/usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource
	css=gdm3.css;;

	'Ubuntu 21.10')   
	gdm_gresource=/usr/share/gnome-shell/theme/Yaru/gnome-shell-theme.gresource
	css=gdm.css;;

	'Pop!_OS 20.04' )
	gdm_gresource=/usr/share/gnome-shell/theme/Pop/gnome-shell-theme.gresource
	css=gdm3.css;;

	* )
	zenity --warning \
			--width="200" \
			--height="100" \
			--title="GDM Background Changer" \
			--ok-label="Quit program" \
			--text="\nUnable to assign variables!"; exit 1;;

esac


while :; do

	main_window=$(zenity --width="350" \
							--height="180" \
							--title="GDM Background Changer" \
							--list \
							--text="<b>What do you want to do?</b>" \
							--radiolist \
							--column="Select" \
							--column="Choice" \
							--ok-label="Next" \
							--cancel-label="Quit program" \
				FALSE "Change GDM background" FALSE "Restore default settings") || exit 1;
				
case $main_window in

		"Change GDM background")
		
			# Image file selection
			zenity --info \
					--width="250" \
					--height="100" \
					--ok-label="Ok" \
					--title "GDM Background Changer" \
					--text="\n<b>Please, select an image file.</b>" || exit 1;
						
						
					while :; do 
					image_file=$(zenity --title="GDM Background Changer" \
										--file-selection) || exit 1;
											
					[[ -z $(file ${image_file} | grep -Eoi "*.g image data") ]] &&
					{ zenity --error \
								--width="300" \
								--height="100" \
								--title="GDM Background Changer" \
								--text="<b>${image_file##*/}</b> is not a valid format picture! \n\n<b><i>Please select another one to continue.</i></b>" \
								--ok-label="OK" && continue || exit 1; } || \
						break;
				done
				
			# Set background-repeat value
			zenity --question \
					--width="300" \
					--height="100" \
					--title="GDM Background Changer" \
					--text="\n<b>Do you use more than one screen?</b>" \
					--cancel-label="No" \
					--ok-label="Yes" && \
				background_repeat="repeat" || \
				background_repeat="no-repeat"
				
			# Backup gnome-shell-theme.gresource file
			[[ ! -f ${gdm_gresource}_bak ]] && { \
				cp ${gdm_gresource} $workdir/${gdm_gresource##*/}_bak;
				gdm_gresource_bak=$workdir/${gdm_gresource##*/}_bak; } || \
				gdm_gresource_bak=${gdm_gresource}_bak
				
			# For distribution custom css, backup custom_css file
			[[ -f ${custom_css} ]] && [[ ! -f ${custom_css}_bak ]] && { \
				cp $custom_css $workdir/${custom_css##*/}_bak
 				custom_css_bak=$workdir/${custom_css##*/}_bak; } || \
				custom_css_bak=${custom_css}_bak
				
			# Create the work directory from resource, extract theme and copy selected image into it
			for r in `gresource list $gdm_gresource_bak`; do
				f=$r
				r=${r#\/org\/gnome\/shell/}
				[ ! -d $workdir/${r%/*} ] && mkdir -p $workdir/${r%/*};
				gresource extract $gdm_gresource_bak $f >$workdir/$r
			done
			
			# For Opensuse only, copy background as noise-texture.png otherwise, it does not work
			[[ "$os_version" =~ openSUSE ]] && {
			cp "$image_file" $workdir/${r%%/*}/noise-texture.png;
			image_file=noise-texture.png; } || \
			cp "$image_file" $workdir/${r%%/*};
				
			# Apply replacing css file text
			original="#lockDialogGroup \{.*?\}"
			modified="#lockDialogGroup {
  background: url(resource:\/\/\/org\/gnome\/shell\/theme\/${image_file##*/});
  background-repeat: $background_repeat;
  background-size: cover; }"
			
			perl -i -0777 -pe "s/$original/$modified/s" $workdir/${r%%/*}/$css
				
			# Create gresource xml file
			files=$(find $workdir/${r%%/*} -type f -printf "%P\n" | xargs -i echo "    <file>{}</file>")
			
			cat <<-EOF >"$workdir/${r%%/*}/${gdm_gresource##*/}.xml"
			<?xml version="1.0" encoding="UTF-8"?>
			<gresources>
			  <gresource prefix="/org/gnome/shell/theme">
			$files
			  </gresource>
			</gresources>
			EOF
			
			# Compile gresources
			cd $workdir/${r%%/*}
			glib-compile-resources ${gdm_gresource##*/}.xml
			
			# Keep the working directory?
			zenity --question \
					--width="400" \
					--height="100" \
					--cancel-label="No" \
					--ok-label="Yes" \
					--title="GDM Background Changer" \
					--text="A temporary working directory was created during operation.\n\n<b>Would you like to keep it?</b>" && \
					cp -r $workdir/${r%%/*} $HOME/GDM_workdir_$(date +"%Y%m%d%H%M%S") && \
					zenity --info \
							--width="400" \
							--height="100" \
							--ok-label="Ok" \
							--title="GDM Background Changer" \
							--text="\nWork directory has been copied in your personnal folder as \n\n<b>GDM_WORKDIR_{<i>date</i>}</b>."
									
			# Restart computer after modifications?
			zenity --question \
					--width="420" \
					--height="100" \
					--cancel-label="No" \
					--ok-label="Yes" \
					--title="GDM Background Changer" \
					--text="For the changes to take effect, you will need to restart your pc.\n\n<b>Choose to restart after modifications?</b>" && \
					end_cmd="reboot" || end_cmd="";
			
			# Apply modifications as root
			zenity --question \
					--width="400" \
					--height="100" \
					--cancel-label="Quit program" \
					--ok-label="Proceed" \
					--title="GDM Background Changer" \
					--text="\n<b>Entering your password is necessary to apply changes.</b>" &&
						pkexec bash -c "[ ! -f ${gdm_gresource}_bak ] && mv $gdm_gresource_bak ${gdm_gresource}_bak;
							[ ! -z $custom_css ] && [ ! -f ${custom_css}_bak ] && mv $custom_css_bak ${custom_css}_bak;
							cp $workdir/${r%%/*}/${gdm_gresource##*/} ${gdm_gresource};
							[ ! -z $custom_css ] && perl -i -0644 -pe 's/$original/$modified/s' $custom_css;
							$end_cmd"; exit 0 || exit 1;
		;;
		
		
		"Restore default settings")
		
			# If existing *_bak file(s), set variables and functions 
			test -f ${gdm_gresource}_bak && \
				restore=( "ggre" )
				ggre() { 
					echo mv ${gdm_gresource}_bak $gdm_gresource; 
				}
				
			test -f ${custom_css}_bak && \
				restore+=( "ucss" )
				ucss() { 
					echo mv ${custom_css}_bak $custom_css; 
				}
					
					
			# Restore command
			case ${restore[@]} in
			
				# If empty *_bak file, nothing to restore
				"")
				zenity --info \
						--title="GDM Background Restore" \
						--width="200" \
						--height="100" \
						--ok-label="Back" \
						--text="\n<b>Nothing to restore yet \!</b>" || exit 1;
				;;
					
				# Restart computer after modifications?
				'ggre'|'ucss')  zenity --question \
						--width="460" \
						--height="100" \
						--cancel-label="No" \
						--ok-label="Yes" \
						--title="GDM Background Restore" \
						--text="For the changes to take effect, you will need to restart your computer.\n\n<b>Choose to restart after modifications ?</b>" && \
						end_cmd="reboot" || end_cmd=""					
												
				# Apply modifications as root
				zenity --question \
						--width="400" \
						--height="100" \
						--cancel-label="Quit program" \
						--ok-label="Proceed" \
						--title="GDM Background Restore" \
						--text="You will restore the original GDM files.\n\n<b>Entering your password is necessary to apply changes.</b>" &&
					pkexec bash -c "`ggre`; `ucss`; $end_cmd" || exit 1
				;;
					
				
				# Exit program on warning
				*)
				zenity --warning \
						--width="150" \
						--height="100" \
						--ok-label="Quit program" \
						--title="GDM Background Restore" \
						--text="Unknown error !" && exit 1;
				;;
					
			esac
				
		;;
		
		*)
		zenity --error \
				--width="250" \
				--height="100" \
				--title="GDM Background Changer" \
				--text="<b>Missing selection ! </b>\n\nClick <b>OK</b> to choose again." \
				--ok-label="Ok" || exit 1;
				
		;;
		
 esac

done

Dernière modification par lynn (Le 21/07/2021, à 04:10)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 04/07/2020, à 13:16

lynn

Re : Changer le fond d'écran de GDM3 avec une interface graphique

Personne pour tester et poster un retour ?

Ce truc fait si peur que ça..? tongue


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#3 Le 26/09/2020, à 17:53

xavril

Re : Changer le fond d'écran de GDM3 avec une interface graphique

Bonjour
J'ai essayé
-focalgdm3 ok
-logonized ok
-l'extension Lock screen background ok
-l'application Ajustements ou Tweaks ko (incroyable !)
je vient d'essayer le tien (le votre) ok
Il faudrait préciser quel écran gdm on modifie (verrouillage, connexion, session)
Problème du moins pour moi c'est que en retour de veille le background est flou (comme dans dans windows 10!) ça m'énerve au plus haut point que les gens de canonical veuillent copier windows. J'aimerais bien trouver une solution qui permette de gérer (supprimer/atténuer) ce flou.
Merci pour votre travail.


Portable DELL Latitude E6430 (Intel® Core™ i5-3340M) - Ubuntu 23.10

Hors ligne

#4 Le 27/09/2020, à 00:06

lynn

Re : Changer le fond d'écran de GDM3 avec une interface graphique

Bonjour,

Merci d'avoir pris le temps de tester ce bout de script. smile
Pour le flou sur GDM, je pense que cette extension devrait te convenir.


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#5 Le 27/09/2020, à 09:41

xavril

Re : Changer le fond d'écran de GDM3 avec une interface graphique

Bonjour
Merci pour le conseil.
Cette extension m'a provoqué 2 erreurs, puis tout c'est rétabli ?!?

Je pense que c'est plus compliqué que ça. Nous sommes en présence de 4 sortes d'écrans.

1 - Ecran de verrouillage (avec la mention "cliquer ....."
2 - Ecran de choix d'utilsateur
3 - Ecran de mot de passe d'ouverture de session proposant le retour au choix d'utilisateur (petite flèche à gauche du champ mot de passe)
4 - Ecran de mot de passe suite à mise en veille de session (sans petite flèche) qui floute l’arrière plan

en ne travaillant qu'avec les 2 extensions Lock screen backround (qui je pense fait exactement la même chose que ton code, désolé hmm) et l'extension Control blur effect... (je comprend pas pourquoi l'auteur n'a pas mis ces 2 fonctionnalités dans la même extension ?) les écrans 1,2,3 réagissent correctement.
Quid du 4° ?  Quand on réveille la machine l'écran 1 apparaît, puis après le clic c'est l'écran 4 qui floute le background de l'écran 1.
Qu'en penses-tu ?


Portable DELL Latitude E6430 (Intel® Core™ i5-3340M) - Ubuntu 23.10

Hors ligne

#6 Le 27/09/2020, à 11:14

lynn

Re : Changer le fond d'écran de GDM3 avec une interface graphique

Qu'appelles-tu "mise veille de la session" ? Pour moi, une session utilisateur se clôt ou se verrouille. La mise en veille c'est la machine qui s'éteint en partie...

D'après ce que j'ai compris, GDM va subir une refonte donc les extensions ou scripts qui fonctionnent jusqu'ici ne fonctionneront probablement plus avec le nouveau GDM. tongue
Pour le flou, ça ne me dérange pas trop mais il est vrai qu'une possibilité native de le moduler serait appréciée.

Dernière modification par lynn (Le 07/11/2020, à 13:41)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#7 Le 27/09/2020, à 12:03

xavril

Re : Changer le fond d'écran de GDM3 avec une interface graphique

lynn a écrit :

Qu'appelles-tu "mise veille de la session" ? Pour moi, une session utilisateur se clôt ou se verrouille. La mise en veille c'est la machine qui s'éteint en partie...

Ok avec toi je vais dire après verrouillage de la session l'écran de mot de passe (de déverrouillage) n'est pas le même que celui de l'ouverture.

lynn a écrit :

D'après ce que j'ai compris, GDM va subir une refonte donc les extensions ou script qui fonctionnent jusqu'ici ne fonctionneront probablement plus avec le nouveau GDM. tongue

Pfff tout ce boulot pour rien ! mad

Merci pour cette conversation.

Bonne fin de journée.


Portable DELL Latitude E6430 (Intel® Core™ i5-3340M) - Ubuntu 23.10

Hors ligne

#8 Le 20/07/2021, à 15:33

lynn

Re : Changer le fond d'écran de GDM3 avec une interface graphique

@xavril

Mon script ne s'occupe que de l'écran de connexion de GDM; C'est à dire quand tu t'identifies pour ouvrir (ou rouvrir) ta session. Pour l'image de l'écran de (dé)verrouillage, depuis un moment, c'est le même que le fond d'écran de la session. Dans ce cas, ce n'est pas une ouverture de session puisque la session est déjà ouverte... mais verrouillée.

  • Mise à jour du script. Fonctionne avec gnome-shell 40.2.


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#9 Le 02/11/2023, à 08:25

official.pumpking.dev

Re : Changer le fond d'écran de GDM3 avec une interface graphique

Bonjour
Il y a quelques années déjà j'ai téléchargé votre script, et il fonctionne à merveille. Je continue de maintenir ma propre version, et je prévois de faire un dæmon pour l'exécuter à chaque mise à niveau de distribution (cela remplace le fond). Merci beaucoup pour ce script, il m'est très utile! big_smile

Dernière modification par official.pumpking.dev (Le 02/11/2023, à 08:26)

Hors ligne