Открытие терминала по умолчанию при подключении 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)