应用更改或重新启动Unity Dash/启动器/...而无需重新启动或注销。

我遇到了这样的情况:在我删除了位于主目录中覆盖系统范围的自定义.desktop启动器文件之后,Unity应用程序镜头中不再可用该应用程序。 我的问题是,我需要应用这些更改并更新已安装的.desktop文件的数据库,但还有其他类似的情况可以想象。 那么,我可以做什么(以及下次如何处理),而不是重新启动或注销并重新登录以更新Unity配置并强制其重新加载和重新初始化所有内容? 我使用的是15.10版本,因此{{link1:unity --reset & 不起作用,因为它已被弃用。}}。 然后,我尝试了unity --replace &,但它导致我的桌面崩溃,并使TTY7无法使用。它首先闪烁暗淡,并且看起来正在重新启动Unity并恢复桌面,但随后不再对任何操作做出响应。切换到TTY1再切换回来后,屏幕变成黑屏加上鼠标光标。通过TTY1登录并使用reboot重启后,它又正常工作了,并且Unity现在甚至能够识别我的应用程序。 但是如果我处于无法重新启动或注销的情况下,我该怎么办呢?

1你可以尝试运行setsid unity命令,它会“刷新”Unity界面。在我的某个安装中,它确实能够实现这一效果,但在另一个安装中则会导致注销。其他人似乎说它会重置回默认设置,但在这两种情况下都没有发生。 - doug
2个回答

按下 Alt+F2 键,输入 unity,然后按下 Enter 键。

3简单而巧妙。我不知道为什么之前没有人想到这个。我不知道Unity有多少被重新启动,但肯定足够识别覆盖的.desktop文件。谢谢!几天后我会给你颁发奖励,等待进一步的回应。 - Byte Commander
1恭喜你的第一个赏金 @padlyuck!:D - Byte Commander
9我在16.04版本中进行了这个操作,结果把我的Windows系统搞糟了,一些应用程序也自动关闭了(例如浏览器)。 - Daniel
你能详细说明一下吗?它具体是做什么的? - George D
我在这里找到了解决方案:http://askubuntu.com/questions/495997/how-to-properly-restart-unity 。我不能确定这个命令的原理。但是,它解决了我的问题,并且没有任何副作用,所以我建议将其作为解决此问题的方法。 - padlyuck
1小心 - 我在14.04上做过这个,它关掉了X(和所有应用程序),我不得不重新登录。 - davidA

Unity只是一个Compiz插件,你可以使用以下命令重新加载它: compiz --replace 或者让你关闭终端: compiz --replace & disown 要确认一下,你可以检查: $ file `which unity` /usr/bin/unity: Python脚本,ASCII文本可执行文件 $ more /usr/bin/unity 另一种方法,只重新加载插件(非常快速): 1. 创建compiz_plugin_reloader脚本 源代码:iXce's blog: Compiz plugin reloader #!/usr/bin/env python '''Compiz插件重新加载器(通过compizconfig) 版权所有(c)2007 Guillaume Seguin 根据GNU GPLv2许可证授权''' import compizconfig from sys import argv, exit from time import sleep if __name__ == "__main__": if len (argv) < 2: print "Usage : %s plugin1 [plugin2 ... pluginN]" % argv[0] exit (2) plugins = argv[1:] context = compizconfig.Context (basic_metadata = True) print "正在卸载 " + " ".join (plugins) for plugin in plugins: if plugin not in context.Plugins: print "警告:未找到%s插件" % plugin plugins.remove (plugin) continue context.Plugins[plugin].Enabled = False if len (plugins) == 0: print "错误:未找到插件" exit (1) context.Write () print "等待设置更新" sleep (2) print "正在加载 " + " ".join (plugins) for plugin in plugins: context.Plugins[plugin].Enabled = True context.Write () 2. 修复权限 chmod +x compiz_plugin_reloader 3. 运行: ./compiz_plugin_reloader unityshell