应用程序总是显示在Ubuntu 16.04的第三个位置

在我将ubutu更新到16.04之后,我遇到了Unity启动器的问题。 每当我打开未在启动器中列出的应用程序时,它将采用第三个位置而不是最后一个位置。 有谁有同样的问题?

在此处输入图像描述

有一个名为“正在运行的应用程序”的特殊隐形启动器项目,它始终存在于您的启动器collections夹中,并确定未固定运行应用程序的图标出现在哪个位置。 在你的情况下,它显然不知何故到了一个奇怪的位置,但它很容易解决。

有两种方法,一种简单的方法,当然还有书呆子的命令行方式;-)


我希望它易于操作并记住!

最简单的方法是按正确的顺序拖放启动器图标。

因此,打开一个未固定到启动器的应用程序,例如屏幕截图中的“外观设置”。 它不能固定,否则这将无法工作。

然后,您不要拖动未固定的图标 ,因为这不会影响特殊“正在运行的应用”项目的位置,而只是将拖动的图标固定到新位置。
相反,将未固定的一个图标从右下方/右侧(适用于两个启动器方向)拖动到它的正上方/左侧。 这样,您可以将未固定的图标移动到底部/右侧而不触摸它。

当它到达您希望所有未固定的应用程序图标出现的位置时,您就完成了。 您现在可以关闭该窗口并再次打开它或新的窗口来测试它是否有效。


我今天感觉很讨厌,让我们通过终端破解它!

您的固定启动器项称为“collections夹”,并在用户配置文件中存储为dconf设置。 您可以通过打开终端并运行来查看collections列表

 gsettings get com.canonical.Unity.Launcher favorites 

这可能看起来像下面的示例(由我添加的输出格式):

 $ gsettings get com.canonical.Unity.Launcher favorites ['application://gnome-terminal.desktop', 'application://org.gnome.Nautilus.desktop', 'application://firefox.desktop', 'unity://running-apps', 'unity://desktop-icon', 'unity://devices'] 

此输出表示一个简约的启动器,只有一个终端,Nautilus和Firefox图标固定。 下一个项目是'unity://running-apps' ,它是重要的特殊项目,用作占位符,用于所有未固定运行的应用程序的图标。 之后会有更多特殊项目,即“显示桌面”图标和另一个占位符项,用于定义插入可移动设备的图标的显示位置。

我们唯一感兴趣的项目是“正在运行的应用”项目。 要解决您的问题,您必须将其移动到项目列表中的所需位置。

您可以通过键入命令来执行此操作

 gsettings set com.canonical.Unity.Launcher favorites [] 

但是,当然,您需要将修改后的列表作为最后一个参数传递,而不是空列表[]

例如,给定上述启动器,要使运行的应用程序图标显示在“显示桌面”下方但仍位于设备图标上方,请运行以下命令:

 $ gsettings set com.canonical.Unity.Launcher favorites "['application://gnome-terminal.desktop', 'application://org.gnome.Nautilus.desktop', 'application://firefox.desktop', 'unity://desktop-icon', 'unity://running-apps', 'unity://devices']" 

更改将立即生效,因此启动一些未固定的应用程序以validation您已将项目放在正确的位置并享受。

正如ByteCommander正确解释的那样, com.canonical.Unity.Launcher gsettings架构列表中的unity://running-apps位置确实会影响正在运行的应用程序的出现位置,因此他的答案很明显。 为了演示和测试这个,我编写了一个小脚本,其结果可以在下面的截图中看到。

注意脚本如何使用索引1和索引2调用,显示两个终端应用程序一起移动到启动器中的相应位置(即,运行不在当前列表中的应用程序被组合在一起)。 请注意,列表以索引0开头,它由铬图标适当地采用。

在此处输入图像描述 在此处输入图像描述

注意:如果您希望运行应用程序是最后一个,则使用-1作为参数就足够了。

脚本

 from gi.repository import Gio import sys def gsettings_get(schema, path, key): """Get value of gsettings schema""" if path is None: gsettings = Gio.Settings.new(schema) else: gsettings = Gio.Settings.new_with_path(schema, path) return gsettings.get_value(key) def gsettings_set(schema, path, key, value): """Set value of gsettings schema""" if path is None: gsettings = Gio.Settings.new(schema) else: gsettings = Gio.Settings.new_with_path(schema, path) if isinstance(value, list): return gsettings.set_strv(key, value) if isinstance(value, int): return gsettings.set_int(key, value) def main(): schema='com.canonical.Unity.Launcher' key='favorites' current_list = list(gsettings_get(schema,None,key)) running_index = current_list.index('unity://running-apps') position = int(sys.argv[1]) temp = current_list[position] current_list[position] = current_list[running_index] current_list[running_index] = temp gsettings_set(schema,None,key,current_list) if __name__ == '__main__': main()