Pages : 1
#1 Le 12/03/2017, à 12:34
- Nosselrahc
Script bash pour modifier le fond d'écran GDM3
Tout est dans le titre.
Créer un nouveaux document en le nommant gdmWallpaper.sh par exemple.
Copier le scrit suivant dedans, enregistrer et rendre le script exécutable (clic droit sur le script->Propriétés->onglet Permissions : cocher Autoriser l'exécution du fichier comme un programme).
Le script utilise la fonction convert. Il faut donc installer le paquet imagemagick.
Utilisation du Script. Dans un terminal :
sudo ./gdmWallpaper.sh image.ext
Redémarrer l'ordinateur pour voir le résultat.
Le script fait à la première utilisation une sauvegarde du fichier /usr/share/gnome-shell/gnome-shell-theme.gresource en gnome-shell-theme.gresource.bak pour revenir à la configuration d'origine.
Script :
#!/bin/bash
#---------------------------------------
# Change Wallpaper in gdm3 login screen
#---------------------------------------
if [ "$#" -ne 1 ]; then
echo "usage : ./gdmWallpaper.sh image_file"
exit -1
fi
if [ "$UID" -ne "0" ]; then
echo "You must have root habilitation to run the script."
exit -2
fi
# save gnome theme
gstFile=/usr/share/gnome-shell/gnome-shell-theme.gresource
if [[ ! -a "${gstFile}.bak" ]]; then
cp ${gstFile} ${gstFile}.bak
fi
# screen resolution
width=$(xrandr -q | grep -w "Screen 0" | awk -F'current' '{print $2 }' | awk -F',' '{print $1 }'| awk -F' ' '{print $1 }')
height=$(xrandr -q | grep -w "Screen 0" | awk -F'current' '{print $2 }' | awk -F',' '{print $1 }'| awk -F' ' '{print $3 }')
# create temporary folder
tmpFile=gdmTheme
if [[ ! -d "/${tmpFile}" ]]; then
mkdir -p ${tmpFile}
fi
# create gresource file
scrFile=${tmpFile}/gnome-shell-theme.gresource.xml
echo '<?xml version="1.0" encoding="UTF-8"?>' > ${scrFile}
echo "<gresources>" >> ${scrFile}
echo ' <gresource prefix="/org/gnome/shell/theme">' >> ${scrFile}
echo " <file>background.png</file>" >> ${scrFile}
# Extract actual theme
for r in `gresource list ${gstFile}`; do
if [[ !("$r" =~ "background.png") ]]; then
echo " <file>${r#\/org\/gnome\/shell\/theme/}</file>" >> ${scrFile}
fi
gresource extract ${gstFile} $r >${tmpFile}/${r#\/org\/gnome\/shell\/theme/}
done
# finish gresource file
echo " </gresource>" >> ${scrFile}
echo "</gresources>" >> ${scrFile}
# Modify css file
cssFile=${tmpFile}/gnome-shell.css
cssFile_sav=${tmpFile}/gnome-shell-sav.css
cp ${cssFile} ${cssFile_sav}
flag=-1
while IFS=$"\n" read line
do
if [ ${flag} -lt 0 ]; then
flag=0
echo "${line}" > ${cssFile}
else
if [[ "${line}" =~ "#lockDialogGroup" ]]; then
flag=1
echo "${line}" >> ${cssFile}
echo " background: #2e3436 url(background.png);" >> ${cssFile}
echo " background-size: ${width}px ${height}px;" >> ${cssFile}
echo " background-repeat: no-repeat; }" >> ${cssFile}
fi
if [ ${flag} -ne 1 ]; then
echo "${line}" >> ${cssFile}
fi
if [[ "${line}" =~ "}" ]]; then
flag=0
fi
fi
done < ${cssFile_sav}
# copy image
convert "$1" -resize ${width}x${height}\! ${tmpFile}/background.png
# compil theme
cd ${tmpFile}
glib-compile-resources gnome-shell-theme.gresource.xml
cd ..
# copy new theme
cp ${tmpFile}/gnome-shell-theme.gresource ${gstFile}
# remove temporary folder
rm -rf ${tmpFile}
exit 0
Toute amélioration est la bien venu.
Dernière modification par Nosselrahc (Le 12/03/2017, à 19:47)
Linux c'est la porte ouverte à toutes les fenêtres !
Hors ligne
#2 Le 12/03/2017, à 13:57
- Watael
Re : Script bash pour modifier le fond d'écran GDM3
salut,
déjà, ne pas mettre les noms des variables tout en majuscules pour éviter d'écraser des variables d'environnement.
Width=$(xrandr -q | head -1 | cut -d ' ' -f 8)
Height=$(xrandr -q | head -1 | cut -d ' ' -f 9)
les conditions simples n'ont pas nécessairement besoin d'un if :
test -d $directory || action
on utilise une boucle for pour boucler sur une liste, pas sur des lignes :
gresource... | while read -r line
les regex doivent être définies hors des double crochets, et les parenthèses sont inutiles :
regex=motCherché
[[ expression =~ $regex ]]
tu peux limiter les écritures dans un fichier en redirigeant en une seule fois une boucle :
while read...; do echo ...; done < fichierIn >fichierOut
s'il y a un sudo dans un script alors en général c'est un script d'administration, qui devrait appartenir à l'admin, et donc c'est le script qui devrait être appelé avec sudo.
Dernière modification par Watael (Le 23/03/2017, à 12:14)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 23/03/2017, à 09:40
- Nosselrahc
Re : Script bash pour modifier le fond d'écran GDM3
Merci pour tes commentaires.
Script corrigé pour l’essentiel.
Linux c'est la porte ouverte à toutes les fenêtres !
Hors ligne
Pages : 1