Jak zatrzymać ikony partycji w programie uruchamiającym Unity?

8

Nowy problem Ubuntu 16.04 / 16.10. Teraz, za każdym razem, gdy uruchamiam gparted, nowe ikony partycji dysku pojawiają się tuż nad ikoną kosza w programie uruchamiającym Unity. Muszę „odblokować z launchera”, aby się ich pozbyć.

Starsze posty dla starszych wersji Ubuntu proponują różne poprawki, które nie mają już zastosowania w 16.04 / 16.10. Jakieś pomysły na to, jak na stałe pozbyć się tych nieznośnych ikon?

Oto zrzut ekranu pokazujący 3 ikony tuż nad ikoną kosza:

wprowadź opis zdjęcia tutaj

heynnema
źródło
Dodaj zrzut ekranu
You'reAGitForNotUsingGit,
Zrzut ekranu nie pozwala mi zrobić zdjęcia 3 ikon partycji dyskowych, które są dodawane za każdym razem, gdy uruchamiam gparted, ponieważ program uruchamiający nie przewinie do dołu listy programów uruchamiających, gdy zrzut ekranu jest aktywny. ps: Jeśli mogę dostać zrzut ekranu, jak mogę go dodać w przyszłości?
heynnema,
Podczas edytowania postu na górnym pasku znajduje się mała ikona obrazu. Kliknięcie go pozwala osadzić obraz.
You'reAGitForNotUsingGit
Ponadto, jeśli powiesz
zrzutowi

Odpowiedzi:

6

Powód

Usunięcie urządzeń z programu uruchamiającego spowoduje umieszczenie urządzenia na czarnej liście w gsettingsklawiszu ( )

com.canonical.Unity.Devices blacklist

Jeśli jednak urządzenie zostanie usunięte (w jakikolwiek sposób odłączone), zostanie również usunięte z czarnej listy. Przy następnym podłączeniu urządzenia historia zaczyna się od nowa.

Rozwiązanie

Poniższe rozwiązanie będzie przechowywać urządzenia z czarnej listy w pliku. Po ich jednorazowym usunięciu urządzenie nigdy nie pojawi się ponownie w programie uruchamiającym. Jeśli odłączysz urządzenie, skrypt natychmiast (ponownie) doda urządzenie jako znajdujące się na czarnej liście.

#!/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)])

Jak używać

  1. Skopiuj skrypt do pustego pliku
  2. Zapisz to jako remember_blacklist.py
  3. Przetestuj - uruchom komendę:

    python3 /path/to/remember_blacklist.py
    
  4. Jeśli wszystko działa poprawnie, dodaj do Startup Applications: Dash> Startup Applications> Add. Dodaj polecenie:

    python3 /path/to/remember_blacklist.py
    

Uwaga

  1. Czytanie z gsettings(praktycznie wszystkiego, co robi skrypt) jest wyjątkowo lekkie i nie spowoduje żadnego zauważalnego obciążenia dla twojego systemu
  2. Jeśli (i tak długo) urządzenie zostanie otwarte w dowolnym nautilusoknie, nadal będzie się wyświetlać w programie uruchamiającym. Ikona nie zostanie jednak zablokowana na programie uruchamiającym i zniknie.
Jacob Vlijm
źródło
Dzięki za pomoc! Przetestuję to wkrótce. Potem wrócę i zagłosuję / zaakceptuję.
heynnema,
1
Wydaje się działać! Kiedy go testowałem, zrobiłem Ctrl, aby go zatrzymać, i dostałem to ... $ python3 ~/bin/remember_blacklist.py ^CTraceback (most recent call last): File "/home/alheynneman/bin/remember_blacklist.py", line 23, in <module> time.sleep(2) KeyboardInterruptJak trudno byłoby dodać „przerywającą” procedurę obsługi, która prowadzi do czystego wyjścia?
heynnema,
@ heynnema tak, to powinieneś dostać, naciskając Ctrl-c. Oznacza to, że pętla została zatrzymana przez Ctrl c. W przeciwnym razie pętla byłaby nie do zatrzymania.
Jacob Vlijm,
1
Co by się stało ... i przypuszczam, że nigdy by się tak nie stało, gdyby Startup Applicationskontrola ... (lub zabicie?) Przerwałaby zapisywanie na .blacklist_data i spowodowała jego uszkodzenie?
heynnema,
Nie, wtedy uruchamiasz go z terminala :)
Jacob Vlijm,