cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

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

screensaver

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 :
grep 'TryExec=' /usr/share/applications/screensavers/zoom.desktop
| Prend la réponse d’une commande et la passe comme entrée à la commande suivante
cut N’affiche qu’une colonne – ex:
echo 'a;b;c' | cut -d ';' -f2
qui affiche b et ensuite:
echo 'a;b;c' | cut -d ';' -f2-
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.

ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog