web-dev-qa-db-fra.com

Comment actualiser le menu de l'application icône du lanceur dans Ubuntu 12.04?

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.
  • se déconnecter puis se reconnecter fonctionne également, mais je ne peux pas me permettre de perdre toute ma session simplement 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 ? Y a-t-il un moyen grâce au ccsm?

10
vaab

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

  • Copiez le script ci-dessus dans un fichier vide et protégez-le sous le nom 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 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)
    
8
Jacob Vlijm