По умолчанию, когда съемные носители вставлены, Ubuntu откроет Nautilus в каталоге монтирования. Я отключил эту опцию, но задавался вопросом, мог ли я настроить Gnome для открытия терминала в каталоге монтирования вместо этого.
Править: Я использую Ubuntu 15.10.
Отредактированная версия этого сценария делает задание. Когда (любое) USB-устройство подключается, a 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
Если все хорошо работает, добавьте его для Запущения Приложений: Тире> Приложения Запуска> Добавляет команду:
python3 /path/to/open_usb.py
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)