Auto-montaje de USB con udev rules

Auto-montaje de USB con udev rules

En entornos Linux, la automatización del montaje de dispositivos USB resulta esencial para mejorar la eficiencia y experiencia de uso. En este artículo exploraremos en detalle cómo aprovechar udev para detectar la inserción de una unidad USB y ejecutar un script de montaje automáticamente, sin intervención manual.

1. Fundamentos de udev

  • udev es el gestor de dispositivos dinámico en Linux crea y elimina nodos en /dev en tiempo real.
  • Está compuesto por reglas legibles que describen acciones a tomar cuando cambian condiciones en el sistema (add, remove, change).
  • Las reglas se ubican generalmente en /etc/udev/rules.d/ (locales) o /lib/udev/rules.d/ (paquete del sistema).

2. Identificación de la unidad USB

Antes de escribir la regla, es necesario conocer atributos únicos del dispositivo (vendor, product, serial o UUID). Utilizamos lsusb y blkid:

 lsusb
Bus 002 Device 005: ID 0781:5581 SanDisk Corp. Ultra Flair USB 3.0
 sudo blkid /dev/sdb1
/dev/sdb1: UUID=1234-ABCD TYPE=vfat PARTUUID=00000000-01
  

3. Estructura de una regla udev

Una línea de regla udev tiene la forma básica:

SUBSYSTEM==block, ACTION==add, KERNEL==sd1, ATTRS{idVendor}==0781, ATTRS{idProduct}==5581, RUN =/usr/local/bin/usb-mount.sh
  

Explicación de campos:

Campo Descripción
SUBSYSTEM Categoría del dispositivo (block para bloques).
ACTION Evento: add, remove, etc.
ATTRS{idVendor} ID del fabricante en hexadecimal.
RUN Script o comando a ejecutar.

4. Creación del script de montaje

El script debe encargarse de:

  • Recoger variables de entorno (DEVNAME, ID_FS_UUID, ID_FS_TYPE).
  • Crear el punto de montaje.
  • Montar con opciones adecuadas.
  • Actualizar /etc/fstab o limpiar al desmontar.
#!/bin/bash
MOUNT_DIR=/media/usb-{ID_FS_UUID}
DEV={DEVNAME}

# Crear directorio
[ ! -d {MOUNT_DIR} ] ampamp mkdir -p {MOUNT_DIR}

# Montar con permisos de usuario
mount -o uid=1000,gid=1000,umask=0022 {DEV} {MOUNT_DIR} ampamp 
logger USB montado en {MOUNT_DIR}
  

Guardar en /usr/local/bin/usb-mount.sh y otorgar permisos:

 sudo chmod  x /usr/local/bin/usb-mount.sh
  

5. Integración con udev

Crear archivo de regla, por ejemplo /etc/udev/rules.d/99-usb-mount.rules:

SUBSYSTEM==block, ACTION==add, KERNEL==sd1, ATTRS{idVendor}==0781, ATTRS{idProduct}==5581, ENV{ID_FS_UUID}!=, RUN =/usr/local/bin/usb-mount.sh
  

Recargar reglas:

 sudo udevadm control --reload
 sudo udevadm trigger
  

6. Pruebas y diagnóstico

  • Utilizar udevadm monitor para observar eventos:
  •  sudo udevadm monitor --environment --udev
        
  • Revisar logs en /var/log/syslog o mediante journalctl -f.

7. Gestión de permisos y seguridad

Al montar con uid/gid, se evita otorgar permisos de root a usuarios estándar. Además:

  • Validar ID_SERIAL si la unidad es privada.
  • Deshabilitar autoexec en sistemas sensibles.
  • Limitar ejecución del script a root.

8. Ejemplos avanzados

Integración con notify-send para notificaciones gráficas:

# Dentro de usb-mount.sh
if mount ... then
  sudo -u usuario DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus 
  notify-send USB montado Punto: {MOUNT_DIR}
fi
  

Uso de systemd.mount para mayor control:

  • Crear unidad media-usb-1234ABCD.mount en /etc/systemd/system/.
  • Configurar [Mount] y [Install] según systemd.mount.

9. Consideraciones finales

Este método basado en udev ofrece:

  • Montaje inmediato tras la conexión.
  • Control granular de dispositivos por atributos.
  • Opciones de personalización según necesidades de usuario o seguridad.

Recursos recomendados

Publicado el copy 2024 Autor: Especialista Linux Artículo íntegramente escrito en HTML con estilo minimalista.

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *