.desktop
我遇到的情况是,在我删除了主目录中覆盖了系统范围启动器文件的自定义启动器文件后,我的应用程序在 Unity 应用程序镜头中不可用。
我的问题是我需要应用这些更改并在这种情况下更新已安装文件的数据库.desktop
,但其他类似的情况也是可以想象的。
那么我可以做什么(以及下次做什么)而不是重新启动或注销并重新登录来更新 Unity 配置并强制它重新加载和重新初始化所有内容?
我现在是 15.10,所以unity --reset &
不起作用,因为它已被弃用。
然后我尝试了unity --replace &
其他方法,但结果却导致桌面崩溃,TTY7 无法使用。它首先闪黑,看起来像是在重新启动 Unity 并恢复桌面,但之后它就不再对任何内容做出反应了。切换到 TTY1 并返回后,屏幕变黑,鼠标光标也变了。通过 TTY1 登录重新启动后reboot
,它又恢复了工作,Unity 甚至识别了我的应用程序。
但如果我处于无法重新启动或注销的情况,我该怎么办?
答案1
按Alt+F2输入unity
并按Enter。
答案2
Unity 只是一个 Compiz 插件,你可以使用以下命令重新加载它:
compiz --replace
或者让你关闭终端
compiz --replace & disown
为了确认,您可以检查:
$ file `which unity` /usr/bin/unity: Python script, ASCII text executable $ more /usr/bin/unity
另一种方法是,仅重新加载插件(很快)
创建
compiz_plugin_reloader
脚本#!/usr/bin/env python '''Compiz plugin reloader (through compizconfig) Copyright (c) 2007 Guillaume Seguin <[email protected]> Licensed under 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 "Unloading " + " ".join (plugins) for plugin in plugins: if plugin not in context.Plugins: print "Warning : %s plugin not found" % plugin plugins.remove (plugin) continue context.Plugins[plugin].Enabled = False if len (plugins) == 0: print "Error : no plugin found" exit (1) context.Write () print "Waiting for settings update" sleep (2) print "Loading " + " ".join (plugins) for plugin in plugins: context.Plugins[plugin].Enabled = True context.Write ()
修复权限
chmod +x compiz_plugin_reloader
运行身份:
./compiz_plugin_reloader unityshell