it-swarm.com.de

Schließen Sie das Nautilus-Fenster automatisch, nachdem das Laufwerk entfernt wurde

Ich erinnere mich, dass bei Verwendung von 12.04 (und möglicherweise auch 14.04) das Fenster automatisch geschlossen wurde, wenn ich ein Laufwerk entfernte, das aktuell in einem Nautilus-Fenster geladen und geöffnet war.

Jetzt in 16.04 kehrt das geöffnete Fenster automatisch zum Medienverzeichnis zurück (/media/{username}) wenn ich ein offenes Laufwerk entferne. Gibt es eine Möglichkeit, diese Funktionalität wiederherzustellen?

6
Jake

Patch-Funktionalität

Soweit ich sehen kann, gibt es in den Einstellungen von Nautilus keine Optionen, um das Problem zu beheben. -nichts in den Einstellungen zu finden. Mit einem winzigen, extrem saftarmen Hintergrundskript können wir patch es jedoch. Die zusätzliche Prozessorlast beträgt nihil.

Das Drehbuch

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

def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

curruser = os.environ["USER"]
nautpid = get(["pgrep", "nautilus"])
connected1 = [l for l in get("lsblk").splitlines() if "media" in l]
wlist1 = [l.strip() for l in get(["wmctrl", "-lp"]).splitlines() if nautpid in l]

t = 0
while True:
    time.sleep(1.5)
    connected2 = [l for l in get("lsblk").splitlines() if "media" in l]
    time.sleep(0.5)
    while True:
        wlist = get(["wmctrl", "-lp"])
        if wlist:
            break
    wlist2 = [l.strip() for l in wlist.splitlines() if nautpid in l]
    removed = [l for l in connected1 if not l in connected2]
    if removed:
        close = [
            w for w in wlist2 if all([
                not w in wlist1,
                any([
                    w.endswith(" "+curruser),
                    w.endswith(" Home")]),
                ])
            ]
        for w in close:
            subprocess.Popen(["wmctrl", "-ic", w.split()[0]])
    connected1 = connected2
    wlist1 = wlist2
    # periodically (re)set nautpid to fix if nautilus crashed somehow
    t += 1
    if t == 20:
        nautpid = get(["pgrep", "nautilus"])
        t = 0

Wie benutzt man

  1. Das Skript muss wmctrl installiert sein

    Sudo apt-get install wmctrl
    
  2. Kopieren Sie das Skript in eine leere Datei und speichern Sie es als close_removed.py

  3. Führen Sie es mit dem Befehl aus

    python3 /path/to/close_removed.py
    

    schließen Sie ein oder mehrere Laufwerke an und entfernen Sie sie, nachdem sie automatisch bereitgestellt wurden. Ihr Fenster sollte sich schließen.

  4. Wenn alles funktioniert, fügen Sie es zu Startup Applications hinzu: Dash> Startup Applications> Add. Fügen Sie den Befehl hinzu:

    /bin/bash -c "sleep 15 && python3 /path/to/close_removed.py"
    

Erläuterung

  • Externe Laufwerke sind in /media/<username>/<drivename> Eingebunden.
  • Wenn eine Verbindung zu einem Laufwerk getrennt wird, wird das entsprechende Fenster von nautilus (zumindest auf meinem System) auf /media/<username> Zurückgesetzt. Das Fenster wird daher nach dem aktuellen Benutzer (neu) benannt.
  • Leider können wir nicht einfach alle nautilus Fenster schließen, die nach dem aktuellen Benutzer benannt sind, und es können mögliche Abweichungen auftreten. Es ist jedoch davon auszugehen, dass das Fenster das unmittelbar nach dem Trennen des Laufwerks in den aktuellen Benutzer umbenannt wurde das entfernte Laufwerk darstellt.

So funktioniert das Skript mit:

pgrep nautilus 

... beim Start des Skripts, um die PID von Nautilus zu erhalten

wmctrl -lp

... um die Fenster von Nautilus zu bekommen

lsblk

... um möglicherweise nicht angeschlossene Laufwerke im Auge zu behalten

wmctrl -ic <window_id>

... um die Zielfenster zu schließen

Hinweis

Das Skript hat einen Zyklus von zwei Sekunden, was bedeutet, dass das Laufwerk mindestens zwei Sekunden angeschlossen sein muss, damit es funktioniert.

8
Jacob Vlijm