Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
utilisateurs:j5012:brouillons:mes_desktop_scripts [Le 01/04/2017, 07:02] J5012 les scripts appimage |
utilisateurs:j5012:brouillons:mes_desktop_scripts [Le 28/04/2018, 11:32] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | Les lanceurs de bureau sont des scripts au format Freedesktop avec une extension de fichier masqué, point desktop. | ||
+ | * Ils sont installés dans le chemin système (Path) par apt et localisés à ''/usr/share/applications''. | ||
+ | * Lorsqu'ils sont modifiés par l'utilisateur ou une application, ils sont localisés à ''$HOME/.local/share/applications''. | ||
+ | |||
+ | Si deux lanceurs de même nom se trouvent dans les deux localisations possibles, c'est la version du dossier personnel qui l'emporte ... | ||
+ | |||
+ | ===== Prérequis ===== | ||
+ | |||
+ | * Un niveau moyen en Anglais | ||
+ | * Lisez la documentation [[https://www.freedesktop.org/wiki/Specifications/|Spécifications Freedesktop]] | ||
+ | * Lisez la documentation [[http://www.tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html|Bash : Guide pour debutant]] | ||
+ | |||
+ | ===== Problématique des applications Java ===== | ||
+ | |||
+ | exemples pratiques : ancestris et jdownloader2 | ||
+ | * ancestris s'installe comme un paquet debian dans le chemin du système | ||
+ | * jdownloader peut s'installer via script dans le chemin du système ou dans l'espace utilisateur | ||
+ | |||
+ | dans les deux cas, des lanceurs de bureau sont fournis et correctement installés | ||
+ | * l'icon ne s'affiche pas dans les menus d'applications, ou s'il s'affiche, disparaît lors du lancement | ||
+ | * l'icon ne s'affiche pas dans la barre de lancement unity, ni pendant l'exécution | ||
+ | |||
+ | lorsqu'on lit le code de programme du script lanceur, on s'aperçoit que l'icon associé à exec est lié à un script qui appelle un script qui appelle le programme java : unity n'associe pas le programme java en exécution avec le lanceur de bureau → est-ce un bug unity ou une mauvaise écriture du script lanceur ? | ||
+ | |||
+ | ==== JDownloader2 ==== | ||
+ | |||
+ | Code de programme d'un script de lanceur de bureau qui fonctionne : l'icon lié au programme java s'affiche correctement lors de l'exécution ... | ||
+ | |||
+ | <code> | ||
+ | #!/usr/bin/env xdg-open | ||
+ | [Desktop Entry] | ||
+ | Type=Application | ||
+ | Name=JDownloader 2 | ||
+ | Exec=$HOME/jd2/JDownloader2 | ||
+ | Icon=$HOME/jd2/.install4j/JDownloader2.png | ||
+ | Categories=Network;Application; | ||
+ | </code> | ||
+ | |||
+ | ==== Ancestris ==== | ||
+ | |||
+ | Code de programme d'un script de lanceur de bureau qui ne fonctionne pas : l'icon lié au programme java ne s'affiche pas ! | ||
+ | |||
+ | <code> | ||
+ | [Desktop Entry] | ||
+ | Encoding=UTF-8 | ||
+ | Name=Ancestris | ||
+ | Name[fr]=Ancestris – Programme de Généalogie | ||
+ | Comment=A graphical viewer and editor genealogy program. | ||
+ | Comment[fr]=Programme de généalogie respectant en tous points la norme gedcom. | ||
+ | Exec=ancestris | ||
+ | Icon=ancestris | ||
+ | Terminal=false | ||
+ | Type=Application | ||
+ | Categories=Office;X-Genealogy; | ||
+ | </code> | ||
+ | |||
+ | Le fichier de configuration du menu pour ancestris, /usr/share/menus/ancestris | ||
+ | <code> | ||
+ | ?package(ancestris):needs="x11" section="Applications/Office" \ | ||
+ | title="ancestris" command="/usr/bin/ancestris" \ | ||
+ | icon="/usr/share/pixmaps/ancestris.xpm" | ||
+ | </code> | ||
+ | |||
+ | Le fichier de script /usr/bin/ancestris | ||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | cd /usr/share/ancestris/bin/ | ||
+ | sh ancestris "$@" | ||
+ | </code> | ||
+ | |||
+ | Le fichier de script java /usr/share/ancestris/bin/ancestris | ||
+ | <code> | ||
+ | #!/bin/sh | ||
+ | |||
+ | # | ||
+ | # resolve symlinks | ||
+ | # | ||
+ | |||
+ | PRG=$0 | ||
+ | |||
+ | while [ -h "$PRG" ]; do | ||
+ | ls=`ls -ld "$PRG"` | ||
+ | link=`expr "$ls" : '^.*-> \(.*\)$' 2>/dev/null` | ||
+ | if expr "$link" : '^/' 2> /dev/null >/dev/null; then | ||
+ | PRG="$link" | ||
+ | else | ||
+ | PRG="`dirname "$PRG"`/$link" | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | progdir=`dirname "$PRG"` | ||
+ | APPNAME=`basename "$PRG"` | ||
+ | |||
+ | if [ -f "$progdir/../etc/$APPNAME".conf ] ; then | ||
+ | . "$progdir/../etc/$APPNAME".conf | ||
+ | fi | ||
+ | |||
+ | # XXX does not correctly deal with spaces in non-userdir params | ||
+ | args="" | ||
+ | |||
+ | case "`uname`" in | ||
+ | Darwin*) | ||
+ | userdir="${default_mac_userdir}" | ||
+ | ;; | ||
+ | *) | ||
+ | userdir="${default_userdir}" | ||
+ | ;; | ||
+ | esac | ||
+ | while [ $# -gt 0 ] ; do | ||
+ | case "$1" in | ||
+ | --userdir) shift; if [ $# -gt 0 ] ; then userdir="$1"; fi | ||
+ | ;; | ||
+ | *) args="$args \"$1\"" | ||
+ | ;; | ||
+ | esac | ||
+ | shift | ||
+ | done | ||
+ | |||
+ | if [ -f "${userdir}/etc/$APPNAME".conf ] ; then | ||
+ | . "${userdir}/etc/$APPNAME".conf | ||
+ | fi | ||
+ | |||
+ | if [ -n "$jdkhome" -a \! -d "$jdkhome" -a -d "$progdir/../$jdkhome" ]; then | ||
+ | # #74333: permit jdkhome to be defined as relative to app dir | ||
+ | jdkhome="$progdir/../$jdkhome" | ||
+ | fi | ||
+ | |||
+ | readClusters() { | ||
+ | if [ -x /usr/ucb/echo ]; then | ||
+ | echo=/usr/ucb/echo | ||
+ | else | ||
+ | echo=echo | ||
+ | fi | ||
+ | while read X; do | ||
+ | if [ "$X" \!= "" ]; then | ||
+ | $echo "$progdir/../$X" | ||
+ | fi | ||
+ | done | ||
+ | } | ||
+ | |||
+ | absolutize_paths() { | ||
+ | while read path; do | ||
+ | if [ -d "$path" ]; then | ||
+ | (cd "$path" 2>/dev/null && pwd) | ||
+ | else | ||
+ | echo "$path" | ||
+ | fi | ||
+ | done | ||
+ | } | ||
+ | |||
+ | clusters=`(cat "$progdir/../etc/$APPNAME".clusters; echo) | readClusters | absolutize_paths | tr '\012' ':'` | ||
+ | |||
+ | if [ ! -z "$extra_clusters" ] ; then | ||
+ | clusters="$clusters:$extra_clusters" | ||
+ | fi | ||
+ | |||
+ | nbexec=`echo "$progdir"/../platform*/lib/nbexec` | ||
+ | |||
+ | case "`uname`" in | ||
+ | Darwin*) | ||
+ | eval exec sh '"$nbexec"' \ | ||
+ | --jdkhome '"$jdkhome"' \ | ||
+ | -J-Dcom.apple.mrj.application.apple.menu.about.name='"$APPNAME"' \ | ||
+ | -J-Xdock:name='"$APPNAME"' \ | ||
+ | '"-J-Xdock:icon=$progdir/../../$APPNAME.icns"' \ | ||
+ | --clusters '"$clusters"' \ | ||
+ | --userdir '"${userdir}"' \ | ||
+ | ${default_options} \ | ||
+ | "$args" | ||
+ | ;; | ||
+ | *) | ||
+ | sh=sh | ||
+ | # #73162: Ubuntu uses the ancient Bourne shell, which does not implement trap well. | ||
+ | if [ -x /bin/bash ] | ||
+ | then | ||
+ | sh=/bin/bash | ||
+ | fi | ||
+ | eval exec $sh '"$nbexec"' \ | ||
+ | --jdkhome '"$jdkhome"' \ | ||
+ | --clusters '"$clusters"' \ | ||
+ | --userdir '"${userdir}"' \ | ||
+ | ${default_options} \ | ||
+ | "$args" | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | </code> | ||
+ | |||
+ | Un code de programme de lanceur de bureau qui fonctionnerait pour ancestris devrait modifier la ligne Exec de façon à pointer directement sur le programme java au lieu de passer par un script qui appelle un script qui appelle .... | ||
+ | <code> | ||
+ | [Desktop Entry] | ||
+ | Encoding=UTF-8 | ||
+ | Name=Ancestris | ||
+ | Name[fr]=Ancestris – Programme de Généalogie | ||
+ | Comment=A graphical viewer and editor genealogy program. | ||
+ | Comment[fr]=Programme de généalogie respectant en tous points la norme gedcom. | ||
+ | Exec=/usr/share/ancestris/bin/ancestris | ||
+ | Icon=/usr/share/pixmaps/ancestris.xpm | ||
+ | Terminal=false | ||
+ | Type=Application | ||
+ | Categories=Office;X-Genealogy; | ||
+ | </code> | ||
+ | |||
+ | ===== Problématique des applications scriptées Appimage ===== | ||
+ | |||
+ | * rendre le script appimage exécutable | ||
+ | * indiquer le chemin complet | ||
+ | |||
+ | ou lancer l'application appimage, attendez que son icon apparaisse dans la barre des lanceurs, et ajouter au Tableau de bord ... | ||
+ | |||
+ | ==== Exemple avec Krita ==== | ||
+ | |||
+ | <code> | ||
+ | [Desktop Entry] | ||
+ | Encoding=UTF-8 | ||
+ | Version=1.0 | ||
+ | Type=Application | ||
+ | Name=Krita | ||
+ | Icon=krita.png | ||
+ | Exec=/home3/Public/binary+/krita-3.1.2-x86_64.appimage | ||
+ | StartupNotify=false | ||
+ | StartupWMClass=krita | ||
+ | OnlyShowIn=Unity; | ||
+ | X-UnityGenerated=true | ||
+ | </code> | ||
+ | |||
+ | ==== Exemple avec Avidemux ==== | ||
+ | |||
+ | <code> | ||
+ | [Desktop Entry] | ||
+ | Encoding=UTF-8 | ||
+ | Version=1.0 | ||
+ | Type=Application | ||
+ | Name=Avidemux | ||
+ | Icon=avidemux3_portable | ||
+ | Exec=/home3/Public/binary+/avidemux_2.6.18.appImage | ||
+ | StartupNotify=false | ||
+ | StartupWMClass=avidemux3_portable | ||
+ | OnlyShowIn=Unity; | ||
+ | X-UnityGenerated=true | ||
+ | </code> | ||
+ | |||
+ | ===== Problématique des lanceurs de Bureau sur le bureau ===== | ||
+ | |||
+ | Dans les précédentes versions de Ubuntu, une commande permettait de creer facilement un lanceur de Bureau sur le bureau ... Actuellement cette commande existe toujours mais est seulement disponible hors-depôt officiel. | ||
+ | |||
+ | Pourtant un mécanisme fort simple et méconnu permet de se substituer à cette commande et à toute application externe de création des raccourcis Freedesktop. | ||
+ | |||
+ | Il suffit pour cela de créer un modéle (ou template en anglais) du fichier lanceur de bureau dans le dossier prédéfini "Modèles" (Templates) du dossier Personnel de l'utilisateur courant de la session, et de rendre ce modéle de fichier exécutable. | ||
+ | |||
+ | * Créez le fichier modèle | ||
+ | <code>gedit "$HOME/Modèles/Lanceur de Bureau.desktop"</code> | ||
+ | |||
+ | * Remplissez-le | ||
+ | <code> | ||
+ | [Desktop Entry] | ||
+ | Version=1.0 | ||
+ | Type=Application | ||
+ | Name=Desktop Laucher | ||
+ | Name[fr_FR]=Lanceur de Bureau | ||
+ | Comment=example template with gedit as application | ||
+ | TryExec=gedit | ||
+ | Exec=gedit | ||
+ | Icon=icon | ||
+ | </code> | ||
+ | |||
+ | * Rendez-le exécutable | ||
+ | <code>chmod u+x "$HOME/Modèles/Lanceur de Bureau.desktop"</code> | ||
+ | |||
+ | Sur le bureau, pour créer un exemple raccourci lanceur, cliquez droit sur un espace vierge du bureau, dans le menu contextuel, choisissez "Nouveau document >" → "Lanceur de Bureau" → renommez-le simplement (sans extension) | ||
+ | |||
+ | Cliquez deux fois dessus, l'application exemple gedit se lancera sans provoquer d'erreurs ... | ||
+ | Si vous choisissez de créer manuellement un raccourci lanceur vous-même, ou de déplacer ou copier un raccourci lanceur existant, n'oubliez pas de le rendre exécutable sinon Ubuntu vous dira que le lanceur d'application est non fiable ! |