Jak odświeżyć menu aplikacji ikony launcher w Ubuntu 12.04?

10

Po zmodyfikowaniu pliku pulpitu w /usr/share/applications , muszę odświeżyć menu aplikacji ikony uruchamiania, aby moja modyfikacja się ukazała. Ze względu na przejrzystość, menu, które powinno zostać zmodyfikowane, pojawia się po kliknięciu prawym przyciskiem myszy, gdy wskaźnik znajduje się na ikonie programu uruchamiającego (duży pasek pełen ikony po lewej stronie ekranu).

Najlepszą odpowiedzią będzie prosta linia poleceń.

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

Jestem świadomy częściowego rozwiązania:

  • unity --replace przeładowuje wszystko (dekoracja okna, obszar powiadomień, ...)
  • killall ubuntu-2d-launcher to 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 się do prac, ale nie mogę stracić całej mojej sesji tylko po to, aby zaktualizować menu.
  • na Ubuntu 14.04 Nie mam tego problemu: wszelkie zmiany wprowadzone w plikach "* .desktop" wydają się być reperowane na żywo.

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

    
zadawane vaab 21.07.2014, 11:20
źródło

1 odpowiedź

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 nie jest domyślnie dostarczany z python3. Jednak może on być również użyty w python3, w tym przypadku zmień tylko shebang. Skrypt może być również przydatny (także w późniejszych wersjach Ubuntu) do natychmiastowego zastosowania zmienionej ikony.

Możesz go po prostu użyć, wywołując skrypt, a edytowany plik pulpitu jest argumentem (zobacz poniżej).

Uwaga : w 12.04, jeśli odświeżona ikona reprezentuje aplikację działającą , aplikacja, której dotyczy problem, ulegnie awarii zgodnie z opisem w to pytanie , więc jeśli go używasz, upewnij się, że aplikacja nie działa. W 14.04 ikona nie będzie odświeżać się po uruchomieniu aplikacji.

Skrypt

#!/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 z niego korzystać

  • Skopiuj powyższy skrypt do pustego pliku i zabezpiecz go jako refresh.py
  • Ze względów praktycznych uczyń go wykonalnym
  • Odśwież ikonę za pomocą polecenia:

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

Jeśli naprawdę chcesz, aby było gładko

  • Spraw, aby skrypt był wykonywalny, usuń rozszerzenie .py , zapisz je w ~/bin . Po wylogowaniu możesz uruchomić go komendą:

    refresh firefox.desktop (as an example)
    
odpowiedział Jacob Vlijm 21.07.2014, 14:05
źródło

Przeczytaj inne pytania na temat tagów