Закройте окно Nautilus автоматически после того, как диск будет удален

Я помню, что при использовании 12.04 (и возможно также 14.04), что, если я удалил диск, который в настоящее время монтировался и открыт в окне Nautilus, окно закроется автоматически.

Теперь в 16,04, открытое окно автоматически возвращается назад к каталогу медиа (/media/{username}) если я удаляю открытый диск. Там какой-либо путь состоит в том, чтобы восстановить эту функциональность?

6
задан 28 December 2016 в 00:37

1 ответ

Функциональность патча

В Предпочтениях наутилуса нет никаких опций зафиксировать его, насколько я вижу; - ничто, чтобы быть найденным в Предпочтениях. С крошечным чрезвычайно-low-on-juice-фоновый сценарий мы можем исправить его как бы то ни было. Дополнительная нагрузка процессора является ничем.

Сценарий

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

Как использовать

  1. Потребности сценария wmctrl быть установленным

    sudo apt-get install wmctrl
    
  2. Скопируйте сценарий в пустой файл, сохраните его как close_removed.py

  3. Тестовый прогон это командой

    python3 /path/to/close_removed.py
    

    подключите один или несколько дисков, удалите их после того, как они были автоматически смонтированы. Их окно должно закрыться.

  4. Если все хорошо работает, добавьте его для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:

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

Объяснение

  • Внешние диски смонтированы в /media/<username>/<drivename>
  • Если диск разъединяется, соответствие nautilus окно возвращается к (по крайней мере, в моей системе) /media/<username>. Окно поэтому (ре), названное в честь текущего пользователя.
  • К сожалению, мы не можем просто закрыть все nautilus окна, названные в честь текущего пользователя, возможные несоответствия могли произойти. Однако безопасно предположить, что окно, которое было сразу переименовано текущему пользователю после диска, было разъединено, тот, который представил удаленный диск.

Именно так сценарий работает, с помощью:

pgrep nautilus 

... на запуске сценария, для получения pid наутилуса

wmctrl -lp

... получить окна наутилуса

lsblk

... следить возможно за разъединенными дисками

wmctrl -ic <window_id>

... закрывать целенаправленное окно

Примечание:

Сценарий имеет цикл двух секунд, который подразумевает, что диск должен быть присоединен по крайней мере две секунды для него для работы.

8
ответ дан 23 November 2019 в 07:37

Другие вопросы по тегам:

Похожие вопросы: