Petite récréation :

Ici, on a pour projet de « jouer » avec des icones sur la grille des applis de son Jolla ; il est prévu de réaliser un truc tout simple : selon son humeur, y afficher un smiley/angrey°, à volonté. Pour ce faire nous allons simplement voir comment sailfish réagit au changement d’icone du répertoire idoine.

Ainsi, à vue de nez, il nous faudra 2 smileys et quelques scripts basiques.

Quelques essais

Pour faire simple on va s’inspirer d’un paquet minimaliste : Htop.rpm présent sur Openrepos. Quel est sa composition ?

# rpm -q --list htop
/usr/bin/htop
/usr/share/applications/htop.desktop
/usr/share/doc/htop-1.0.2
/usr/share/doc/htop-1.0.2/COPYING
/usr/share/icons/hicolor/86x86/apps/htop.png
/usr/share/man/man1/htop.1.gz

Comme on le constate,

  • d’un exécutable : /usr/bin/htop
  • du fichier de description pour l’interface graphique :  /usr/share/applications/htop.desktop
  • du fichier png de l’icone : /usr/share/icons/hicolor/86×86/apps/htop.png
  • de fichiers man et doc :  /usr/share/man/man1/htop.1.gz et /usr/share/doc/htop-1.0.2/COPYING

On y découvre tout ce qu’il faut pour s’épargner la lecture de la Doc Sailfish, pour de petites appli toutes simples : on doit pouvoir très tranquilement modifier l’icone xxx.png référencée dans un fichier xxx.desktop de l’exécutable xxx, stocké dans le répertoire /usr/share/applications qui « gère » ces fichiers « .desktop ».

Yapluka !

Forum_Lien

Tout d’abord passons root

$ devel-su 
Password: ***************
#

créons un répertoire qui contiendra tout ce dont on aura besoin :

# mkdir /data/sdcard/SD64/ying-yang/
# cd /data/sdcard/SD64/ying-yang/

Convenons que le programme s’appellera yiang, l’icone yiang.png et le descripteur yiang.desktop.

On a compris qu’il sera nécessaire d’avoir un fichier yiang.desktop ; mais à quoi ressemble-t-il  ? Voyons le contenu de htop.desktop

# cat /usr/share/applications/htop.desktop
[Desktop Entry]
Version=1.0
Name=Htop
Type=Application
Comment=Show System Processes
Terminal=true
Exec=fingerterm -e "/usr/bin/htop"
Icon=htop
Categories=ConsoleOnly;System;
GenericName=Process Viewer'
#

nous allons créer notre yiang.desktop en s’inspirant largement de htop.desktop

# echo '[Desktop Entry]
Name=YIng-YAng
Type=Application
Comment=Show ying
Terminal=true
Exec=echo ''
Icon=yiang
Categories=ConsoleOnly;System;Monitor;
GenericName=show icon
X-Desktop-File-Install-Version=0.22 > yiang.desktop

Ici, il est fait référence à une icone yiang.png, mais il va être préférable de s’en préparer  deux. Et comme elles seront rangées dans le répertoire 86×86, vous devinerez aisément leurs définitions : 86x86x72 …Mais si c’est du 128×128, ça marche quand même 😉 .Téléchargeons (wget) des icones disponible sur le net aux urls

  • http://icons-search.com/img/fasticon/fast_emoticons_lnx.zip/fast_emoticons_lnx-Icons-128X128-smile_4.png-128×128.png
  • http://icons-search.com/img/fasticon/fast_emoticons_lnx.zip/fast_emoticons_lnx-Icons-128X128-smile_2.png-128×128.png

pour les mettre au format (convert -resize) 86×86 :

# wget http://icons-search.com/img/fasticon/fast_emoticons_lnx.zip/fast_emoticons_lnx-Icons-128X128-smile_4.png-128x128.png
--2014-04-04 14:15:44-- http://icons-search.com/img/fasticon/fast_emoticons_lnx.zip/fast_emoticons_lnx-Icons-128X128-smile_4.png-128x128.png
Resolving icons-search.com... 208.109.181.7
Connecting to icons-search.com|208.109.181.7|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21109 (21K) [image/png]
Saving to: 'fast_emoticons_lnx-Icons-128X128-smile_4.png-128x128.png'
100%[=========================================================================>] 21,109 47.4KB/s in 0.4s
2014-04-04 14:15:46 (47.4 KB/s) - 'fast_emoticons_lnx-Icons-128X128-smile_4.png-128x128.png' saved [21109/21109]
# convert -resize 86x86 fast_emoticons_lnx-Icons-128X128-smile_4.png-128x128.png ying.png
# wget http://icons-search.com/img/fasticon/fast_emoticons_lnx.zip/fast_emoticons_lnx-Icons-128X128-smile_2.png-128x128.png
--2014-04-04 14:17:50-- http://icons-search.com/img/fasticon/fast_emoticons_lnx.zip/fast_emoticons_lnx-Icons-128X128-smile_2.png-128x128.png
Resolving icons-search.com... 208.109.181.7
Connecting to icons-search.com|208.109.181.7|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21166 (21K) [image/png]
Saving to: 'fast_emoticons_lnx-Icons-128X128-smile_2.png-128x128.png'
100%[=========================================================================>] 21,166 47.6KB/s in 0.4s
2014-04-04 14:17:51 (47.6 KB/s) - 'fast_emoticons_lnx-Icons-128X128-smile_2.png-128x128.png' saved [21166/21166]
# convert -resize 86x86 fast_emoticons_lnx-Icons-128X128-smile_2.png-128x128.png yang.png

Et voila 2 icones de prêtes ! Vous constaterez qu’aucune ne s’appelle yiang.png, et c’est délibéré ; réparons cet oublis en en copiant une dans /usr/share/icons/hicolor/86×86/apps selon les directives de yiang.desktop :

# cp ying.png /usr/share/icons/hicolor/86X86/apps/yiang.png

Et voila, notre image yiang.png existe 😉 et elle ressemble à ying.png. N’oublions pas que le fichier yiang.desktop est destiné au répertoire /usr/share/applications/ :

# cp ying.desktop /usr/share/applications/yiang.desktop

et si vous observez la grille du Jolla, l' »application » ying-yang y apparaît, avec son icone ying.png/yiang.png. Si vous l’effacez,

# rm /usr/share/applications/yiang.desktop

elle disparaît, si on la recopie à nouveau,

# cp ying.desktop /usr/share/applications/yiang.desktop

elle réapparaît.

Amusons nous un peu !

Que ce passe-t-il quand on change l’icone :

# cp yang.png /usr/share/icons/hicolor/86x86/apps/yiang.png

l’icone ying se change en yang … vous pouvez comme ça switcher d’icone à volonté.

# cp ying.png /usr/share/icons/hicolor/86x86/apps/yiang.png
# cp yang.png /usr/share/icons/hicolor/86x86/apps/yiang.png

et ainsi de suite …

Enfin c’est drôle mais autant automatiser l’action :

# while true
do
rm -f /usr/share/icons/hicolor/86x86/apps/yiang.png
cp -f ying.png /usr/share/icons/hicolor/86x86/apps/yiang.png
sleep 5
rm -f /usr/share/icons/hicolor/86x86/apps/yiang.png
cp -f yang.png /usr/share/icons/hicolor/86x86/apps/yiang.png
sleep 5
done

et votre icone « clignote » d’un emoticon à l’autre.

Forum_Lien

Quid de l’utilisateur normal : nemo ?

Jusque là tout est exécuté sous l’autorité de root, donc pas de soucis pour écrire dans des répertoires « protégés » ; mais peut on le faire en tant que nemo ?
Bien suuuur ! C’est bleu-si-pô !

Forum_Lien

en réglant proprement les droits sur les fichiers qui sont amenés à être modifiés :

# chown nemo:root /usr/share/icons/hicolor/86x86/apps/yiang.png
# chmod 664 /usr/share/icons/hicolor/86x86/apps/yiang.png
# ls -l /usr/share/icons/hicolor/86x86/apps/yiang.png
-rw-rw-r-- 1 root nemo 25964 Apr  4 15:31 /usr/share/icons/hicolor/86x86/apps/yiang.png
# chown -R nemo:nemo /data/sdcard/SD64/ying-yang/

puis quittons le mode superuser :

# exit

et relançons notre script (sans les rm, évidemment)

> cd /data/sdcard/SD64/ying-yang/
> while true
do
cp -f yang.png /usr/share/icons/hicolor/86x86/apps/yiang.png
sleep 5
cp -f ying.png /usr/share/icons/hicolor/86x86/apps/yiang.png
sleep 5
done

Grâce aux modifications des droits et des users, les copies se font sans difficulté et l’icone de l’appli se remet à clignoter.

Et un petit mode interactif ?

En fait il eut été sympas qu’elle bascula de l’une vers l’autre au moindre « touch », à l’écran, plutôt que de devoir le faire à travers le terminal.

Forum_Lien

Comme avec cette stratégie, on ne sait pas quelle icone est présentée, on a besoin de 2 scripts : un pour chaque icone, disons yang.sh et ying.sh.
Sans surprise, yang.sh qui affichera l’icone yang.png ressemblera à :

> echo '#!/bin/sh
cp -f /data/sdcard/SD64/ying-yang/yang.png /usr/share/icons/hicolor/86x86/apps/yiang.png 
cp -f /data/sdcard/SD64/ying-yang/yang.sh /data/sdcard/SD64/ying-yang/yiang.sh' >ying.sh 
>chmod +x ying.sh

Notons que le script yang.sh prévoit le même switch pour l’exécutable yiang.sh que pour l’icone yiang.png ; donc on fait pareil pour ying.sh, son script ying.sh et son icone ying.png:

> echo '#!/bin/sh
cp -f /data/sdcard/SD64/ying-yang/ying.png /usr/share/icons/hicolor/86x86/apps/yiang.png
cp -f /data/sdcard/SD64/ying-yang/ying.sh /data/sdcard/SD64/ying-yang/yiang.sh' >yang.sh
>chmod +x yang.sh

En invoquant chacun des deux scripts, l’icone de l’application est intervertie, ce qui est exactement ce qu’on voulait. Il ne reste plus qu’à mettre à jour yiang.desktop (en tant que root)
en modifiant la ligne
Exec=echo
qui ne faisait rien, par
Exec=/data/sdcard/SD64/ying-yang/yiang.sh
qui exécutera le script yiang.sh présent dans le répertoire /data/sdcard/SD64/ying-yang

 

Que se passe-t-il ?

Lorsque l’on « touch » l’appli yiang sur l’écran du Jolla, le système sailfish (en fait l’UI) regarde la ligne exec du fichier yiang.desktop pour savoir quoi faire. Bien que l’appli yiang ne change pas de nom, son script exécute celui de ying.sh, qui copie l’icone ying.png en yiang.png et le script yang.sh en yiang.sh (switch vers yang) ; si on re-touch l’applis yiang sur l’écran, le système regarde la ligne exec , et comme yiang est devenu le script yang.sh, il copie l’icone yang.png en yiang.png et le script ying.sh en yiang.sh (re-switch).

je vous avais prévenu … un truc tout simple : promesse tenue !

Maintenant si vous voulez vous faire une ligne d’icones représentant votre état général (santé, sentimental, humeur, forme), il vous suffira de reproduire ce petit tuto en changeant les noms et les images.

have fun !

Forum_Lien

NB :  On considère que vous disposez des applis Htop, wget et convert (du paquet imagemagik) sur votre Jolla ; autrement faites-le sur votre PC et déposez les fichiers finaux dans le répertoire de travail de votre Jolla.

Le répertoire /data/sdcard/SD64 est à votre convenance ; dans mon cas, c’est celui de la µSDcard externe, mais vous pouvez choisir ce qui vous plait.

°) angrey : néologisme construit à partir d’angry pour s’opposer musicalement à « smiley » qui provient de smile (avec le « e » final qui en anglais se prononce ‘i’, comme le « y ») ;

bandix400

bandix400

Auteur

Je suis passionné de génétique, d’informatique, de mécanique, et je m’arrête là car je manque déjà de temps pour tout faire ; autrement j’y rajouterais volontiers l’électronique, la musique, l’aquariophilie, le graphisme, le jeu Vidéo (simulation de conduite/FPS) et du ju-jitsu traditionnel.
bandix400

Les derniers articles par bandix400 (tout voir)

Non, Vi ne mord pas ! Initiation au légendaire éditeur de texte.
Faire de DuckDuckGo votre moteur de recherche par défaut