Manejo de operaciones de lectura/escritura de unidades USB en scripts sin privilegios sudo

Manejo de operaciones de lectura/escritura de unidades USB en scripts sin privilegios sudo

Estoy desarrollando una aplicación que en algún momento necesita escribir en una unidad de disco USB. La aplicación se ejecuta con permisos que no son de superusuario y pensé que la mejor manera de escribir en la unidad sería montarla con la opción de descarga tan pronto como se inserte la unidad, de esta manera, en teoría, no necesito hacerlo. realice cualquier operación de desmontaje, con esta regla udev:

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

El script de montaje intenta invocar el comando de esta manera:

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

pero lo entiendoeste error de montaje:

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

Lo curioso es que me sale este error solo al intentar montarlo mediante la regla udev, si me invoco mymountscript.shla unidad se monta correctamente en el punto.

Aparte de una solución para este problema, me gustaría saber si es arriesgado hacerlo de esta manera (entiendo que es porque no desmonto la unidad después de escribir el archivo). Si voy por el otro lado, necesitaría el script de la aplicación (que se ejecuta en nombre del usuario) para poder montar/desmontar la unidad él mismo. Para esto, necesitaría guardar el nombre del dispositivo en algún lugar cuando se inserte y también otorgar permisos de montaje a la aplicación.

El sistema operativo es Xubuntu 16.04.

Respuesta1

Mi solución para esto fue gestionarlo de esta manera:

  1. Una regla udev para la acción de inserción de USB.

  2. Los scripts que llegan mientras tanto montan/desmontan la unidad ellos mismos.

  3. Una regla de udev para la acción de eliminación de USB.

Se inserta el USB

Ejecuto un script que simplemente guarda el nombre del dispositivo en un archivo. Puedo agregar cualquier otro script a esta regla:

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

Aquí, myownscript.shmontaremos el dispositivo usandomontar, que permite montar/desmontar unidades extraíbles para usuarios estándar. Puedo llamar a cualquier otro script después de estos, siempre y cuando desmonte la unidad en cada uno de ellos antes de que el siguiente la use.

Se elimina el USB

Aquí, un script simple elimina el archivo creado por my-usb-inserted.sh, por lo que sabemos que no hay ninguna unidad flash insertada dentro de los scripts.

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

Esta solución no ha tenido en cuenta el hecho de tener que lidiar con más de una unidad USB.

Ver también:

información relacionada