web-dev-qa-db-fra.com

Alerte l'utilisateur lorsqu'il débranche en toute sécurité une clé USB

Les utilisateurs se plaignent à plusieurs reprises de la perte de données sur des clés USB après les avoir débranchés sans les démonter. Nous utilisons Ubuntu 14.04 LTS sur nos machines. Le montage automatique est activé.

Comme j'en ai marre de leur rappeler de procéder à un retrait en toute sécurité avant de débrancher, je souhaite que Ubuntu affiche une alerte à chaque fois qu'une clé USB montée est débranchée.

J'ai pensé à ajouter une règle udev qui exécute notify-send lors de son retrait si le lecteur est toujours monté. Comment puis-je déterminer si le lecteur USB a été monté lors de son retrait?

13
RenWal

J'aime l'approche de Fabby, mais il est bon d'enseigner aux gens cette mauvaise habitude (ils ne travaillent pas tout le temps sur des machines contrôlées). Ceci est similaire à une fonctionnalité OSX, comme décrit ici .

Il y a une petite différence que vous pouvez utiliser pour savoir s'il s'agissait d'une suppression sûre:

  • la variable udev ID_PART_TABLE_TYPE=dos est définie pour sdx noeud de disque ( PAS le noeud de partition sdxY) lors d'une suppression non sécurisée.

  • Où il n'est pas mis en sécurité retirer

Remarqué par la surveillance des événements udev:

udevadm monitor -u --environment
  • Suppression en toute sécurité

    UDEV  [8292.380554] change   /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/Host16/target16:0:0/16:0:0:0/block/sdb (block)
    ACTION=change
    DEVLINKS=/dev/disk/by-id/usb-ADATA_USB_Flash_Drive_8d90ec535e6663-0:0 /dev/disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0
    DEVNAME=/dev/sdb
    DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/Host16/target16:0:0/16:0:0:0/block/sdb
    DEVTYPE=disk
    DISK_MEDIA_CHANGE=1
    ID_BUS=usb
    ID_INSTANCE=0:0
    ID_MODEL=USB_Flash_Drive
    ID_MODEL_ENC=USB\x20Flash\x20Drive\x20
    ID_MODEL_ID=c96a
    ID_PATH=pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0
    ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_0-scsi-0_0_0_0
    ID_REVISION=0.00
    ID_SERIAL=ADATA_USB_Flash_Drive_8d90ec535e6663-0:0
    ID_SERIAL_SHORT=8d90ec535e6663
    ID_TYPE=disk
    ID_USB_DRIVER=usb-storage
    ID_USB_INTERFACES=:080650:
    ID_USB_INTERFACE_NUM=00
    ID_VENDOR=ADATA
    ID_VENDOR_ENC=ADATA\x20\x20\x20
    ID_VENDOR_ID=125f
    MAJOR=8
    MINOR=16
    SEQNUM=2989
    SUBSYSTEM=block                                                              
    TAGS=:systemd:                                                               
    USEC_INITIALIZED=554873
    
  • Suppression non sécurisée

    UDEV  [8391.320280] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host17/target17:0:0/17:0:0:0/block/sdb (block)
    ACTION=remove
    DEVLINKS=/dev/disk/by-id/usb-ADATA_USB_Flash_Drive_8d90ec535e6663-0:0 /dev/disk/by-path/pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
    DEVNAME=/dev/sdb
    DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/Host17/target17:0:0/17:0:0:0/block/sdb
    DEVTYPE=disk
    ID_BUS=usb
    ID_INSTANCE=0:0
    ID_MODEL=USB_Flash_Drive
    ID_MODEL_ENC=USB\x20Flash\x20Drive\x20
    ID_MODEL_ID=c96a
    ID_PART_TABLE_TYPE=dos
    ID_PATH=pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0
    ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0-scsi-0_0_0_0
    ID_REVISION=0.00
    ID_SERIAL=ADATA_USB_Flash_Drive_8d90ec535e6663-0:0
    ID_SERIAL_SHORT=8d90ec535e6663
    ID_TYPE=disk
    ID_USB_DRIVER=usb-storage
    ID_USB_INTERFACES=:080650:
    ID_USB_INTERFACE_NUM=00
    ID_VENDOR=ADATA
    ID_VENDOR_ENC=ADATA\x20\x20\x20
    ID_VENDOR_ID=125f
    MAJOR=8
    MINOR=16
    SEQNUM=3022
    SUBSYSTEM=block
    TAGS=:systemd:
    USEC_INITIALIZED=436355
    

  1. Créer une règle udev (change useranme)

    $ Sudo nano /etc/udev/rules.d/90-unsafe-remove-notify.rules
    
    ACTION=="remove", KERNEL=="sd?", ENV{ID_PART_TABLE_TYPE}!="", RUN+="/usr/bin/Sudo -u username DISPLAY=:0 notify-send 'Unsafe Remove' '<b><i>Your long message</b></i>' -i /usr/share/icons/gnome/48x48/emotes/face-worried.png -t 10000"
    
  2. Recharger les règles

    Sudo udevadm control --reload-rules
    

Vous pouvez également utiliser un script (python) qui se connecte à udisks DBUS. Il contient toutes les informations nécessaires sur le montage/démontage de la partition, les disques plug/unplug ...

Référence/Source: Wiki Gentoo: Udisks - USB_Thumb_Drive_Example

4
user.dz

Malheureusement, c'est une chose que Micro $ a souvent eu raison: la suppression de l'USB ... Et vous continuerez à avoir ce problème jusqu'à ce que vous:

  1. Désactiver le montage automatique

    Si les utilisateurs doivent monter manuellement, il sera également plus facile de les entraîner à démonter.

  2. Créez une règle udev qui désactive la mise en cache sur les disques USB ...

8
Fabby