如何在Unity启动器中停止分区图标?


8

新问题。Ubuntu 16.04 / 16.10。现在,每当我启动gparted时,新的磁盘分区图标就会出现在Unity启动器中的垃圾箱图标上方。我必须“从启动器中解锁”才能摆脱它们。

旧版Ubuntu的旧帖子提出了各种修复程序,这些修复程序在16.04 / 16.10中不再适用。关于如何永久摆脱这些讨厌图标的任何想法?

这是显示3个图标的屏幕截图,位于垃圾桶图标的正上方:

在此处输入图片说明


请添加屏幕快照
You'reAGitForNotUsingGit

屏幕快照不会让我捕捉每当我运行gparted时都会添加的3个磁盘分区图标,因为在屏幕快照处于活动状态时启动器不会滚动到启动器列表的底部。ps:如果可以获取屏幕截图,以后如何添加?
heynnema

编辑帖子时,在顶部栏中,有一个小图像图标。如果单击它,则可以嵌入图像。
YouAGitForNotUsingGit

另外,如果您告诉屏幕快照延迟执行全屏快照,它应该可以工作:)
YoureAGitForNotUsingGit

Answers:


6

原因

从启动器中删除设备将在(gsettings)键中将该设备列入黑名单

com.canonical.Unity.Devices blacklist

但是,如果设备被删除(以任何方式断开连接),该设备也将从黑名单中删除。下次连接设备时,故事会重新开始。

解决方案

以下解决方案会将列入黑名单的设备存储在文件中。删除一次后,设备将永远不会再次显示在启动器中。如果断开设备连接,脚本将立即(重新)将该设备添加为黑名单。

#!/usr/bin/env python3
import subprocess
import time
import os

key = "com.canonical.Unity.Devices"
bl_file = os.environ["HOME"]+"/.blacklist_data"

while True:
    time.sleep(2)

    current = subprocess.check_output([
        "gsettings", "get", key, "blacklist",
        ]).decode("utf-8")
    if "@as" in current:
        current = []
    else:
        current = eval(current)        
    try:
        r = open(bl_file).read()
        r = [] if r == '' else r.splitlines()           
    except FileNotFoundError:
        r = []
    if current != r:
        newlist = list(set([d for d in current+r if not d == '']))
        open(bl_file, "wt").write("\n".join(newlist))
        subprocess.Popen(["gsettings", "set", key, "blacklist", str(newlist)])

如何使用

  1. 将脚本复制到一个空文件
  2. 另存为 remember_blacklist.py
  3. 通过以下命令对其进行测试:

    python3 /path/to/remember_blacklist.py
    
  4. 如果一切正常,请添加到启动应用程序:Dash>启动应用程序>添加。添加命令:

    python3 /path/to/remember_blacklist.py
    

注意

  1. 读取gsettings(实际上是脚本的全部操作)非常轻巧,不会给您的系统增加任何明显的负担
  2. 如果(并一直)在任何nautilus窗口中打开设备,它仍将显示在启动器中。但是,该图标不会锁定到启动器,并且会消失。

谢谢你的帮助!我会尽快对其进行测试。然后我会回来投票/接受。
heynnema '16

1
似乎可以工作!当我对其进行测试时,我做了一个control-c来停止它,然后得到了…… $ python3 ~/bin/remember_blacklist.py ^CTraceback (most recent call last): File "/home/alheynneman/bin/remember_blacklist.py", line 23, in <module> time.sleep(2) KeyboardInterrupt添加一个“中断”处理程序进入一个干净的出口有多困难?
heynnema '16

@heynnema是的,这就是按Ctrl -c时应该得到的。这意味着循环已被Ctrl c停止。否则,循环将无法停止。
雅各布·弗利姆

1
会发生什么...我想如果它在Startup Applications...中,则永远不会出现-Control-c(或杀死)会中断对.blacklist_data的写入并破坏它?
heynnema '16

Nono,那是从终端运行它的时候:)
Jacob Vlijm '16
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.