Открытие терминала по умолчанию, когда USB вставляется

По умолчанию, когда съемные носители вставлены, Ubuntu откроет Nautilus в каталоге монтирования. Я отключил эту опцию, но задавался вопросом, мог ли я настроить Gnome для открытия терминала в каталоге монтирования вместо этого.

Править: Я использую Ubuntu 15.10.

2
задан 5 November 2015 в 06:31

1 ответ

Отредактированная версия этого сценария делает задание. Когда (любое) USB-устройство подключается, a gnome-terminal открыт в его (корневом) каталоге.

В примере, когда 14.04 usb запуститесь флеш-накопитель подключен:

enter image description here

Сценарий

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

def get_mountedlist():
    return [(item.split()[0].replace("├─", "").replace("└─", ""),
             item[item.find("/"):]) for item in subprocess.check_output(
            ["lsblk"]).decode("utf-8").split("\n") if "/" in item]

def identify(disk):
    command = "find /dev/disk -ls | grep /"+disk
    output = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
    if "usb" in output:
        return True
    else:
        return False

done = []
while True:
    mounted = get_mountedlist()
    new_paths = [dev for dev in mounted if not dev in done and not dev[1] == "/"]
    valid = [dev for dev in new_paths if identify(dev[0]) == True]
    for item in valid:
        os.chdir(item[1])
        subprocess.Popen(["gnome-terminal"])
    done = mounted
    time.sleep(4)

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

  • Скопируйте сценарий в пустой файл, сохраните его как open_usb.py
  • Тестовый прогон сценарий. с командой:

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

    python3 /path/to/open_usb.py
    

Примечания

  • Я протестировал его на Единице (14.04), но маловероятно, что это повредилось бы на любой версии Ubuntu, пока это имеет конфигурацию по умолчанию (включая python3)
  • Сценарий только осуществляет очень простую и легкую проверку каждые четыре секунды. В моих тестах я не мог определить дополнительную загрузку процессора.



Править

Как упомянуто в комментарии, хотя сценарий работает, как он должен, одна проблема происходит, когда Вы безопасно удаляете usb устройство: предупреждение состоит в том, учитывая, что объем "занят" сценарием.

Причина состоит в том что сценарий cd - s в каталог объема, прежде, чем открыть терминал в корневом каталоге объема.

Решение

Решение довольно просто; заставьте сценарий оставить каталог, снова открыв терминал в usb корневой каталог устройства. В версии ниже, устраняется проблема:

#!/usr/bin/env python3
import os
import subprocess
import time
home = os.environ["HOME"]

def get_mountedlist():
    return [(item.split()[0].replace("├─", "").replace("└─", ""),
             item[item.find("/"):]) for item in subprocess.check_output(
            ["lsblk"]).decode("utf-8").split("\n") if "/" in item]

def identify(disk):
    command = "find /dev/disk -ls | grep /"+disk
    output = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
    if "usb" in output:
        return True
    else:
        return False

done = []
while True:
    mounted = get_mountedlist()
    new_paths = [dev for dev in mounted if not dev in done and not dev[1] == "/"]
    valid = [dev for dev in new_paths if identify(dev[0]) == True]
    for item in valid:
        os.chdir(item[1])
        subprocess.call(["gnome-terminal"])
        os.chdir(home)
    done = mounted
    time.sleep(4)
1
ответ дан 2 December 2019 в 05:00

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

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