在 Xubuntu 14.04 中,我尝试通过创建以下两个文件来禁用 USB 自动挂载:防止特定 USB 设备自动挂载并重新启动:
卸载/lib/udev/unmount.sh
#!/bin/bash
udisks --unmount /dev/sdn1
udisks --detach /dev/sdn
/etc/udev/rules.d/100-unmount-usb.rules
ACTION=="add", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", RUN+="/lib/udev/unmount.sh"
这不起作用,所以我创建了另一个文件,如下所示https://unix.stackexchange.com/questions/85061/automount-not-disabling-in-ubuntu-12-04-or-13-04
/etc/udev/rules.d/85-no-automount.rules
SUBSYSTEM=="usb", ENV{UDISKS_AUTO}="0"
重启后 USB 仍然自动挂载。
然后我安装了 gnome-disk-utility,虽然安装了但没有创建启动图标,并且无法识别输入“gnome-disk-utility”-我不知道如何启动它。我注意到 gnome-system-tools 已安装-但我再次不知道如何启动它。
答案1
对于 udisks2:
如果正在使用 udisks2,则需要执行以下操作来不自动挂载设备。首先,您需要获取有关设备的信息以编写 udev 规则。卸载设备,通过以下方式成为 root
sudo su
然后运行此命令:
udevadm monitor --environment --udev
之后,将设备插入电脑。现在,您可以看到有关设备的相关信息。您需要的是环境{ID_供应商}和环境 {ID_FS_UUID}。特别是 ID_FS_UUID 非常重要,因为它是设备的唯一值。按ctrl+c退出 udevadm。
然后,运行以下命令来获取所需的其他信息
udevadm info -a -p $(udevadm info -q path -n /dev/sdX)
将 /dev/sdX 替换为您的驱动器。查找ATTRS{供应商编号}和 ATTRS{idProduct}价值观。你需要子系统和司机指定此规则将应用到哪个设备块的值,以及环境{UDISKS_AUTO}="0"使设备不可自动挂载。如果你获得了所需的所有信息,那么是时候编写 udev 规则了。打开一个新规则文件:
sudo -H gedit /etc/udev/rules.d/10-noautomount.rules
并写下你得到的信息:
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{idVendor}=="3538"
ATTRS{idProduct}=="0070"
ENV{ID_VENDOR}=="PQI"
ENV{ID_FS_UUID}=="1A5AFC1F427754BF"
ENV{UDISKS_AUTO}="0"
保存并关闭文件。/etc/dev/rules.d/ 目录中的规则具有最高优先级。通过在该目录中写入规则,我们将防止任何可能阻碍规则的问题。
现在,您可以测试规则以查看它是否有效。首先,您需要了解设备的“devpath”。您将在输出中看到以下行
udevadm info -a -p $(udevadm info -q path -n /dev/sdX)
类似于此行的命令:
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5...'
有些行很长,对你来说没什么用。你需要把这些行剪短到对你有用的程度。要了解剪短的位置,请运行以下命令:
dmesg | grep usb
您将看到与设备相关的类似于以下行的行:
usb 2-1.5: new high-speed USB device number 15 using ehci-pci
usb 2-1.5: New USB device found, idVendor=3538, idProduct=0070
usb 2-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-1.5: Product: PQI USB Flash drive
usb 2-1.5: Manufacturer: PQI
usb 2-1.5: SerialNumber: XQVBW9KR
usb-storage 2-1.5:1.0: USB Mass Storage device detected
注意 usb one(2-1.5)后面的值。它显示了你的设备的路径和要剪切的位置。所以这个设备的“devpath”是
/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5
现在您可以通过运行以下命令来测试新的 udev 规则:
udevadm 测试 /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5
在上述命令的输出末尾,如果你看到这一行
UDISKS_AUTO=0
这意味着你的新规则正在生效。要应用新规则,你需要通过以下方式重新加载 udev 规则
udevadm control --reload
如果不起作用,请运行
udevadm trigger
之后,您可以通过拔下设备并重新插入来查看新规则是否有效。您的设备将在 Unity 启动器中显示如下:
在我的例子中,“nd”是应用了 no-automount udev 规则的设备。如果我按下该设备的图标,它将被挂载。
对于 udisk
如果正在使用 udisks,则可以使用环境{UDISKS_PRESENTATION_NOPOLICY}="0"值以使设备不可自动挂载。由于我的系统(Ubuntu 15.04)不使用 udisks,因此我无法给出具体说明,但过程类似。使用上面获得的值在 /etc/udev/rules.d/ 目录中为您的设备编写一条新的 udev 规则,并添加 ENV{UDISKS_PRESENTATION_NOPOLICY}="0" 值,而不是 ENV{UDISKS_AUTO}="0" 值。
希望这个回答能对你有帮助。
答案2
复制自https://unix.stackexchange.com/a/536545/302588:
# /etc/udev/rules.d/99-noautomount.rules
ENV{UDISKS_PRESENTATION_HIDE}="1"
ENV{UDISKS_PRESENTATION_NOPOLICY}="1"
ENV{UDISKS_AUTOMOUNT_HINT}="never"
ENV{UDISKS_SYSTEM_INTERNAL}="1"
ENV{UDISKS_IGNORE}="1"
ENV{UDISKS_AUTO}="0"
https://www.systutorials.com/docs/linux/man/7-udisks/:
UDISKS_PRESENTATION_HIDE
If set to 1 this is a hint to presentation level software that the device should not be shown to the user.
UDISKS_PRESENTATION_NOPOLICY
If set to 1 this is a hint to presentation level software that the device should not be automounted or autoassembled (for e.g. components of a multi-disk device).
UDISKS_AUTOMOUNT_HINT
A variable to influence whether a device should be automounted. Possible values include "always" (to hint that a device should always be automounted) and "never" (to hint that a device should never be automounted). Note that this is only a hint - the auto-mounter might not honor it.
UDISKS_SYSTEM_INTERNAL
If set, this will override the usual bus type based detection of whether a device is considered "system internal". "0" means "removable" (i. e. eligible for automounting, and normal users can mount), any other value means "system internal" (i. e. no automounting, and only administrators can mount).
https://www.systutorials.com/docs/linux/man/8-udisks/:
UDISKS_IGNORE
If set, this overrides the value of the HintIgnore property.
UDISKS_AUTO
If set, this overrides the value of the HintAuto property.