最もエレガントな方法は、アイコンを「再起動」することです。アイコンをランチャーの位置から削除し、同じ位置に置き換えます。以下のスクリプトがその仕事をします。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)
それを使用する方法
本当にスムーズにしたいなら
unity --replace
動作しますか?すべてのリロードを気にしません。