Le but de cet article est de vous faire découvrir les économiseurs d'écran de Mint
, leur paramétrage et également de vous apprendre quelques commandes avancées de bash
et ce en mode hacking.
On apprendra à lancer les économiseurs d'écran individuellement depuis le CLI.
Pour lever toute confusion, il ne s’agit pas ici de savoir comment lancer l’économiseur d’écran depuis la ligne de commande mais plutôt de pouvoir ouvrir chacun des programmes qui gère l’affichage de ces économiseurs. Cependant pour ce qui est de lancer du forçage du lancement de l’économiseur d’écran, voici comment faire :
xdg-screensaver activate
Attention, certaine parties de cet article nécessite l’accès root
à votre machine. À utiliser avec précaution.
Cet article ne s’applique pas à Ubuntu dans la mesure où les distributions Ubuntu n’intègrent pas d’économiseur d’écran ludique à sa configuration de base. Vous devrez sans doute installer le paquet xscreensaver pour en profiter.
sudo apt install xscreensaver
La configuration
La configuration des économiseurs d’écran (screensavers) sous Mint n’est certainement pas le point fort de la distribution, on va essayer de comprendre pourquoi.
Pour voir l’interface de configurer, faite la recherche screensaver
depuis la zone de recherche du menu de Mint
.
Je vous laisse constater qu’il n’est pas possible de modifier le fonctionnement des différents économiseurs d’écran.
Essayons de comprendre comment cela fonctionne.
Les fichiers de configuration se trouvent ici :
ls -la /usr/share/applications/screensavers/
Vous obtenez une longue liste, dont voici un extrait :
-rw-r--r-- 1 root root 299 Mar 24 2017 abstractile.desktop
-rw-r--r-- 1 root root 256 Mar 24 2017 anemone.desktop
-rw-r--r-- 1 root root 542 Mar 24 2017 anemotaxis.desktop
-rw-r--r-- 1 root root 305 Mar 24 2017 antinspect.desktop
-rw-r--r-- 1 root root 302 Mar 24 2017 antmaze.desktop
-rw-r--r-- 1 root root 345 Mar 24 2017 antspotlight.desktop
Vous notez que ces fichiers de configuration appartiennent à l’utilisateur root
, cependant tous les utilisateurs de la machine peuvent les lire. Pour les modifier, il faudra donc obtenir les privilèges root.
La configuration des économiseurs d’écran est globale à la machine, et en fait certain économiseurs d’écran doivent être lancés avec les droits administrateurs.
Petite correction pour Sonar
En particulier l’économiseur Sonar
doit s’exécuter avec les privilèges root. Cet économiseur d’écran qui peut s’exécuter directement à l’aide de :
/usr/lib/xscreensaver/sonar
Il est censé affiché la liste des machines du réseau local mais sans une intervention (mineur) de votre part, il ne le fera pas à la place il indique un message à propos du Setuid.
Commençons par fixer ce problème. La correction se fait à l’aide de la commande suivante :
sudo chmod +s /usr/lib/xscreensaver/sonar
Cette commande permet de définir les drapeaux Setuid et Setgid pour cet économiseur d’écran.
Besoin de configuration
En particulier pour les économiseurs qui affiche des images, il semble souhaitable de pouvoir changer le chemin par défaut.
Le chemin par défaut est celui du répertoire image de l’utilisateur courant, pour connaître la valeur sur votre système utilisez :
xdg-user-dir PICTURES
Plus de détail dans l’article dédié
En Résumé, en fonction de la langue de l’interface :
Langue | Chemin standard | Écriture alternative |
---|---|---|
Français | /home/${USER}/Images | ~/Images |
Anglais | /home/${USER}/Picture | ~/Picture |
Cependant la solution universelle reste :
# Liste du contenu
ls -l "$( xdg-user-dir PICTURES )"
Cependant, nous verrons plus loin qu’aucune option ne semble pas disponible pour configurer ce chemin dans les versions actuellement disponibles dans les dépôts de Mint
. Il est à noter que l’auteur regrette ce fait puisqu’il continue à maintenir et faire évoluer ses économiseurs.
Allons un peu plus loin
Regardons, l’un des fichiers de configuration et essayons de comprendre :
cat /usr/share/applications/screensavers/zoom.desktop
Cette commande vous affichera le contenu suivant :
[Desktop Entry]
Name=Zoom
Exec=/usr/lib/xscreensaver/zoom -root
TryExec=/usr/lib/xscreensaver/zoom
Comment=Zooms in on a part of the screen and then moves around. With the "Lenses" option, the result is like looking through many overlapping lenses rather than just a simple zoom. Written by James Macnicol.
StartupNotify=false
Terminal=false
Type=Application
Categories=Screensaver;
OnlyShowIn=MATE;
Cela ressemble à un fichier '*.ini' en termes de structure avec des sections définies entre crochets. Ici, il n’y a qu’une section qui se nomme : Desktop Entry
Décodage trivial des différentes lignes qui ont un format [propriété]=[valeur].
Propriété | Valeur |
---|---|
Name | Il semble assez évidant que c’est le nom affiché dans l’interface de ‹configuration› des économiseurs d’écran. |
Exec | On comprend que c’est le nom du programme qui gère l’affichage avec ces paramètres |
TryExec | 'Try' qui veut dire essayer, laisse penser qu’en cas d’échec de la commande précédente, cette seconde commande sera à prendre en compte. |
StartupNotify | Non investigué, mais on comprend que c’est une valeur booléenne (true ou false) – ce n’est pas intéressant pour cet article |
Terminal | booléen / pas intéressant ici |
Type | booléen / pas intéressant ici |
Categories | Surprise il s’agit d’un économiseur d’écran. |
OnlyShowIn | pas intéressant ici |
On comprend que les propriétés qui nous intéressent sont Exec et TryExec. Pour la propriété Exec, il y a une option -root. Ce paramètre indique que l’on souhaite utiliser la fenêtre racine.
Pour éviter de faire des bêtises, on va donc se concentrer sur la propriété TryExec.
Essayons d’exécuter depuis le terminal la commande : /usr/lib/xscreensaver/zoom
Miracle, l’économiseur se lance dans une fenêtre, et si on clique dessus cela passe à l’image suivante. Cela n’est pas possible en mode économiseur d’écran puisque toute intervention du clavier, de la souris ou autre arrête l’économiseur d’écran.
Première conclusion à cette étape
On peut lancer les économiseurs d’écran dans une fenêtre et il est possible d’interagir avec.
Liste des économiseurs d’écran
On va essayer de répondre à la question : Comment récupérer la liste de tous les programmes liés aux différents économiseurs d’écran ?
Pour cela on va avoir besoin des commandes suivantes :
Commande | Description simplifiée |
---|---|
grep | N’affiche que les lignes contenant un motif donné. Ex : |
| | Prend la réponse d’une commande et la passe comme entrée à la commande suivante |
cut | N’affiche qu’une colonne – ex: qui affiche b et ensuite: qui affiche b;c |
Du coup
grep 'TryExec=' /usr/share/applications/screensavers/zoom.desktop | cut -d '=' -f2-
Nous affiche bien, le nom du programme lié à notre économiseur d’écran.
OK, mais on voulait la liste de tous les programmes non ?
En effet, rien de plus facile, remplaçons le nom du fichier par *
:
grep 'TryExec=' /usr/share/applications/screensavers/*.desktop | cut -d '=' -f2-
Quels économiseurs d’écran
Une vue de moteur en 3D ?
/usr/lib/xscreensaver/engine
On fait quelques essais avec la sourie et le clavier et zap :
- 'q' : pour quitter (à priori vrai sur tous les économiseurs)
- 'ESPACE' : pour changer de point de vue (fonction différente suivant les économiseurs).
Ici la souris n’a pas d’effet.
De l’art d’ordinateur
/usr/lib/xscreensaver/substrate
Cet économiseur fait de jolies images, mais il ne faut rien faire sur son ordinateur, en le lançant depuis la ligne de commande, vous n’avez plus ce problème.
On peut configurer quelque chose ?
En général sous Linux, pour connaître les paramètres d’une commande, on utilise le paramètre --help (ou -h), essayons :
/usr/lib/xscreensaver/spotlight --help
Et voilà le résultat :
Spotlight: from the XScreenSaver 5.36 distribution (10-Oct-2016)
https://www.jwz.org/xscreensaver/
Options include: -root, -window, -mono, -install, -noinstall,
-visual <arg>, -window-id <arg>, -fps, -no-fps, -pair,
-delay <arg>, -duration <arg>, -radius <arg>.
Alors, on comprend que ces programmes n’ont pas été mis à jour depuis 3 ans ! On comprend pourquoi l’auteur n’est pas content.
Essayons donc ces paramètres
Paramètre | Observation |
---|---|
-root | ça plante... |
-window | Ne fait rien, ce qui semble logique puisqu’on est déjà en mode fenêtré. |
-install | Pas testé. |
-noinstall | Pas testé. |
-visual GL | |
-window-id arg | Réservé aux développeurs. |
-fps | Ajoute l’affichage du nombre d’images par secondes et la charge machine. |
-no-fps | Ne fait rien, doit supprimer -fps lorsqu’il est défini ailleurs. |
-pair | Ouvre deux fenêtres. |
-delay 1 | Vitesse de déplacement du spot |
-duration 2 | Change d’image toutes les 2 secondes. |
-radius 50 | Défini la taille du spot à 50 pixels. |
En fait, un autre réflexe qu’il faut avoir sur Linux est d’utiliser la commande man
qui permet d’afficher le manuel lié à une commande.
man zoom
La section SYNOPSIS:
zoom [-display host:display.screen] [-foreground color]
[-background color] [-window] [-root] [-mono]
[-install] [-visual visual] [-delay usecs]
[-duration secs] [-lenses] [-pixwidth pixels]
[-pixheight pixels] [-pixspacex pixels]
[-pixspacey pixels] [-lensoffsetx pixels]
[-lensoffsety pixels] [-fps]
On note qu’il y a plus de paramètres que ce que l’aide intégrée affiche.
Du coup la section OPTIONS permet de compléter notre tableau.
Paramètre | Description |
---|---|
-window | Dessine dans une nouvelle fenêtre. Action par défaut. |
-root | Dessine dans la fenêtre principale. |
-mono | Pour les anciennes machines affichant en monochrome. N’a pas d’effet sur les systèmes modernes. |
-install | Utilise un jeu de couleur spécifique pour la fenêtre. N’a pas d’effet sur les systèmes modernes. |
-visual visual | Permet de définir le mode d’affichage à utiliser. Voir plus loin. |
-delay microseconds | Ralentisseur d’affichage. |
-duration seconds | Défini le délai avant l’affiche de l’image suivante. Par défaut 120 secondes. |
-lenses | Au lieu de faire un agrandissement, copie simplement une région de l’image d’origine. Si lensoffsetx <pixwidth (et pareillement pour Y), des régions consécutives se chevaucheront, ce qui donnera l’effet de regarder à travers une matrice de loupes. |
-pixwidth pixels | Largeur de la loupe en pixels. |
-pixheight pixels | Hauteur de la loupe en pixels. |
-pixspacex pixels | Nombre de pixels noirs entre les loupes (direction X). |
-pixspacey pixels | Nombre de pixels noirs entre les loupes (direction Y). |
-lensoffsetx pixels | Distance dans la direction X entre des régions copiées consécutives (efficace uniquement lorsque avec les loupes) |
-lensoffsety pixels | Distance dans la direction Y entre des régions copiées consécutives (efficace uniquement lorsque avec les loupes) |
D’autre recherches, que je vous épargne, permettent de trouver des valeurs possibles pour l’option -visual :
- Any
- Best
- Default
- Default-N
- GL
- TrueColor
- PseudoColor
- StaticGray
- GrayScale
- DirectColor
- Color
- Gray
- Mono
Ce serait bien de voir chacun de ces effets sans avoir à taper toutes les commandes, alors essayons de programmer cela en bash
.
Cela va nous permettre d’introduire de nouveaux concepts :
Pour créer une variable en bash
, il suffit de la faire précéder de l’instruction declare
(mmm, OK, c’est optionnel, mais c’est pour des raisons historiques). Ensuite on utilise le signe = comme opérateur d’affectation, enfin on met la valeur. Comme dans notre cas, on a plusieurs valeurs, on va mettre cela entre guillemets : ' et une valeur par ligne.
Cela donne :
declare VISUALS='
Any
Best
Default
Default-N
GL
TrueColor
PseudoColor
StaticGray
GrayScale
DirectColor
Color
Gray
Mono
'
L’idée ensuite est de parcourir toutes ces valeurs. La commande for est là pour ça :
for VISUAL in $VISUALS ; do echo $VISUAL ; done
En détail :
- On met la première valeur de VISUALS dans VISUAL. On utilise $ devant VISUALS car on veut le contenu de la variable et pas son nom et on fait cela temps qu’il y a des valeurs à prendre.
- Le point virgule ; indique que l’on à fini cette commande.
- do littéralement faire.
- echo littéralement répète, cela imprime ce qui suit et saute à la ligne.
- $VISUAL on affiche la valeur courante.
- ; fin de la commande
- done fin de la boucle (littéralement c'est fait)
Cette ligne se contente d'afficher toutes les valeurs contenues dans la variable VISUALS.
Maintenant, on voudrait lancer l’économiseur d’écran. Pour cela il suffit d’ajouter dans la boucle (avant le done) :
/usr/lib/xscreensaver/spotlight -visual $VISUAL
Ce qui au final donne :
declare VISUALS='
Any
Best
Default
Default-N
GL
TrueColor
PseudoColor
StaticGray
GrayScale
DirectColor
Color
Gray
Mono
'
for VISUAL in $VISUALS ; do echo $VISUAL; /usr/lib/xscreensaver/spotlight -visual $VISUAL ; done
Pour passer à l’économiseur suivant, il suffit de fermer la fenêtre ou d’utiliser la touche q (pour « quit »).
On s’aperçoit que toutes ces valeurs ne sont pas fonctionnelles, loin de là, mais je pense que c’est parce que certaine valeurs doivent être utilisés avec d’autre paramètres (par ex -root, -mono) et aussi que cela dépend de la machine et du système d’exploitation (cet économiseur d’écran tourne sur beaucoup de plateformes).
La suite…
Ce billet étant suffisant long, je garde la suite pour plus-tard.
ᦿ