Ubuntu 12.04 でランチャー アイコン アプリケーション メニューを更新するにはどうすればよいですか?

Ubuntu 12.04 でランチャー アイコン アプリケーション メニューを更新するにはどうすればよいですか?

でデスクトップ ファイルを変更した後/usr/share/applications、変更内容が表示されるようにランチャー アイコンのアプリケーション メニューを更新する必要があります。わかりやすくするために、変更する必要があるメニューは、ポインターがランチャーのアイコン (画面の左側にあるアイコンがいっぱいの大きなバー) 上にあるときに右クリックすると表示されるメニューです。

最善の答えは、単純なコマンドラインです。

私はubuntu-2dを使用していないので、ログアウト/ログインしたくありません。

私はいくつかの部分的な解決策を知っています:

  • unity --replaceすべてを再読み込みします(ウィンドウの装飾、通知領域など)
  • killall ubuntu-2d-launcherubuntu-2d のみですが、unity 用の同様の 1 行コマンドが存在する場合は、それが良い解決策になります。
  • ログアウトしてから再度ログインする方法もありますが、メニューを更新するためだけにすべてのセッションを失うわけにはいきません。
  • Ubuntu 14.04 ではこの問題は発生しません。「*.desktop」ファイルに加えられた変更は、すべてライブで再現されるようです。

何か提案はありますか? ccsm のおかげで方法はありますか?

答え1

最もエレガントな方法は、アイコンを「再起動」することです。つまり、ランチャー内の位置からアイコンを削除し、同じ位置に置き換えます。以下のスクリプトでこの作業を実行できます。12.04 にはデフォルトで python3 が付属していないため、これは python2 で実行します。ただし、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)
    

関連情報