如何在ubuntu 12.04中刷新启动器图标应用程序菜单?

/usr/share/applications修改桌面文件后,我需要刷新启动器图标应用程序菜单,以便显示我的修改。 为了清楚起见,应该修改的菜单是当指针位于启动器的图标上时右键单击的菜单(屏幕左侧充满图标的大栏)。

最佳答案是简单的命令行。

我没有使用ubuntu-2d,我不想退出/登录。

我知道一些部分解决方案:

  • unity --replace重新加载一切(窗口装饰,通知区域……)
  • killall ubuntu-2d-launcher只是ubuntu-2d,但是如果对于unity来说存在类似的单行命令,那将是一个很好的解决方案。
  • 退出然后重新登录也可以,但是我不能仅仅为了更新菜单而放弃我的所有会话。
  • 在ubuntu 14.04上我没有这个问题:对“* .desktop”文件所做的任何更改似乎都会被实时重现。

有什么建议 ? 有没有办法感谢ccsm?

最优雅的方式是“重启”图标; 从发射器中的位置移除图标并将其替换在相同位置。 下面的脚本完成了这项工作。 它在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 (eg 'firefox.desktop') 

如果你真的想让它顺利

  • 使脚本可执行,删除.py扩展名,将其保存在~/bin 。 注销后,您可以通过以下命令运行它:

     refresh firefox.desktop (as an example)