在用户不安全地拔下USB拇指驱动器时提醒用户

用户反复抱怨USB拇指驱动器上的数据丢失后,如果没有卸载则拔掉它们。 我们在我们的机器上运行Ubuntu 14.04 LTS。 启用自动安装。

由于我已经厌倦了在拔掉插头之前记住它们进行安全移除,因此我想在拔出已安装的USB驱动器时让Ubuntu显示警报。

我考虑添加一个udev规则,在驱动器仍然挂载的情况下运行notify-send如何确定卸下后是否安装了USB驱动器?

我喜欢Fabby的方法,但向人们讲述这种坏习惯是很好的(他们不会一直在受控机器上工作)。 这与OSXfunction类似,如此处所述。

您可以使用它来了解它是否安全删除:

  • udev变量ID_PART_TABLE_TYPE=dos为不安全删除中的sdx磁盘节点( 非分区节点sdxY )设置。

  • 未设置安全删除的地方

通过监控udev事件注意到:

 udevadm monitor -u --environment 
  • 安全删除

     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 
  • 不安全的删除

     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. 创建一个udev规则(更改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' 'Your long message' -i /usr/share/icons/gnome/48x48/emotes/face-worried.png -t 10000" 
  2. 重新加载规则

     sudo udevadm control --reload-rules 

另一种方法,您可以使用连接到udisks DBUS的脚本(python)。 它有关于分区安装/卸载,磁盘插拔的所有需要​​的信息…

参考/来源: Gentoo Wiki:Udisks – USB_Thumb_Drive_Example

不幸的是,这是Micro $ oft实际上非常正确的事情:USB移除……你会继续遇到这个问题,直到你:

  1. 禁用自动安装

    如果用户必须手动安装,那么训练他们也更容易下马。

  2. 创建一个udev规则, 关闭USB磁盘上的所有缓存 …