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

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

Después de modificar un archivo de escritorio en /usr/share/applications, necesito actualizar el menú de la aplicación del icono del iniciador para que aparezca mi modificación. Para mayor claridad, el menú que se debe modificar es el que aparece al hacer clic derecho cuando el puntero está sobre un ícono del iniciador (la barra grande 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 --replacerecarga todo (decoración de ventanas, área de notificación, ...)
  • killall ubuntu-2d-launcheres solo ubuntu-2d, pero si existe un comando de una línea similar para unity, sería una buena solución.
  • Cerrar sesión y volver a iniciarla 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 repercutir en vivo.

Alguna sugerencia ? ¿Hay alguna manera gracias a ccsm?

Respuesta1

La forma más elegante es "reiniciar" el icono; para eliminar el ícono de su posición en el lanzador 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 cambie 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.

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

Nota: en 12.04, si un icono actualizado representa uncorreraplicación, la aplicación en cuestión se bloqueará, como se describe enesta pregunta, así que si lo usas, asegúrate de que la aplicación no se esté ejecutando. En 14.04, el ícono simplemente no se actualizará si hay una aplicación en ejecució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 guárdelo comorefresh.py
  • Por razones de conveniencia, hazlo ejecutable.
  • Actualiza el icono con el comando:

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

Si realmente quieres hacerlo suave

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

    refresh firefox.desktop (as an example)
    

información relacionada