Открытие терминала по умолчанию при подключении USB

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

РЕДАКТИРОВАТЬ: я использую Ubuntu 15.10.

1 ответ

Решение

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

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

Сценарий

#!/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
    
  • Если все работает нормально, добавьте его в Startup Applications: Dash > Startup Applications > Add the command:

    python3 /path/to/open_usb.py
    

Заметки

  • Я тестировал его на Unity (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)
Другие вопросы по тегам