Wie aktualisiere ich das Anwendungsmenü für das Startsymbol in Ubuntu 12.04?

10

Nach dem Ändern einer Desktop-Datei /usr/share/applicationsmuss ich das Anwendungsmenü des Startsymbols aktualisieren, damit meine Änderung angezeigt wird. Aus Gründen der Übersichtlichkeit sollte das Menü geändert werden, das mit einem Rechtsklick angezeigt wird, wenn sich der Zeiger auf ein Symbol des Starters befindet (die große Leiste voller Symbole auf der linken Seite des Bildschirms).

Die beste Antwort wäre eine einfache Befehlszeile.

Ich verwende Ubuntu-2d nicht und möchte mich nicht abmelden / anmelden.

Mir ist eine Teillösung bekannt:

  • unity --replace lädt alles neu (Fensterdekoration, Benachrichtigungsbereich, ...)
  • killall ubuntu-2d-launcher ist nur Ubuntu-2d, aber wenn ein ähnlicher einzeiliger Befehl für die Einheit existiert, wäre dies eine gute Lösung.
  • Abmelden und dann wieder anmelden funktioniert auch, aber ich kann es mir nicht leisten, meine gesamte Sitzung zu verlieren, nur um das Menü zu aktualisieren.
  • unter Ubuntu 14.04 habe ich dieses Problem nicht: Alle an "* .desktop" -Dateien vorgenommenen Änderungen scheinen live erneut ausgeführt zu werden.

Irgendwelche Vorschläge ? Gibt es einen Weg dank ccsm?

Vaab
quelle
Hallo @vaab, ich habe eine Dekstop-Datei und ändere das Symbol, indem ich den Pfad in der .desktop-Datei bearbeite. War die akzeptierte Lösung das, was Sie gewählt haben? unity --replacefunktioniert? Das Nachladen von allem macht mir nichts aus.
Noitidart
Bestätigt unity --replacefunktioniert in Ubuntu 16.04 , wird aber die schweren Anwendungen wie Chrome, Thunderbirds ...
PhatHV
@PhatHV: Oh, tut mir leid, es wird keine Anwendung neu geladen, nur Unity wird neu geladen, aber es verwaltet viele verschiedene Aspekte der Anzeige, sodass jedes angezeigte Element aktualisiert wird und keine Anwendung tatsächlich neu geladen wird.
Vaab

Antworten:

8

Am elegantesten ist es, das Symbol neu zu starten. um das Symbol von seiner Position im Launcher zu entfernen und es an derselben Position zu ersetzen. Das folgende Skript erledigt den Job. Es befindet sich in Python2, da 12.04 standardmäßig nicht mit Python3 geliefert wird. Es kann jedoch auch in Python3 verwendet werden. Ändern Sie den Shebang nur in diesem Fall. Das Skript kann auch nützlich sein (auch in späteren Ubuntu-Versionen), um beispielsweise sofort ein geändertes Symbol anzuwenden.

Sie können es einfach verwenden, indem Sie das Skript mit der bearbeiteten Desktop-Datei als Argument aufrufen (siehe weiter unten).

Hinweis : Wenn in 12.04 ein aktualisiertes Symbol eine laufende Anwendung darstellt, stürzt die betreffende Anwendung ab, wie in dieser Frage beschrieben . Wenn Sie sie verwenden, stellen Sie sicher, dass die Anwendung nicht ausgeführt wird. In 14.04 wird das Symbol bei einer laufenden Anwendung einfach nicht aktualisiert.

Das Skript

#!/usr/bin/env python

import subprocess
import time
import sys

desktopfile = sys.argv[-1]

def read_currentlauncher():
    # reads the current launcher contents
    get_launcheritems = subprocess.Popen([
        "gsettings", "get", "com.canonical.Unity.Launcher", "favorites"
        ], stdout=subprocess.PIPE)
    return get_launcheritems.communicate()[0].decode("utf-8")

def set_launcher(llist):
    # sets a defined unity launcher list
    current_launcher = str(llist).replace(", ", ",")
    subprocess.Popen([
        "gsettings", "set", "com.canonical.Unity.Launcher", "favorites",
        current_launcher,
        ])

def refresh_icon(desktopfile):
    current_launcher = read_currentlauncher()
    current_launcher_temp = eval(current_launcher)
    item = [item for item in current_launcher_temp if desktopfile in item][0]
    index = current_launcher_temp.index(item)
    current_launcher_temp.pop(index)
    set_launcher(current_launcher_temp)
    time.sleep(2)
    set_launcher(current_launcher)

refresh_icon(desktopfile)

Wie man es benutzt

  • Kopieren Sie das obige Skript in eine leere Datei und sichern Sie es als refresh.py
  • Machen Sie es aus praktischen Gründen ausführbar
  • Aktualisieren Sie das Symbol mit dem folgenden Befehl:

    /path/to/script/refresh.py name_of_edited_desktopfile (e.g. 'firefox.desktop')
    

Wenn Sie es wirklich glatt machen wollen

  • Machen Sie das Skript ausführbar, entfernen Sie die .pyErweiterung und speichern Sie es in ~/bin. Nach dem Abmelden / Anmelden können Sie es mit dem folgenden Befehl ausführen:

    refresh firefox.desktop (as an example)
    
Jacob Vlijm
quelle
Für ultimative Glätte: pythonhosted.org/watchdog
EoghanM