Après avoir modifié un fichier de bureau dans /usr/share/applications
, je dois actualiser le menu de l'application Icône du lanceur afin que ma modification apparaisse. Par souci de clarté, le menu qui doit être modifié est celui qui apparaît avec un clic droit lorsque le pointeur se trouve sur une icône du lanceur (la grande barre pleine d’icône sur le côté gauche de l’écran).
La meilleure réponse serait une simple ligne de commande.
Je n'utilise pas Ubuntu-2d et je ne veux pas me déconnecter/me connecter.
Je suis au courant d'une solution partielle:
unity --replace
recharge tout (décoration de la fenêtre, zone de notification, ...)killall ubuntu-2d-launcher
est uniquement ubuntu-2d, mais si une commande similaire à une ligne existe pour l'unité, ce serait une bonne solution.Aucune suggestion ? Y a-t-il un moyen grâce au ccsm?
La manière la plus élégante est de "redémarrer" l'icône; pour retirer l’icône de sa position dans le lanceur et le replacer à la même position. Le script ci-dessous fait le travail. C'est en python2, puisque 12.04 ne vient pas avec python3 par défaut. Cependant, il peut également être utilisé dans python3, ne changez le Shebang que dans ce cas. Le script peut également être utile (sur les versions ultérieures d'Ubuntu également) pour appliquer immédiatement une icône modifiée, par exemple.
Vous pouvez simplement l'utiliser en appelant le script, avec le fichier de bureau modifié en tant qu'argument (voir ci-dessous).
Remarque : dans 12.04, si une icône actualisée représente une application en cours d'exécution , l'application en question se bloque. , comme décrit dans cette question , donc si vous l'utilisez, assurez-vous que l'application n'est pas en cours d'exécution. En 14.04, l’icône ne sera tout simplement pas actualisée si une application est en cours d’exécution.
Le script
#!/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)
Comment l'utiliser
refresh.py
Actualisez l'icône par la commande:
/path/to/script/refresh.py name_of_edited_desktopfile (e.g. 'firefox.desktop')
Si vous voulez vraiment que tout se passe bien
Rendez le script exécutable, supprimez l'extension .py
, enregistrez-le dans ~/bin
. Après vous être connecté/déconnecté, vous pouvez l'exécuter à l'aide de la commande suivante:
refresh firefox.desktop (as an example)