Jak odświeżyć menu aplikacji uruchamiającej ikonę w Ubuntu 12.04?

10

Po zmodyfikowaniu pliku pulpitu /usr/share/applicationsmuszę odświeżyć menu aplikacji ikony programu uruchamiającego, aby pojawiła się moja modyfikacja. Dla jasności menu, które należy zmodyfikować, to menu wyświetlane prawym przyciskiem myszy, gdy wskaźnik znajduje się na ikonie programu uruchamiającego (duży pasek pełen ikon po lewej stronie ekranu).

Najlepszą odpowiedzią byłaby prosta linia poleceń.

Nie używam ubuntu-2d i nie chcę się wylogowywać / logować.

Mam świadomość częściowego rozwiązania:

  • unity --replace przeładowuje wszystko (dekoracja okna, obszar powiadomień, ...)
  • killall ubuntu-2d-launcher jest tylko ubuntu-2d, ale jeśli podobne jednowierszowe polecenie istnieje dla jedności, byłoby to dobre rozwiązanie.
  • wylogowanie, a następnie ponowne zalogowanie działa również, ale nie mogę sobie pozwolić na utratę całej sesji tylko po to, aby zaktualizować menu.
  • na Ubuntu 14.04 Nie mam tego problemu: wszelkie zmiany wprowadzone w plikach „* .desktop” wydają się być ponownie obliczane na żywo.

Jakieś sugestie ? Czy istnieje sposób dzięki ccsm?

Vaab
źródło
Cześć @vaab, mam plik dekstop i zmieniam jego ikonę, edytując ścieżkę wewnątrz pliku .desktop. Czy zaakceptowałeś to rozwiązanie? unity --replacePracuje? Nie mam nic przeciwko przeładowaniu wszystkiego.
Noitidart
Potwierdzono, że unity --replacedziała w Ubuntu 16.04, ale nie przeładuje ciężkich aplikacji, takich jak Chrome, Thunderbirds ...
PhatHV 10.10.16
@PhatHV: och, przepraszam, nie przeładowuje żadnej aplikacji, przeładowywana jest tylko jedność, ale zarządza wieloma różnymi aspektami wyświetlania, więc każdy wyświetlany element zostanie odświeżony, żadna aplikacja nie zostanie przeładowana.
vaab,

Odpowiedzi:

8

Najbardziej eleganckim sposobem jest „ponowne uruchomienie” ikony; aby usunąć ikonę z jej pozycji w programie uruchamiającym i zastąpić ją w tej samej pozycji. Poniższy skrypt wykonuje zadanie. Jest w python2, ponieważ 12.04 domyślnie nie jest dostarczany z python3. Jednak można go również używać w python3, w takim przypadku zmień tylko shebang. Skrypt może być również przydatny (również w późniejszych wersjach Ubuntu) do natychmiastowego zastosowania na przykład zmienionej ikony.

Możesz go po prostu użyć, wywołując skrypt, z edytowanym plikiem pulpitu jako argumentem (patrz dalej poniżej).

Uwaga : jeśli w 12.04 odświeżona ikona reprezentuje działającą aplikację, aplikacja ulegnie awarii, zgodnie z opisem w tym pytaniu , więc jeśli go używasz, upewnij się, że aplikacja nie działa. W 14.04 ikona po prostu nie odświeży się w przypadku uruchomionej aplikacji.

Scenariusz

#!/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)

Jak tego użyć

  • Skopiuj powyższy skrypt do pustego pliku i zabezpiecz go jako refresh.py
  • Ze względów wygody uczyń go wykonywalnym
  • Odśwież ikonę poleceniem:

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

Jeśli naprawdę chcesz sprawić, by było gładkie

  • Ustaw skrypt jako wykonywalny, usuń .pyrozszerzenie i zapisz je ~/bin. Po wylogowaniu / zalogowaniu możesz uruchomić go za pomocą polecenia:

    refresh firefox.desktop (as an example)
    
Jacob Vlijm
źródło
Aby uzyskać najwyższą płynność: pythonhosted.org/watchdog
EoghanM