Dopo aver modificato un file desktop in /usr/share/applications
, ho bisogno di aggiornare il menu dell'applicazione dell'icona di avvio in modo che la mia modifica venga visualizzata.
Per motivi di chiarezza, il menu che dovrebbe essere modificato è quello che appare con un clic destro quando il puntatore si trova su un'icona di il launcher (la grande barra piena di icone sul lato sinistro dello schermo).
La migliore risposta sarebbe una semplice riga di comando.
Non sto usando Ubuntu-2d e non voglio effettuare il logout/login.
Sono a conoscenza di una soluzione parziale:
unity --replace
ricarica tutto (decorazione finestra, area notifiche, …)killall ubuntu-2d-launcher
è solo ubuntu-2d, ma se esiste un comando simile a una riga per l'unità, sarebbe una buona soluzione.- Anche il logout e il successivo accesso funzionano, ma non posso permettermi di perdere tutta la mia sessione solo per aggiornare il menu.
- su Ubuntu 14.04 non ho questo problema:tutte le modifiche apportate ai file "*.desktop" sembrano essere ripetute dal vivo.
Eventuali suggerimenti ? C'è un modo grazie a ccsm?
Risposta accettata:
Il modo più elegante è “riavviare” l'icona; per rimuovere l'icona dalla sua posizione nel programma di avvio e riposizionarla nella stessa posizione. Lo script seguente fa il lavoro. È in python2, poiché 12.04 non viene fornito con python3 per impostazione predefinita. Tuttavia, può essere utilizzato anche in python3, cambia solo lo shebang in quel caso. Lo script può anche essere utile (anche su versioni successive di Ubuntu) per applicare immediatamente un'icona modificata, ad esempio.
Puoi semplicemente usarlo chiamando lo script, con il file desktop modificato come argomento (vedi più avanti).
Nota :in 12.04, se un'icona aggiornata rappresenta un in esecuzione applicazione, l'applicazione in questione si arresterà in modo anomalo, come descritto in questa domanda, quindi se la usi, assicurati che l'applicazione non sia in esecuzione. In 14.04, l'icona semplicemente non si aggiornerà in caso di applicazione in esecuzione.
Il copione
#!/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)
Come usarlo
- Copia lo script sopra in un file vuoto e salvalo come
refresh.py
- Per motivi di comodità, rendilo eseguibile
-
Aggiorna l'icona con il comando:
/path/to/script/refresh.py name_of_edited_desktopfile (e.g. 'firefox.desktop')
Se vuoi davvero renderlo fluido
-
Rendi eseguibile lo script, rimuovi il
.py
estensione, salvala in~/bin
. Dopo il logout/in, puoi eseguirlo con il comando:refresh firefox.desktop (as an example)