Работа с операциями чтения/записи USB-накопителя в скриптах без привилегий sudo

Работа с операциями чтения/записи USB-накопителя в скриптах без привилегий sudo

Я разрабатываю приложение, которому в какой-то момент нужно записать на USB-накопитель. Приложение запускается с правами не суперпользователя, и я подумал, что лучшим способом записи на диск будет его монтирование с опцией flush сразу после вставки диска, таким образом, теоретически мне не нужно выполнять операцию umount, с этим правилом udev:

ACTION="add", KERNEL="sd*[0-9]", SUBSYSTEMS="usb", RUN+="/bin/sh mymountscript.sh '%E{DEVNAME}'"

Скрипт монтирования пытается вызвать команду следующим образом:

mount -o --flush $1 /media/my-user/my-usb-unit

Но я получаюэта ошибка монтирования:

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

Любопытно, что я получаю эту ошибку только при попытке смонтировать его через правило udev. Если я вызываю его mymountscript.shсам, то устройство корректно монтируется в точке.

Помимо решения этой проблемы, я хотел бы узнать, рискованно ли делать это таким образом (я понимаю, что это потому, что я не размонтирую диск после записи файла). Если я пойду другим путем, мне понадобится скрипт приложения (который выполняется от имени пользователя), чтобы иметь возможность монтировать/размонтировать устройство самостоятельно. Для этого мне нужно будет где-то сохранить имя устройства при его вставке, а также предоставить приложению разрешения на монтирование.

Операционная система — Xubuntu 16.04.

решение1

Мой обходной путь для этой проблемы был следующим:

  1. Одно правило udev для действия «Вставлен USB-накопитель».

  2. Тем временем скрипты сами монтируют/размонтируют диск.

  3. Одно правило udev для действия по извлечению USB-накопителя.

USB вставляется

Я выполняю один скрипт, который просто сохраняет имя устройства в файл. Я могу добавить любой другой скрипт в это правило:

ACTION=”add”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh my-usb-inserted.sh”,  RUN+=”/bin/sh myownscript.sh” 

Здесь myownscript.shбудет смонтировано устройство с помощьюpmount, который позволяет монтировать/размонтировать съемные диски для обычных пользователей. Я могу вызывать любые другие скрипты после этих, пока я размонтирую устройство в каждом из них, прежде чем его использует следующий.

USB удаляется

Здесь простой скрипт удаляет файл, созданный my-usb-inserted.sh, поэтому мы знаем, что в скриптах не вставлено ни одного флэш-устройства.

ACTION=”remove”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh usb-removed.sh” 

В этом обходном пути не учитывается тот факт, что придется иметь дело с несколькими USB-накопителями.

Смотрите также:

Связанный контент