Je me souviens qu'en utilisant 12.04 (et peut-être aussi 14.04), si je retirais un lecteur actuellement monté et ouvert dans une fenêtre Nautilus, cette fenêtre se fermerait automatiquement.
Désormais, en 16.04, la fenêtre ouverte revient automatiquement au répertoire de support (/media/{username}
) si je supprime un lecteur ouvert. Est-il possible de restaurer cette fonctionnalité?
Dans les préférences de Nautilus, il n'y a pas d'option pour le réparer, autant que je sache. -on ne peut en trouver dans les préférences. Avec un minuscule script extrêmement lent, nous pouvons patch le faire. Le fardeau supplémentaire du processeur est le nihil.
#!/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
Le script doit installer wmctrl
Sudo apt-get install wmctrl
Copiez le script dans un fichier vide, enregistrez-le sous le nom close_removed.py
Testez-le par la commande
python3 /path/to/close_removed.py
connectez un ou plusieurs lecteurs, supprimez-les après leur montage automatique. Leur fenêtre devrait se fermer.
Si tout fonctionne correctement, ajoutez-le à Applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
/bin/bash -c "sleep 15 && python3 /path/to/close_removed.py"
/media/<username>/<drivename>
nautilus
correspondante revient à (du moins sur mon système) /media/<username>
. La fenêtre est donc nommée d'après l'utilisateur actuel.nautilus
, nommées d'après l'utilisateur actuel, des incompatibilités possibles peuvent se produire. Il est toutefois prudent de supposer que la fenêtre qui était immédiatement renommée en utilisateur actuel après la déconnexion du lecteur est celle qui représente le lecteur supprimé.Voici comment fonctionne le script en utilisant:
pgrep nautilus
... au démarrage du script, pour obtenir le pid de nautile
wmctrl -lp
... pour obtenir les fenêtres de nautile
lsblk
... pour garder un oeil sur les lecteurs éventuellement déconnectés
wmctrl -ic <window_id>
... pour fermer la ou les fenêtres ciblées
Le script a un cycle de deux secondes, ce qui implique que le lecteur doit être connecté au moins deux secondes pour fonctionner.