Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

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.

#1 Le 12/03/2017, à 13: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, à 20:47)


Linux c'est la porte ouverte à toutes les fenêtres !

Hors ligne

#2 Le 12/03/2017, à 14: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, à 13:14)


eval, c'est mal.

Hors ligne

#3 Le 23/03/2017, à 10: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