¿Cómo actualizar el menú de la aplicación del icono del iniciador en ubuntu 12.04?

10

Después de modificar un archivo de escritorio /usr/share/applications, necesito actualizar el menú de la aplicación del ícono del iniciador para que aparezca mi modificación. En aras de la claridad, el menú que debe modificarse es el que aparece con un clic derecho cuando el puntero está en un ícono del iniciador (la gran barra llena de íconos en el lado izquierdo de la pantalla).

La mejor respuesta sería una simple línea de comando.

No estoy usando ubuntu-2d y no quiero cerrar sesión / iniciar sesión.

Soy consciente de alguna solución parcial:

  • unity --replace recarga todo (decoración de ventanas, área de notificación, ...)
  • killall ubuntu-2d-launcher es ubuntu-2d solamente, pero si existe un comando similar de una línea para la unidad, sería una buena solución.
  • cerrar sesión y luego volver a iniciar sesión también funciona, pero no puedo permitirme perder toda mi sesión solo para actualizar el menú.
  • en ubuntu 14.04 No tengo este problema: cualquier cambio realizado en los archivos "* .desktop" parece ser repercutido en vivo.

Alguna sugerencia ? ¿Hay alguna manera gracias a ccsm?

vaab
fuente
Hola @vaab, tengo un archivo dekstop y cambio el icono editando la ruta dentro del archivo .desktop. ¿Fue la solución aceptada con lo que fuiste? unity --replace¿trabajos? No me importa la recarga de todo.
Noitidart
Confirmado unity --replacefunciona en ubuntu 16.04 pero no volverá a cargar las aplicaciones pesadas como Chrome, Thunderbirds ...
PhatHV
@PhatHV: oh, lo siento, no vuelve a cargar ninguna aplicación, solo se vuelve a cargar la unidad, pero administra muchos aspectos diferentes de la pantalla, por lo que cada elemento que se muestra se actualizará, no se volverá a cargar ninguna aplicación.
vaab

Respuestas:

8

La forma más elegante es "reiniciar" el icono; para eliminar el icono de su posición en el iniciador y reemplazarlo en la misma posición. El siguiente script hace el trabajo. Está en python2, ya que 12.04 no viene con python3 por defecto. Sin embargo, también se puede usar en python3, solo cambia el shebang en ese caso. El script también puede ser útil (también en versiones posteriores de Ubuntu) para aplicar inmediatamente un icono modificado, por ejemplo.

Simplemente puede usarlo llamando al script, con el archivo de escritorio editado como argumento (ver más abajo).

Nota : en 12.04, si un icono actualizado representa una aplicación en ejecución , la aplicación en cuestión se bloqueará, como se describe en esta pregunta , por lo que si la usa, asegúrese de que la aplicación no se esté ejecutando. En 14.04, el icono simplemente no se actualizará en caso de que se ejecute una aplicación.

La secuencia de comandos

#!/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)

Cómo usarlo

  • Copie el script anterior en un archivo vacío y protéjalo como refresh.py
  • Por razones de conveniencia, hágalo ejecutable
  • Actualice el icono con el comando:

    /path/to/script/refresh.py name_of_edited_desktopfile (e.g. 'firefox.desktop')
    

Si realmente quieres que sea suave

  • Haga que el script sea ejecutable, elimine la .pyextensión y guárdelo ~/bin. Después de cerrar / cerrar sesión, puede ejecutarlo con el comando:

    refresh firefox.desktop (as an example)
    
Jacob Vlijm
fuente
Para una suavidad máxima: pythonhosted.org/watchdog
EoghanM