Como atualizar o menu do aplicativo do ícone do iniciador no Ubuntu 12.04?

Como atualizar o menu do aplicativo do ícone do iniciador no Ubuntu 12.04?

Depois de modificar um arquivo da área de trabalho /usr/share/applications, preciso atualizar o menu do aplicativo do ícone do iniciador para que minha modificação apareça. Para maior clareza, o menu que deve ser modificado é aquele que aparece ao clicar com o botão direito quando o ponteiro está sobre um ícone do launcher (a grande barra cheia de ícones no lado esquerdo da tela).

A melhor resposta seria uma linha de comando simples.

Não estou usando o ubuntu-2d e não quero fazer logout/login.

Estou ciente de alguma solução parcial:

  • unity --replacerecarrega tudo (decoração de janela, área de notificação, ...)
  • killall ubuntu-2d-launcheré apenas ubuntu-2d, mas se existir um comando de uma linha semelhante para a unidade, essa seria uma boa solução.
  • sair e fazer login novamente também funciona, mas não posso perder toda a minha sessão apenas para atualizar o menu.
  • no Ubuntu 14.04 não tenho esse problema: qualquer alteração feita nos arquivos "*.desktop" parece ser repercutida ao vivo.

Alguma sugestão ? Existe uma maneira graças ao ccsm?

Responder1

A forma mais elegante é “reiniciar” o ícone; para remover o ícone de sua posição no inicializador e recolocá-lo na mesma posição. O script abaixo faz o trabalho. Está em python2, já que 12.04 não vem com python3 por padrão. No entanto, ele também pode ser usado em python3, apenas altere o shebang nesse caso. O script também pode ser útil (também em versões posteriores do Ubuntu) para aplicar imediatamente um ícone alterado, por exemplo.

Você pode simplesmente usá-lo chamando o script, com o arquivo da área de trabalho editado como argumento (veja mais abaixo).

Observação: em 12.04, se um ícone atualizado representar umcorrendoaplicativo, o aplicativo em questão irá travar, conforme descrito emessa questão, portanto, se você usá-lo, certifique-se de que o aplicativo não esteja em execução. Na versão 14.04, o ícone simplesmente não será atualizado no caso de um aplicativo em execução.

O roteiro

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

Como usá-lo

  • Copie o script acima em um arquivo vazio e guarde-o comorefresh.py
  • Por razões de conveniência, torne-o executável
  • Atualize o ícone pelo comando:

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

Se você realmente quer deixar tudo mais suave

  • Torne o script executável, remova a .pyextensão e salve-o no formato ~/bin. Após efetuar logout/in, você pode executá-lo pelo comando:

    refresh firefox.desktop (as an example)
    

informação relacionada