Como atualizar o menu de aplicativos do ícone do iniciador no ubuntu 12.04?

10

Após modificar um arquivo da área de trabalho /usr/share/applications, preciso atualizar o menu do aplicativo ícone do iniciador para que minha modificação apareça. Por uma questão de clareza, o menu que deve ser modificado é o que aparece com um clique direito quando o ponteiro está no ícone do iniciador (a barra grande e 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 --replace recarrega tudo (decoração de janelas, área de notificação, ...)
  • killall ubuntu-2d-launcher é apenas o ubuntu-2d, mas se existir um comando de uma linha semelhante para a unidade, essa seria uma boa solução.
  • sair e voltar a funcionar também funciona, mas não posso perder toda a minha sessão apenas para atualizar o menu.
  • no ubuntu 14.04 Eu não tenho esse problema: quaisquer alterações feitas nos arquivos "* .desktop" parecem ter repercutido ao vivo.

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

vaab
fonte
Oi @vaab, Eu tenho um arquivo dekstop e altero o ícone editando o caminho dentro do arquivo .desktop. A solução aceita foi com o que você foi? unity --replacetrabalho? Não me importo com a recarga de tudo.
Noitidart 02/02
Confirmado unity --replaceobras no ubuntu 16.04 , mas não irá recarregar as pesadas aplicações como Chrome, Thunderbirds ...
PhatHV
@PhatHV: desculpe, ele não recarrega nenhum aplicativo, apenas a unidade é recarregada, mas gerencia muitos aspectos diferentes da tela para que todos os elementos exibidos sejam atualizados, e nenhum aplicativo é recarregado.
vaab

Respostas:

8

A maneira mais elegante é "reiniciar" o ícone; para remover o ícone de sua posição no iniciador e substituí-lo na mesma posição. O script abaixo faz o trabalho. Está no python2, pois o 12.04 não vem com o python3 por padrão. No entanto, ele também pode ser usado em python3, alterando apenas o shebang nesse caso. O script também pode ser útil (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).

Nota : no 12.04, se um ícone atualizado representar um aplicativo em execução , o aplicativo em questão falhará, conforme descrito nesta pergunta ; portanto, se você o usar, verifique se o aplicativo não está em execução. Na 14.04, o ícone simplesmente não é atualizado no caso de um aplicativo em execução.

O script

#!/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 proteja-o como refresh.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 torná-lo suave

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

    refresh firefox.desktop (as an example)
    
Jacob Vlijm
fonte
Para a lisura final: pythonhosted.org/watchdog
EoghanM