Como atualizar o menu do aplicativo ícone do lançador no Ubuntu 12.04?

10

Depois de modificar um arquivo da área de trabalho em /usr/share/applications , preciso atualizar o menu do aplicativo do ícone do iniciador para que minha modificação apareça. Por uma questão de clareza, o menu que deve ser modificado é aquele que aparece com um clique direito quando o ponteiro está em um ícone do lançador (a grande barra cheia de ícone no lado esquerdo da tela).

A melhor resposta seria uma linha de comando simples.

Eu 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 ubuntu-2d, mas se existir um comando de uma linha semelhante para a unidade, isso seria uma boa solução.
  • fazendo logout, em seguida, fazendo login novamente também, mas não posso perder a minha sessão apenas para atualizar o menu.
  • no ubuntu 14.04 Eu não tenho esse problema: qualquer alteração feita nos arquivos "* .desktop" parece ter repercussão ao vivo.

Alguma sugestão? Existe um caminho graças ao ccsm?

    
por vaab 21.07.2014 / 11:20

1 resposta

8

A maneira mais elegante é "reiniciar" o ícone; para remover o ícone de sua posição no lançador e substituí-lo na mesma posição. O script abaixo faz o trabalho. Está em python2, desde 12.04 não vem com python3 por padrão. No entanto, ele também pode ser usado em python3, apenas altere a shebang nesse caso. O script também pode ser útil (em versões posteriores do Ubuntu também) 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 um argumento (veja mais abaixo).

Observação : em 12.04, se um ícone atualizado representar um aplicativo em execução , o aplicativo em questão falhará, conforme descrito em esta pergunta , portanto, se você usá-lo, verifique se o aplicativo não está sendo executado. Em 14.04, o ícone simplesmente não será 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 usar

  • Copie o script acima em um arquivo vazio e proteja-o como refresh.py
  • Por 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 deseja suavizar

  • Torne o script executável, remova a extensão .py , salve em ~/bin . Após o log out / in, você pode executá-lo pelo comando:

    refresh firefox.desktop (as an example)
    
por Jacob Vlijm 21.07.2014 / 14:05