Как обновить меню приложения иконки запуска в Ubuntu 12.04?

10

После внесения изменений в файл рабочего стола /usr/share/applicationsмне нужно обновить меню приложения значка запуска, чтобы мои изменения были показаны. Для ясности, меню, которое должно быть изменено, - это меню, которое появляется при щелчке правой кнопкой мыши, когда указатель находится на значке средства запуска (большая панель, полная значков в левой части экрана).

Лучшим ответом будет простая командная строка.

Я не использую ubuntu-2d и не хочу выходить из системы / входить в систему.

Я знаю о каком-то частичном решении:

  • unity --replace перезагружает все (оформление окон, область уведомлений, ...)
  • killall ubuntu-2d-launcher только ubuntu-2d, но если для единства существует аналогичная однострочная команда, это было бы хорошим решением.
  • Выход из системы и повторный вход также работает, но я не могу позволить себе потерять всю сессию только для обновления меню.
  • в Ubuntu 14.04 у меня нет этой проблемы: любые изменения, внесенные в файлы "* .desktop", кажется, исправлены в реальном времени.

Какие-либо предложения ? Есть ли способ благодаря ccsm?

vaab
источник
Привет @vaab, у меня есть файл dekstop, и я меняю его иконку, редактируя путь в файле .desktop. Было ли принято решение, с которым вы пошли? unity --replaceработает? Я не против перезагрузки всего.
Noitidart
Подтверждено, что unity --replaceработает в Ubuntu 16.04, но не будет перезагружать тяжелые приложения, такие как Chrome, Thunderbirds ...
PhatHV 10.10.16
@PhatHV: извините, оно не перезагружает никакое приложение, перезагружается только единица, но оно управляет многими различными аспектами отображения, поэтому каждый отображаемый элемент будет обновляться, а не любое приложение фактически перезагружается.
Вааб

Ответы:

8

Самый элегантный способ - «перезагрузить» иконку; убрать иконку с ее позиции в лаунчере и заменить ее на ту же позицию. Сценарий ниже делает эту работу. Это в python2, так как 12.04 не поставляется с python3 по умолчанию. Тем не менее, он может быть использован и в python3, только в этом случае измените shebang. Сценарий также может быть полезен (в более поздних версиях Ubuntu), например, для немедленного применения измененного значка.

Вы можете просто использовать его, вызвав скрипт с отредактированным файлом рабочего стола в качестве аргумента (см. Далее ниже).

Примечание : в 12.04, если обновленный значок представляет работающее приложение, рассматриваемое приложение будет аварийно завершать работу, как описано в этом вопросе , поэтому, если вы используете его, убедитесь, что приложение не запущено. В 14.04 значок просто не будет обновляться в случае запущенного приложения.

Сценарий

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

Как это использовать

  • Скопируйте приведенный выше скрипт в пустой файл и сохраните его как refresh.py
  • Из соображений удобства сделайте его исполняемым
  • Обновите иконку командой:

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

Если вы действительно хотите сделать это гладко

  • Сделайте скрипт исполняемым, удалите .pyрасширение, сохраните его в ~/bin. После выхода из системы вы можете запустить ее командой:

    refresh firefox.desktop (as an example)
    
Якоб Влейм
источник
Для максимальной плавности: pythonhosted.org/watchdog
EoghanM