Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 !
  • utilisateurs/j5012/brouillons/mes_desktop_scripts.txt
  • Dernière modification: Le 28/04/2018, 11:32
  • (modification externe)