Ceci est une ancienne révision du document !
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 Spécifications Freedesktop
- Lisez la documentation 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 …
#!/usr/bin/env xdg-open [Desktop Entry] Type=Application Name=JDownloader 2 Exec=/bin/sh $HOME/jd2/JDownloader2 Icon=$HOME/jd2/.install4j/JDownloader2.png Categories=Network;Application;
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 !
[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;
Le fichier de configuration du menu pour ancestris, /usr/share/menus/ancestris
?package(ancestris):needs="x11" section="Applications/Office" \ title="ancestris" command="/usr/bin/ancestris" \ icon="/usr/share/pixmaps/ancestris.xpm"
Le fichier de script /usr/bin/ancestris
#!/bin/bash cd /usr/share/ancestris/bin/ sh ancestris "$@"
Le fichier de script java /usr/share/ancestris/bin/ancestris
#!/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
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 ….
[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=sh /usr/share/ancestris/bin/ancestris Icon=/usr/share/pixmaps/ancestris.xpm Terminal=false Type=Application Categories=Office;X-Genealogy;