Как остановить значки разделов в лаунчере Unity?

8

Новая проблема Ubuntu 16.04 / 16.10. Теперь, когда я запускаю gparted, появляются новые значки разделов диска, прямо над значком корзины в панели запуска Unity. Я должен "разблокировать от запуска", чтобы избавиться от них.

В старых публикациях для более старых версий Ubuntu предлагаются различные исправления, которые больше не применяются в 16.04 / 16.10. Есть идеи как навсегда избавиться от этих надоедливых икон?

Вот скриншот, который показывает 3 иконки, прямо над значком корзины:

введите описание изображения здесь

heynnema
источник
Пожалуйста, добавьте скриншот
You'reAGitForNotUsingGit
Снимок экрана не позволит мне сделать снимок трех значков разделов диска, которые добавляются всякий раз, когда я запускаю gparted, потому что программа запуска не будет прокручиваться до конца списка программ запуска, когда активен снимок экрана. PS: Если бы я мог получить скриншот, как я могу добавить его в будущем?
Хейннема
Когда вы редактируете свое сообщение, в верхней панели появляется маленький значок изображения. Если вы щелкнете по нему, он позволит вам вставить изображение.
YouAGitForNotUsingGit
Кроме того, если вы сообщаете скриншоту, что нужно сделать полную привязку окна с задержкой, это должно сработать :)
You'reAGitForNotUsingGit

Ответы:

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. Если все работает нормально, добавьте в Startup Applications: Dash> Startup Applications> Add. Добавьте команду:

    python3 /path/to/remember_blacklist.py
    

Запись

  1. Чтение из gsettings(практически всего, что делает скрипт) чрезвычайно легкое и не добавит заметной нагрузки на вашу систему
  2. Если (и пока) устройство открыто в каком-либо nautilusокне, оно все равно будет отображаться в панели запуска. Однако значок не будет привязан к программе запуска и исчезнет.
Якоб Влейм
источник
Спасибо за вашу помощь! Я проверю это в ближайшее время. Тогда я вернусь и проголосую / приму.
Хейннема
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 Да, это то, что вы должны получить, нажав Ctrl -c. Это означает, что цикл был остановлен Ctrl c. Иначе петля была бы неостановимой.
Джейкоб Влейм
1
Что произойдет ... и я полагаю, что если бы это было Startup Applications... никогда не случится так, что control-c (или kill?) Прервет запись в .blacklist_data и испортит его?
Хейннема
Ноно, вот когда ты запускаешь его из терминала :)
Джейкоб Влейм