Si comme moi vous avez déjà essayé Elementary OS, vous avez sans doute apprécié la fluidité de la séquence de login où l’on passe sans s’en rendre compte de l’écran de login au bureau, sans changer de fond d’écran.

Cependant, je trouve que ça ne vaut pas le coup de changer d’OS juste pour ça, surtout pour se retrouver avec un Ubuntu vieux de 2 ans :-). Et en plus, je n’ai pas l’intention de laisser tomber mes vieux amis Firefox et Thunderbird, donc l’intérêt d’Elementary est pour moi limité (je dis bien « pour moi », c’est un choix personnel). Je reconnais cependant que c’est du beau travail, donc pourquoi pas faire tout simplement la même chose avec notre Ubuntu préféré ? Voici une approche expérimentale qui mérite sans doute d’être peaufinée, mais ça marche.

Avant cela, notez qu’une autre approche est d’installer lightdm et Pantheon (voir ici : https ://gandalfn.ovh/) mais ce n’est pas le but de cet article, l’idée est bien de le faire avec Gnome. L’objectif est donc : pas de changement de fond d’écran entre l’écran de login et le bureau avec Ubuntu 18.04 (fonctionne aussi en 17.10) et Gnome 3.28.

Nous avons trois actions à réaliser sur la séquence de login d’une installation de base d’Ubuntu 17.10 ou 18.04 pour arriver à nos fins :

  • Remplacer le fond d’écran violet de login par celui du bureau
  • Remplacer le fond d’écran violet de la transition entre l’écran de login et le bureau par celui du bureau
  • Supprimer l’effet zoom du bureau à son ouverture

Pré-requis

Nous allons d’abord créer un fond à la taille de notre écran, que nous utiliserons partout dans la suite. Pour l’exemple, j’ai créé /usr/share/backgrounds/Lighthouse_at_sunrise_by_Frenchie_Smalls_1366x768.jpg qui est la version ajustée pour mon écran d’un des fonds d’écran natif d’Ubuntu. J’ai utilisé Gimp pour le redimensionner et le retailler.

Nous aurons également besoin pour le troisième point du paquet python-gnome2 :

sudo apt install python-gnome2

Remplacer le fond d’écran de login

Source : http ://ubuntuhandbook.org/index.php/2017/10/change-login-screen-background-ubuntu-17-10/

C’est simple, il suffit de modifier une règle css du fichier /etc/alternatives/gdm3.css (faites-en une copie avant de le modifier).

sudo vim /etc/alternatives/gdm3.css

Puis chercher #lockDialogGroup dans le fichier

Changer :

#lockDialogGroup {
background : #607D8B url("assets/noise-texture.svg") ;
background-size : cover ;
}

En :

#lockDialogGroup {
   background : #607D8B url("file :///usr/share/backgrounds/Lighthouse_at_sunrise_by_Frenchie_Smalls_1366x768.jpg") ;
   background-size : cover ;
   background-position : center ;
   background-repeat : no-repeat ;
}

Au passage, nous allons utiliser le même fond pour l’écran de verrouillage, c’est très simple (on peut aussi utiliser l’outil « ajustements » – gnome-tweak) :

gsettings set org.gnome.desktop.screensaver picture-uri 'file :///usr/share/backgrounds/Lighthouse_at_sunrise_by_Frenchie_Smalls_1366x768.jpg'

Remplacer le fond d’écran de la transition entre l’écran de login et le bureau

Source : https ://ubuntuforums.org/showthread.php ?t=2384043&p=13736129#post13736129

Ce problème n’apparaît qu’une fois le point précédent réalisé, car c’est le même fond violet foncé et donc on ne voit pas la différence auparavant. La difficulté ici est que ce fond violet n’est pas directement accessible dans un fichier css, la règle est embarquée dans un fichier ressources gnome : /usr/share/gnome-shell/gnome-shell-theme.gresource

Nous allons donc utiliser l’excellent script indiqué dans la source ci-dessus pour recréer ce fichier ressource.

Installer le script de devpy :

cd ~/<un_repertoire_de_travail_quelconque>
git clone https ://github.com/devpytech/scripts.git

Extraire les sources du fichier ressource gnome :

cd scripts/gresource-extract
rm -rfv theme
mkdir theme
mkdir icons
./extract.sh

Modifier gnome-shell.css :

vim ./theme/gnome-shell.css

Changer :

# lockDialogGroup {
background : #2c001e url(resource :///org/gnome/shell/theme/noise-texture.png) ;
background-repeat : repeat ; }

En (la couleur de fond n’a aucune importance, on ne la voit pas) :

#lockDialogGroup {
background : #607D8B url(resource :///org/gnome/shell/theme/noise-texture.png) ;
background-position : center ;
background-repeat : no-repeat ; }

Copier le fond d’écran que nous utilisons partout sous le nom noise-texture.png dans le dossier theme :

cp /usr/share/backgrounds/Lighthouse_at_sunrise_by_Frenchie_Smalls_1366x768.jpg theme/noise-texture.png

Recréer le fichier ressource gnome :

./build.sh

Sauvegarder le fichier ressource original :

sudo cp /usr/share/gnome-shell/gnome-shell-theme.gresource /usr/share/gnome-shell/gnome-shell-theme.gresource.orig

Installer le nouveau :

sudo mv ./theme/gnome-shell-theme.gresource /usr/share/gnome-shell/gnome-shell-theme.gresource

Et voilà ! Il ne reste qu’une étape (mais ce n’est pas la plus simple…)

Supprimer l’effet zoom du bureau à son ouverture

L’effet zoom vient du paramètre Gnome org.gnome.desktop.interface enable-animations à true (on peut le voir avec dconf ou gsettings get ou dans Ajustements). Si on le met à false, plus aucune fenêtre du dock n’aura cet effet, ce qui est dommage. Nous allons donc désactiver l’animation lors du login et la réactiver après. Plus précisément, l’animation sera désactivée (gsettings set org.gnome.desktop.interface enable-animations false) lorsque l’utilisateur termine sa session Gnome et sera réactivée (gsettings set org.gnome.desktop.interface enable-animations true) au moment où il ouvre sa session (après le login). Il y a sûrement une solution plus simple mais je n’ai pas encore trouvé.

Etape 1 : Restaurer l’animation après le login de l’utilisateur

Source : https ://stackoverflow.com/questions/8247706/start-script-when-gnome-starts-up

On va donc automatiser la restauration de l’animation après le login en utilisant une fonction standard de Gnome : le lancement automatique à l’ouverture de session.

Note : on peut le faire aussi graphiquement avec l’outil « Applications au démarrage ».

cd ~/.config/autostart

Créer un script qui fait le travail, en léger décalé pour éviter de restaurer l’animation avant l’apparition du bureau :

touch gsettings.sh
chmod +x gsettings.sh
vim gsettings.sh

Contenant :

# !/bin/bash
sleep 10
gsettings set org.gnome.desktop.interface enable-animations true
$HOME/.config/autostart/gsettings_shutdown.sh &

(la dernière ligne sert à lancer le script qui va être expliqué à l’étape 2)

Ce script sera lancé par Gnome grâce à un fichier desktop situé dans .config/autostart (le nom n’a pas d’importance par contre l’extension doit impérativement être desktop). Pour plus de détail sur le sujet : https ://developer.gnome.org/integration-guide/stable/desktop-files.html.fr

Créer un fichier .desktop :

vim gsettings.desktop

Contenant :

[Desktop Entry]
Type=Application
Exec=/home/<votre_user>/.config/autostart/gsettings.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[fr_FR]=Activer animations Gnome
Name=Activer animations Gnome
Comment[fr_FR]=Réactivation après le login
Comment=Réactivation après le login

Voilà pour cette première étape.

Etape 2 : Désactiver l’animation à la fermeture de session, en prévision du prochain login

Source : https ://askubuntu.com/questions/293312/execute-a-script-upon-logout-reboot-shutdown-in-ubuntu

Bien sûr, il faut désactiver l’animation à la fermeture de session pour ne pas l’avoir au prochain login, avec la commande

gsettings set org.gnome.desktop.interface enable-animations false

Mettre cette commande dans .bash_logout ne fonctionne malheureusement pas. On va alors utiliser ce script python :
https ://www.linuxquestions.org/questions/linux-desktop-74/gnome-run-script-on-logout-724453/#post3560301

Nous sommes toujours dans le dossier $HOME/.config/autostart

Créer un fichier gsettings_shutdown.sh et le rendre exécutable (je l’appelle comme ça car il permet aussi de capturer l’extinction du PC, en plus de la fin de session Gnome) :

touch gsettings_shutdown.sh
chmod +x gsettings_shutdown.sh
vim gsettings_shutdown.sh

Y copier le contenu du script présent dans le lien ci-dessus.

Remplacer la ligne :

retcode = subprocess.call("truecrypt -d", shell=True)

Par (vous reconnaîtrez la commande gsettings) :

retcode = subprocess.call("gsettings set org.gnome.desktop.interface enable-animations false", shell=True)

Ce script sera lancé à l’ouverture de session par gsettings.sh comme nous l’avons vu à l’étape 1. Il va écouter les évènements Gnome pour détecter la fermeture de session et exécuter notre commande gsettings.

C’est tout (et c’est déjà pas mal) !

Tags : ,

Classés dans :