Nach dem Ändern einer Desktop-Datei in /usr/share/applications
, ich muss das Anwendungsmenü des Launcher-Symbols aktualisieren, damit meine Änderung angezeigt wird.
Aus Gründen der Übersichtlichkeit sollte das Menü, das geändert werden sollte, dasjenige sein, das mit einem Rechtsklick angezeigt wird, wenn sich der Mauszeiger auf einem Symbol von befindet den Launcher (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, Infobereich, …)killall ubuntu-2d-launcher
ist nur Ubuntu-2d, aber wenn ein ähnlicher einzeiliger Befehl für Unity existiert, wäre das eine gute Lösung.- Abmelden und 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 Änderungen, die an „*.desktop“-Dateien vorgenommen wurden, scheinen live nachgeahmt zu werden.
Irgendwelche Vorschläge ? Gibt es eine Möglichkeit dank ccsm ?
Akzeptierte Antwort:
Am elegantesten ist es, das Icon neu zu starten; , um das Symbol von seiner Position im Launcher zu entfernen und es an derselben Position zu ersetzen. Das folgende Skript erledigt die Aufgabe. 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 in diesem Fall nur den Shebang. Das Skript kann auch nützlich sein (auch auf späteren Ubuntu-Versionen), um beispielsweise ein geändertes Symbol sofort zu übernehmen.
Sie können es einfach verwenden, indem Sie das Skript aufrufen, mit der bearbeiteten Desktop-Datei als Argument (siehe weiter unten).
Hinweis :in 12.04, wenn ein aktualisiertes Symbol ein Laufen darstellt Anwendung, stürzt die betreffende Anwendung ab, wie in dieser Frage beschrieben. Wenn Sie sie 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 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)
Verwendung
- Kopieren Sie das obige Skript in eine leere Datei und speichern Sie es als
refresh.py
- Machen Sie es der Einfachheit halber 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, speichern Sie sie in~/bin
. Nach dem Abmelden/Anmelden können Sie es mit dem folgenden Befehl ausführen:refresh firefox.desktop (as an example)