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
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.
Leave a Reply