Как я могу записать сценарий, который стреляет в событие?
Когда я вставляю карту флэш-памяти с интерфейсом USB, Ubuntu монтирует его и автоматически открывает Nautilus. Когда это происходит с определенным флеш-накопителем, я хотел бы открыть вторую вкладку с определенной папкой.
Я не думаю, что это может быть сделано со сценарием Наутилуса, но как я могу сделать это со сценарием Linux или расширением Наутилуса?
Если Вы запускаете скрипт ниже в фоновом режиме, он проверяет на смонтированные объемы. Если один из Ваших определенных дисков смонтирован, он автоматически открывает папку набора в наутилусе.
Незначительная проблема состояла в том, что наутилус не поддерживает открытие каталога на новой вкладке из командной строки, только в новом окне. Это означает, что начальное окно, которое появляется при вставке карты памяти должно корректно закрыться. Использование сценария wmctrl
сделать это, одновременно что Ваша выбранная папка откроется.
Вы, возможно, должны были бы установить его сначала:
sudo apt-get install wmctrl
#!/usr/bin/env python3
import subprocess
import time
#--
drivename_folders = [("My Passport", "docs"), ("7827-2F8C", "sanel")]
#--
def get_mountedlist():
return [item[item.find("/"):] for item in subprocess.check_output(
["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("\n") if "/" in item]
done = []
while True:
mounted = get_mountedlist()
new_paths = [dev for dev in mounted if not dev in done]
valid = sum([[(drive, drive+"/"+item[1], item[0]) for drive in new_paths \
if item[0] in drive] for item in drivename_folders], [])
for item in valid:
open_window = "nautilus "+"'"+item[1]+"'"
close_window = "wmctrl -c "+"'"+item[2]+"'"
subprocess.Popen(["/bin/bash", "-c", open_window])
time.sleep(1)
subprocess.Popen(["/bin/bash", "-c", close_window])
done = mounted
time.sleep(2)
Скопируйте сценарий в пустой файл
Установите свои диски и папки
В главном разделе сценария измените строку:
drivename_folders = [("My Passport", "docs"), ("7827-2F8C", "MyFolder")]
где каждый кортеж представляет диск (имя) и папка в диске, который должен быть открыт. Я оставил свой "тест" - имена как пример.
Если Вы не уверены в точном названии своего диска, выполненного lsblk
видеть имя (без предыдущего пути к точке монтирования)
Сохраните сценарий
Сохраните сценарий как open_folder.py
и выполненный это командой:
python3 /path/to/open_folder.py
Если все работы как Вы ожидали, добавляет это к Вашим Приложениям Запуска
lsblk
управляйте для проверки на все смонтированные объемы.Я протестировал его на pcmanfm
(Lubuntu) и thunar
(Xubuntu) и, как ожидалось, в обоих случаях, это работает прекрасное.
Если Вы хотите использовать его или на Lubuntu или на Xubuntu, изменить строку:
open_window = "nautilus "+"'"+item[1]+"'"
кому:
open_window = "thunar "+"'"+item[1]+"'"
(for Xubuntu)
или
open_window = "pcmanfm "+"'"+item[1]+"'"
(for Lubuntu, also disable in pcmanfm's preferences: Media > "Show available options for removable media")
Конечно, удостовериться wmctrl
установлен
Скорее всего, это будет работать над другими файловыми менеджерами также.
Версия сценария выше специально для одной ситуации. Чтобы смочь использовать сценарий в более широком диапазоне целей (для выполнения любой команды, когда определенный диск подключается делая резервные копии из него, например), версия ниже могла быть полезной.
В этом случае, в главном разделе сценария, кортежи представляют:
drivename_folders = [(<drivename_a>, <command_a>), (<drivename_b>, <command_b>)]
посмотрите, что "тест" устанавливает в сценарии ниже.
#!/usr/bin/env python3
import subprocess
import time
#--
drivename_command = [("My Passport", "gnome-terminal"), ("F806-0C50", "gedit")]
#--
def get_mountedlist():
return [item[item.find("/"):] for item in subprocess.check_output(
["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("\n") if "/" in item]
done = []
while True:
mounted = get_mountedlist()
newly_mounted = [dev for dev in mounted if not dev in done]
valid = sum([[(drive, item[1]) for drive in newly_mounted \
if item[0] in drive] for item in drivename_command], [])
for item in valid:
subprocess.Popen(["/bin/bash", "-c", item[1]])
done = mounted
time.sleep(2)
Скопируйте сценарий в пустой файл
Установите свои диски и команды
Сохраните сценарий
Сохраните сценарий как drive_run.py
и выполненный это командой:
python3 /path/to/drive_run.py
Если все работы как Вы ожидали, добавляет это к Вашим Приложениям Запуска