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 …

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=$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=/usr/share/ancestris/bin/ancestris
Icon=/usr/share/pixmaps/ancestris.xpm
Terminal=false
Type=Application
Categories=Office;X-Genealogy;
  • 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

[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

Exemple avec Avidemux

[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
  • utilisateurs/j5012/brouillons/mes_desktop_scripts.1491022959.txt.gz
  • Dernière modification: Le 01/04/2017, 07:02
  • par J5012