如何刷新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 '16

@PhatHV:抱歉,它不重新加载任何应用程序,仅重新加载了unity,但是它管理显示的许多不同方面,因此将刷新每个显示的元素,而不是实际上重新加载任何应用程序。
vaab

Answers:


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 '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.