Après avoir modifié un fichier de bureau dans /usr/share/applications
, je dois rafraîchir le menu de l'application de l'icône du lanceur pour 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 est sur une icône de le lanceur (la grande barre pleine d'icônes 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 connais une solution partielle :
unity --replace
recharge tout (décoration des fenêtres, zone de notification, …)killall ubuntu-2d-launcher
est ubuntu-2d uniquement, mais si une commande similaire sur une ligne existe pour l'unité, ce serait une bonne solution.- La déconnexion puis la reconnexion fonctionnent également, mais je ne peux pas me permettre de perdre toute ma session juste pour mettre à jour le menu.
- sur Ubuntu 14.04, je n'ai pas ce problème :toute modification apportée aux fichiers "*.desktop" semble être répercutée en direct.
Aucune suggestion ? Existe-t-il un moyen grâce à ccsm ?
Réponse acceptée :
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 la replacer à la même position. Le script ci-dessous fait le travail. C'est en python2, puisque 12.04 n'est pas livré avec python3 par défaut. Cependant, il peut également être utilisé dans python3, ne changez que le shebang 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é comme argument (voir ci-dessous).
Remarque :en 12.04, si une icône actualisée représente un élément en cours d'exécution application, l'application en question plantera, comme décrit dans cette question, donc si vous l'utilisez, assurez-vous que l'application n'est pas en cours d'exécution. Dans 14.04, l'icône ne sera tout simplement pas actualisée en cas d'exécution d'une application.
Le scénario
#!/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
- Copiez le script ci-dessus dans un fichier vide et sauvegardez-le sous
refresh.py
- Pour des raisons de commodité, rendez-le exécutable
-
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 ce soit fluide
-
Rendez le script exécutable, supprimez le
.py
extension, enregistrez-la dans~/bin
. Après vous être déconnecté/connecté, vous pouvez l'exécuter avec la commande :refresh firefox.desktop (as an example)