Nachdem ich eine Desktop-Datei geändert habe /usr/share/applications
, muss ich das Anwendungsmenü des Launcher-Symbols aktualisieren, damit meine Änderung angezeigt wird. Der Übersichtlichkeit halber sei erwähnt, dass das Menü, das geändert werden soll, dasjenige ist, das bei einem Rechtsklick angezeigt wird, wenn sich der Zeiger auf einem Symbol des Launchers 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 für Ubuntu 2D verfügbar, aber wenn es einen ähnlichen einzeiligen Befehl für Unity gibt, wäre das eine gute Lösung.- Ab- und anschließendes erneutes 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 ausgeführt zu werden.
Irgendwelche Vorschläge? Gibt es dank ccsm eine Möglichkeit?
Antwort1
Der eleganteste Weg ist, das Symbol „neu zu starten“, d. h. das Symbol von seiner Position im Launcher zu entfernen und an derselben Position zu ersetzen. Das folgende Skript erledigt diese Aufgabe. Es ist in Python2, da 12.04 nicht standardmäßig mit Python3 geliefert wird. Es kann jedoch auch in Python3 verwendet werden. Ändern Sie in diesem Fall einfach den Shebang. Das Skript kann auch nützlich sein (auch in späteren Ubuntu-Versionen), um beispielsweise ein geändertes Symbol sofort anzuwenden.
Sie können es einfach verwenden, indem Sie das Skript mit der bearbeiteten Desktop-Datei als Argument aufrufen (siehe weiter unten).
Notiz: In 12.04, wenn ein aktualisiertes Symbol einläuftAnwendung, stürzt die betreffende Anwendung ab, wie indiese Frage, wenn Sie es also 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 Drehbuch
#!/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 speichern Sie es unter
refresh.py
- Machen Sie es aus praktischen Gründen ausführbar
Aktualisieren Sie das Symbol mit dem 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
.py
Erweiterung und speichern Sie es unter~/bin
. Nach dem Abmelden/Anmelden können Sie es mit dem folgenden Befehl ausführen:refresh firefox.desktop (as an example)