如何让 nautilus 挂载在 `/drivename` 而不是 `/media/drivename`?

如何让 nautilus 挂载在 `/drivename` 而不是 `/media/drivename`?

我想/drivename通过单击 nautilus 侧窗格中的驱动器图标来安装其他驱动器(主要是 ntfs 和 fat),其中“驱动器名称”是指驱动器的标签。默认情况下,nautilus 会安装名称为驱动器名/media/drivename文件夹中。

我的问题是:我怎样才能让鹦鹉螺做到这一点?

我不想使用 fstab:请不要建议通过编辑/etc/fstab文件来执行此操作。我希望在 nautilus 中使用此功能,单击驱动器后也应在侧窗格中看到。(不应隐藏)。


编辑:这个问题似乎有些误解。我不想安装在驱动器中/,即 中驱动器的所有内容/。我想要的是,当我安装驱动器名为“Main”的驱动器时,该驱动器将安装在/Main而不是/media/Main

答案1

你需要为此编写一个 udev 规则:你可以在目录中创建一个/etc/udev/rules.d/文件

# Start at sdb to avoid system harddrive. 
KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"

# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

# Global mount options
ACTION=="add", ENV{mount_options}="defaults,relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs",         ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o    $env{mount_options} /dev/%k /media/%E{dir_name}"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

# Exit
LABEL="media_by_label_auto_mount_end"

并在本例中用你的路径更改 ADD 和 REMOVE 操作/

ACTION=="add", RUN+="/bin/mkdir -p /%E{dir_name}", RUN+="/bin/mount -o    $env{mount_options} /dev/%k /%E{dir_name}"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /%E{dir_name}", RUN+="/bin/rmdir /%E{dir_name}"

答案2

您可以根据需要扩展这些规则来实现这一点 -

# Start at sdb to avoid system harddrive. 
KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"

# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

# Global mount options
ACTION=="add", ENV{mount_options}="defaults,relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs",                ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o        $env{mount_options} /dev/%k /media/%E{dir_name}"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}",   RUN+="/bin/rmdir /media/%E{dir_name}"

# Exit
LABEL="media_by_label_auto_mount_end"

仔细查看规则。它不适用于硬盘驱动器。KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"表示如果设备名称是 sda*(如果不是 sdb* 或 sdc*),则转到标签,media_by_label_auto_mount_end即规则的末尾。因此,根据需要编辑行。但不要忘记系统驱动器。为其添加一个例外。

如果你的系统驱动器是 /dev/sda7,那么前几行应该是

KERNEL=="sda7" GOTO="media_by_label_auto_mount_end" #sda7 is system drive, so go to end.
#KERNEL!="sd[b-z][0-9]", GOTO="media_by_label_auto_mount_end"

如果您需要运行其他命令,请用 将它们连接起来RUN

有关 udev 规则的更多信息,请点击这里

答案3

您希望动态挂载的卷直接出现在 中/。到目前为止,这个问题的研究主要集中在改变将其从/media改为/。我怀疑有办法做到这一点。但一个简单、快速而粗略的解决方案是使其如此/media并且/是同一个文件夹

我不强烈推荐这种做法,因为系统不是设计成这样工作的,而且可能存在错误,因为开发人员没有考虑到这种可能性。(有些人甚至可能没有考虑到这/不是/media错误的假设。)

但你应该能够建立/media一个符号链接/,这样当某物被安装进去时,它实际上就被安装进去了。/media/mount-point/mount-point

  • 它也可以通过、等方式访问,但如果您实际上通过这些名称访问它,可能会相当令人困惑。/media/media/mount-point/media/media/media/mount-point

请注意,虽然我还没有做必要的研究来确保这可以绝不造成安全问题,它不会以最初可能的方式造成安全问题似乎到:

  • 非用户可以通过破解获得系统访问权限的 中的目录/(如/usr和)无法通过这种方式访问​​。如果您安装卷名为 的分区,它不会覆盖或授予 访问权限,而是使用备用名称(通常为)安装。/devroot/usr/usr/usr_

  • 这不会授予 中的不受限制的访问权限/,并且您不需要(实际上也不应该)更改 (或任何其他文件或文件夹)的所有权或权限。和/的所有权和权限已经相同(、)://media0755root:root

    ek@Apok:~$ ls -ld / /media
    drwxr-xr-x 25 root root 4096 2012-07-15 19:17 /
    drwxr-xr-x 14 root root 4096 2012-07-23 15:16 /media
    

    root当设备安装在特定的挂载点上时,非用户才可以获得他们之前所没有的访问权限。

要使 /media 成为指向/, 按着这些次序:

  1. 卸载所有已安装的分区,/media使其/media为空。

  2. 删除/media

    sudo rmdir /media
    
  3. 重新创建/media为 的符号链接/,位于/

    sudo ln -s / /media
    

    请注意,//media命令中ln,因为在创建符号链接时,我们将目标首先,然后来源

如果你需要或想要撤销此操作,只需反向执行以下步骤:

  1. 卸载所有动态安装的分区。

    • 它们被安装在 中/,但是通过/media符号链接,因此您可能无法在它们被安装时删除该符号链接,如果您这样做了,您可能无法访问它们,将数据刷新到它们,或者干净地卸载它们。
  2. 删除符号链接:

    sudo rm /media
    
  3. 重新创建真实目录:

    sudo mkdir /media
    

    您不必指定位掩码,因为当您以 创建文件夹时root,默认权限是正确的/media

此方法与之前的建议类似手动创建单独的符号链接/到 的特定子目录中/media。不同之处在于符号链接/media本身,这应该会导致 OP 请求的确切行为,而无需为每个挂载点手动创建链接。

答案4

据我所知,现在还不可能(至少不可行)。可能需要编译一些软件包,包括 nautilus

相关内容