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 --replace
recarga todo (decoración de ventanas, área de notificación, ...)killall ubuntu-2d-launcher
es 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 como
refresh.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
.py
extensió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)