Después de modificar un archivo de escritorio en /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 al hacer clic con el botón derecho cuando el puntero está en un ícono de el iniciador (la gran barra llena de íconos en el lado izquierdo de la pantalla).
La mejor respuesta sería una línea de comando simple.
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 la ventana, área de notificación, …)killall ubuntu-2d-launcher
es solo ubuntu-2d, pero si existe un comando similar de una línea para Unity, sería una buena solución.- cerrar la sesión y luego 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 repetirse en vivo.
Alguna sugerencia ? ¿Hay alguna manera gracias a ccsm?
Respuesta aceptada:
La forma más elegante es “reiniciar” el ícono; 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.
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 un corriendo aplicación, la aplicación en cuestión se bloqueará, como se describe en esta pregunta, así 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 esté ejecutando una aplicación.
El guión
#!/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 conveniencia, hazlo ejecutable
-
Actualice 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 el
.py
extensión, guárdelo en~/bin
. Después de cerrar sesión/iniciar sesión, puede ejecutarlo con el comando:refresh firefox.desktop (as an example)