Як оновити меню програми значка запуску в ubuntu 12.04?


10

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

Найкращою відповіддю буде простий командний рядок.

Я не використовую ubuntu-2d і не хочу виходити з системи / входити в систему.

Мені відомо деяке часткове рішення:

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

Будь-які пропозиції ? Чи є спосіб завдяки ccsm?


Привіт @vaab, у мене є файл dekstop, і я змінюю його значок, редагуючи шлях до файлу .desktop. Чи було прийнятим рішенням те, з чим ви пішли? unity --replaceпрацює? Я не проти перезавантажувати все.
Noitidart

Підтверджено unity --replaceпрацює в ubuntu 16.04, але не перезавантажує важкі програми, такі як Chrome, Thunderbirds ...
PhatHV

@PhatHV: О, вибачте, він не перезавантажує жодну програму, завантажується лише єдність, але він керує багатьма різними аспектами дисплея, тому кожен відображений елемент буде оновлений, а жодна програма не перезавантажується фактично.
vaab

Відповіді:


8

Найелегантніший спосіб - «перезапустити» піктограму; щоб зняти піктограму зі свого положення на пусковій установці та замінити її на ту саму позицію. Сценарій, наведений нижче, виконує цю роботу. Він знаходиться в python2, оскільки 12.04 за замовчуванням не постачається з python3. Однак він може бути використаний і в python3, лише змінити шебанг у цьому випадку. Сценарій також може бути корисним (і на пізніших версіях 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.