LINUXFILES.de

Menü Einträge unter Ubuntu 12.04 erstellen mit dem DeskCreator

| 8 Kommentare

Eine bequeme Lösung für das Anlegen von Menüeinträgen.

Fast täglich lege ich für meine Scripts Einträge im Menü an, um diese dann bequem aus dem Unity Starter aufrufen zu können. Bisher nutzte ich eine Vorlage die ich entsprechend immer wieder anpasste und dann manuell in das entsprechende Verzeichnis   kopierte. Genau für diese Aufgabe entstand jetzt das Script „DeskCreator“, denn man kann sich das Leben in Linux unnötig schwer machen oder einmal ein bisschen Zeit investieren und den ganzen Ablauf automatisieren.

Das Script habe ich unter Ubuntu 12.04 LTS erstellt, es benötigt Zenity in der Version 3.4.0 welche in den Ubuntuquellen vorhanden ist.

Das Script in einem HOME Ordner Ihrer Wahl abspeichern und ausführbar machen. Sie können den Quelltext auf dieser Seite kopieren oder das fertige Script als gepacktes Archiv herunterladen.

Nach dem Start öffnet sich folgender Formular Dialog, diesen bitte ausfüllen wie es in dem Beispiel angezeigt wird:

Den Namen durch einen gewünschten Namen und Comments ersetzen. Im Feld  Exec wird das zu startende Programm eingetragen. In diesem Beispiel befindet sich die tubeshark.sh im /usr/local/bin und ist dadurch systemweit aufrufbar. Ist das zu startende Programm in einem Ordner der nicht im systenweit bekannt ist, muss der gesamte Pfad eingetragen werden. Das letzte Feld benennt das Icon welches angezeigt werden soll. Das Icon muss sich im Ordner  /usr/share/pixmaps befinden. Kopieren Sie bevor Sie den Eintrag vornehmen das Icon in diesen Ordner und benennen Sie es im Feld Icon mit seinem Namen. Alle weiteren Felder können so wie angezeigt ausgefüllt werden. Handelt es sich bei dem Programm um ein Shell Script welches in einem Terminal aufgerufen werden soll, schreiben Sie in das zweite Feld „Terminal“ den Wert true.

Wenn alles ausgefüllt ist klicken Sie auf eintragen. Jetzt erscheint ein Dialog der Sie darauf hinweist das Sie das Root Passwort eingeben müssen. Das ist notwendig weil nur Root systemweit Starter anlegen kann.

Wenn Sie alles richtig gemacht haben sollte der Starter anschließend in der Dash von Unity zu finden sein.

Quelltext von DeskCreator:

#!/bin/bash
 
#Name:         DeskCreator
#Beschreibung: Erzeugt eine .desktop Datei im /usr/share/applications
#              diese wird dann im Startmenü angezeigt.
 
#Autor:        Karsten Weidenfeld
#Homepage:     http://www.Linuxfiles.de 
 
#Zenity Formulardialog
eingabe=$(zenity --forms --text="DeskCreator" --ok-label="Eintragen" --cancel-label="Abbrechen" --add-entry="Name" --add-entry="Terminal" --add-entry="X-MultipleArgs" --add-entry="Comment" --add-entry="Exec" --add-entry="Categories" --add-entry="Icon" --separator=";" --title="Neuer Eintrag") ; echo "$eingabe" >>newdesk.csv
 
if [ $? = "1" ] ; then exit 1
 
#Einlesen der Eingaben in Variablen
export name=$(cat newdesk.csv | head -n1 | tail -n1 | cut -d';' -f1)
export terminal=$(cat newdesk.csv | head -n1 | tail -n1 | cut -d';' -f2)
export multi=$(cat newdesk.csv | head -n1 | tail -n1 | cut -d';' -f3)
export comment=$(cat newdesk.csv | head -n1 | tail -n1 | cut -d';' -f4)
export exe=$(cat newdesk.csv | head -n1 | tail -n1 | cut -d';' -f5)
export cat=$(cat newdesk.csv | head -n1 | tail -n1 | cut -d';' -f6)
export icon=$(cat newdesk.csv | head -n1 | tail -n1 | cut -d';' -f7)
 
#Ausgeben der Variablen und anlegen der .desktop Datei
echo "[Desktop Entry]" >> $name.desktop
echo "Name=$name" >> $name.desktop
echo "Terminal=$terminal" >> $name.desktop
echo "X-MultipleArgs=$multi" >> $name.desktop
echo "Type=Application" >> $name.desktop
echo "Comment=$comment" >> $name.desktop
echo "Exec=$exe" >> $name.desktop
echo "Categories=$cat" >> $name.desktop
echo "Icon=/usr/share/pixmaps/$icon" >> $name.desktop
 
zenity --info --text="Sie müssen im nächsten Schritt Ihr Passwort eingeben
damit die .desktop Datei im System angelegt werden kann."
 
#Kopieren der .desktop Datei in /usr/share/applications und entfernen der Temp. Dateien
gksudo cp "$name.desktop" /usr/share/applications/"$name.desktop" ; rm $name.desktop ; rm newdesk.csv

Download: DeskCreator.sh.tar

Bei Anregungen, Fragen oder Programmfehlern bitte in die Kommentare posten.

Autor: Karsten Weidenfeld

Hallo, ich bin Karsten - Auf Linuxfiles.de schreibe ich speziell zum Thema Linux. Einer meiner Lieblingsbeschäftigungen ist das experimentieren und schreiben von Shellscripten. Neben Tips, Tricks und Tutorials habe ich bereits zahlreiche Shellscripte im Blog veröffentlicht.

8 Kommentare

  1. Das kann ich mit „sudo apt-get install menulibre“ aber einfacher haben. 😉
    Die App ist im Rahmen des Ubuntu App Showdown entstanden.
    Link: https://myapps.developer.ubuntu.com/dev/apps/1173/

  2. Danke für den Tip werde mir das Programm mal anschauen.

  3. Hey Karsten,

    finde Dein Script echt gut. Im Gegensatz zum App: „menulibre“, was bei GNOME 3 kein Icon zum Eintrag in Systemsettings anlegt, ist alles nur englischsprachig und damit unnötig schwer zu verwalten. Hier funktioniert Alacart hier bei GNOME 3 um Welten besser. Zum Vergleich zum App ist das Script klar viel bequemer, weil man schnell mal eine Verknüpfung anlegen kann ohne erst ein großes Menü starten zu müssen. Verwaltung der Start-Verknüpfungen ist Alacart klar weiterhin mein Favorit, weil man damit noch mehr anstellen kann als mit „menulibre“ … und das noch in Landessprache.

    Danke für deine Arbeit!

    Grüße aus dem Länd’le

  4. Vielen Dank für Dein Feedback, freut mich das Du was damit anfangen kannst. Genau für diesen Zweck ist es gedacht, mal schnell eine Verknüpfung anlegen ohne sich durch ein großes Programm frickeln zu müssen. Bisher habe ich das immer manuell gemacht und die notwendigen .desktop Dateien per Hand angelegt, weil mir die ganzen Programme dafür viel zu überladen waren.

  5. Vielleicht hilft dir das hier, etwas aufzuräumen:

    OLDIFS=$IFS; IFS=\;; read name exec icon < <(echo zenity\;call\;here); echo $name; echo $exec; echo $icon; IFS=$OLDIFS

    1. Per IFS den Separator auf ; setzen
    2. Zenity aufrufen
    3. Per Read mit dem Separator ; die Zenity-Ausgabe parsen…
    4. Separator zurücksetzen…

  6. Danke werde ich mir mal anschauen.

  7. Hallo Karsten,

    danke für das Skript. Vielleicht brauch ich es irgendwann mal. 😉

    Mag sein das ich etwas spießig bin mit meine fast 50 Jahren, aber irgendwie stolpere ich immer wieder, wenn du die Leser mit „Sie“ anredest. Muss das wirklich sein? Respekt kommt von „den Anderen achten“ und nicht von „den Anderen siezen“.

    LG
    Max

  8. Hallo Max,

    ich danke Dir für Dein Feedback. Nein ich finde nicht das es spießig ist und ich gebe Dir vollkommen Recht. Vielleicht sollte ich die Artikel wirklich etwas persönlicher schreiben. Die richtige Schreibweise wird sich mit der Zeit wahrscheinlich automatisch einstellen.

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.

* Copy This Password *

* Type Or Paste Password Here *