Po úpravě souboru plochy v /usr/share/applications
, potřebuji obnovit nabídku aplikace ikony spouštěče, aby se moje úprava zobrazila.
V zájmu srozumitelnosti je třeba upravit nabídku, která se zobrazí po kliknutí pravým tlačítkem, když je ukazatel na ikonu spouštěč (velký pruh plný ikon na levé straně obrazovky).
Nejlepší odpovědí by byl jednoduchý příkazový řádek.
Nepoužívám ubuntu-2d a nechci se odhlašovat/přihlašovat.
Jsem si vědom nějakého částečného řešení:
unity --replace
znovu načte vše (výzdobu oken, oznamovací oblast, …)killall ubuntu-2d-launcher
je pouze ubuntu-2d, ale pokud existuje podobný jednořádkový příkaz pro jednotu, bylo by to dobré řešení.- funguje také odhlášení a opětovné přihlášení, ale nemohu si dovolit ztratit celou relaci jen kvůli aktualizaci nabídky.
- na ubuntu 14.04 tento problém nemám:zdá se, že jakékoli změny provedené v souborech „*.desktop“ budou znovu provedeny.
Nějaké návrhy ? Existuje způsob díky ccsm?
Přijatá odpověď:
Nejelegantnějším způsobem je „restartovat“ ikonu; odstranit ikonu z její pozice ve spouštěči a vrátit ji na stejnou pozici. Skript níže to udělá. Je v python2, protože 12.04 standardně nepřichází s python3. Lze jej však použít i v pythonu3, pouze v takovém případě změňte shebang. Skript může být také užitečný (i v pozdějších verzích Ubuntu) například k okamžitému použití změněné ikony.
Můžete jej jednoduše použít zavoláním skriptu s upraveným souborem plochy jako argumentem (viz dále níže).
Poznámka :ve 12.04, pokud aktualizovaná ikona představuje běh aplikace, dotyčná aplikace spadne, jak je popsáno v této otázce, takže pokud ji používáte, ujistěte se, že aplikace není spuštěna. Ve 14.04 se ikona v případě spuštěné aplikace jednoduše neobnoví.
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)
Jak jej používat
- Zkopírujte výše uvedený skript do prázdného souboru a uložte jej jako
refresh.py
- Z důvodu pohodlí jej nastavte jako spustitelný
-
Obnovte ikonu příkazem:
/path/to/script/refresh.py name_of_edited_desktopfile (e.g. 'firefox.desktop')
Pokud opravdu chcete, aby to bylo hladké
-
Udělejte skript spustitelným, odstraňte
.py
rozšíření, uložte jej do~/bin
. Po odhlášení/přihlášení jej spustíte příkazem:refresh firefox.desktop (as an example)