Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/01/2007, à 23:37

simonishe

Génération automatique de lanceur sur le panneau

Bonjour à tous,

Est-ce que quelqu'un connaîtrait un moyen automatique de générer un lanceur sur le panneau
pour une application ? Dans gnome on fait clic-droit, puis on choisit une application, sans avoir à rentrer soi-même le chemin et le nom de l'icône. Je n'arrive pas à trouver une fonctionnalité similaire avec xfce.

En attendant une meilleure option, j'ai fait un petit script, qui marche pas mal chez moi.
Il cherche les fichiers .desktop sur le système. Marche mieux si on a le paquet menu-xdg installé.

On le lance en disant par exemple : xfdesktop2panel application  (application=abiword,mc, etc.)

Si xfce4-panel est présent au moment de l'exécution, mon script l'arrête et le relance après. Le seul problème, c'est qu'on doit peut-être faire un ctrl-alt-backspace pour sortir de la session X. Il faudrait envoyer un message à xfce4-panel, ce serait plus compliqué à faire. N'ai pas le courage de me plonger dans dbus...

Mais si quelqu'un veut le faire, je serais ravi !

J'attends les commentaires éventuels.

A bientôt


#!/bin/bash

# Ajoute une application dans le panneau xfce, d'après un fichier xdg-desktop,
#  ou en cherchant lui-meme dans les fichiers .desktop

# usage xfdesktop2panel [fichier.desktop | nom_application]
#            exemple : xfdesktop2panel abiword
#                      xfdesktop2panel /usr/share/applications/abiword.desktop

# 0.0.20070115b
# 14/01/2007
# (C) Simon

#besoin sed, awk grep, md5sum, killall, find, basename


TMP=/tmp/desktop$$
mkdir -p $TMP || exit 1
ISRUNNING=0
SOURCE=""
EXECUTABLE=""

if [ -e "$1" ] ; then
 SOURCE="$1"
else
 EXECUTABLE="`which \"$1\"`"
 if [ -n "$EXECUTABLE" ] ; then
  for i in `find /usr/share/applications/ -name "*.desktop"` \
    `find /var/lib/menu-xdg/applications/ -name "*.desktop"` ; do
   grep -q -e "^Exec=$EXECUTABLE" -e "^Exec=`basename $EXECUTABLE`" \
    "$i" && echo "$i" >>$TMP/desktopfiles
  done
  if [ -s $TMP/desktopfiles ] ; then
   SOURCE="`sed -e '1!d' $TMP/desktopfiles`"
  fi
 fi
fi

if [ -e "$SOURCE" ] ; then
 GREP="`sed -e '1!d' "$SOURCE" | grep -e '\[Desktop Entry\]'`"
 if [ -n "$GREP" ] ; then

  RUNNING=`ps -C xfce4-panel -o pid | sed -e '2!d'`
  if [ -n "$RUNNING" ] ; then
   echo "xfce4-panel déjà présent, arret temporaire" >&2
   ISRUNNING=1
   RELANCE="`ps -p $RUNNING -o cmd | sed -e '2!d'`"
   killall -9 xfce4-panel
  fi

  sed -e 's/^\[Desktop Entry\]/[Entry 0]/' -e '/Type=Application/d' \
   "$SOURCE" >$TMP/source

  MDS=`md5sum $TMP/source | awk '{print $1}'`

  cp $TMP/source ~/.config/xfce4/panel/launcher-$MDS.rc


  PANELS=~/.config/xfce4/panel/panels.xml

  NOLIGNE=`grep -n -e '<item name="launcher" id="' $PANELS |\
   awk '{print $1}' | sed -e '$!d' -e 's/:.*$//'`
  if [ -z "$NOLIGNE" ] ; then
   NOLIGNE=`grep -n -e '<item name="xfce4-menu" id="' $PANELS |\
    awk '{print $1}' | sed -e '1!d' -e 's/:.*$//'`
  fi
  if [ -z "$NOLIGNE" ] ; then
   NOLIGNE=`grep -n -e '<items>' $PANELS |\
    awk '{print $1}' | sed -e '1!d' -e 's/:.*$//'`
  fi
  sed -e "${NOLIGNE}a\
                        <item name=\"launcher\" id=\"$MDS\" \/>" \
  $PANELS >$TMP/panels
  mv $TMP/panels $PANELS

 fi
fi


rm -r -f $TMP

if [ $ISRUNNING -eq 1 ] ; then
 exec $RELANCE
fi

exit

Hors ligne