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


10

Après avoir modifié un fichier de bureau dans /usr/share/applications, j'ai besoin de rafraîchir le menu d'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 se trouve sur une icône du 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 de fenêtre, 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?


Salut @vaab, j'ai un fichier dekstop et je change son icône en modifiant le chemin à l'intérieur du fichier .desktop. La solution acceptée était-elle ce que vous avez choisie? unity --replacetravaux? Cela ne me dérange pas le rechargement de tout.
Noitidart

unity --replaceTravaux confirmés dans Ubuntu 16.04 mais ne rechargeront pas les applications lourdes comme Chrome, Thunderbirds ...
PhatHV

@PhatHV: oh désolé, il ne recharge aucune application, seule l'unité est rechargée, mais elle gère de nombreux aspects différents de l'affichage afin que chaque élément affiché soit actualisé, aucune application ne se recharge en fait.
vaab

Réponses:


8

La manière la plus élégante est de "redémarrer" l'icône; pour supprimer l'icône de sa position dans le lanceur et la replacer sur la même position. Le script ci-dessous fait le travail. C'est en python2, car 12.04 n'est pas fourni avec python3 par défaut. Cependant, il peut également être utilisé en 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é comme 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 bloquera, 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 en cas d'application en cours.

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 comme 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 le rendre lisse

  • Rendez le script exécutable, supprimez l' .pyextension, enregistrez-le ~/bin. Après vous être déconnecté / connecté, vous pouvez l'exécuter avec la commande:

    refresh firefox.desktop (as an example)
    

Pour une fluidité ultime: pythonhosted.org/watchdog
EoghanM
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.