Как сделать так, чтобы nautilus монтировался в `/drivename` вместо`/media/drivename`?

Я хочу смонтировать другие мои диски (в основном NTFS и FATER) на /drivename щелкнув по значку диска на боковой панели nautilus, где "drivename" относится к метке диска. По умолчанию nautilus монтирует диски с именем drivename в /media/drivename папка.

У меня вопрос: как мне сделать так, чтобы nautilus делал так?

Я не хочу использовать fstab: пожалуйста, не предлагайте делать это путем редактирования /etc/fstab файл. Я хочу эту функцию в nautilus и после нажатия на диск также должен быть виден в боковой панели. (не должен быть скрыт).


Изменить: Кажется, есть некоторые недоразумения с этим вопросом. Я не хочу садиться в диск/, т.е. все содержимое диска в /, То, что я хочу, это когда я монтирую диск с именем "Main", этот диск монтируется в /Main вместо /media/Main,

4 ответа

Решение

Насколько я знаю, сейчас это невозможно (по крайней мере, невозможно). Может потребоваться компиляция некоторых пакетов, включая nautilus

Вам нужно написать правило 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"

И измените действия ДОБАВИТЬ и УДАЛИТЬ с вашим путем, в этом случае /

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}"

Вы хотите, чтобы динамически смонтированные тома появлялись прямо в /, Пока что работа над этой проблемой была сосредоточена на /media в /, Я подозреваю, что есть какой-то способ сделать это. Но простое, быстрое и грязное решение было бы сделать это так /media а также / находятся в той же папке.

Я не могу настоятельно рекомендовать это, поскольку система не предназначена для работы таким образом, и могут быть ошибки, которые существуют, потому что разработчики не рассматривали эту возможность. (Некоторые могут даже не учитывать предположение, что / не является /media Жук.)

Но вы должны быть в состоянии сделать /media символическая ссылка на /, так что когда что-то установлено в /media/mount-point, это на самом деле установлено в /mount-point,

  • Это также будет доступно через /media/media/mount-point, /media/media/media/mount-point и так далее, хотя было бы весьма запутанным, если бы вы могли получить к нему доступ по этим именам.

Обратите внимание, что, хотя я не провел необходимых исследований, чтобы гарантировать, что это никогда не создаст проблему безопасности, он не создает ни одного из способов, которые первоначально казались бы такими:

  • Каталоги в /, лайк /usr а также /dev что не root пользователь может получить доступ к системе путем компрометации, и не может быть получен таким способом. Если вы смонтируете раздел с именем тома /usr не перезаписывает и не предоставляет доступ к /usr, он будет монтироваться с альтернативным именем (обычно /usr_).

  • Это не дает неограниченный доступ в / и вам не нужно (и действительно, не следует) менять владельца или права доступа / (или любой другой файл или папка). Владение и разрешения / а также /media уже такие же (0755, root: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, без необходимости вручную создавать ссылки для каждой точки монтирования.

Вы можете сделать это, расширив эти правила по мере необходимости -

# 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, нажмите здесь

Другие вопросы по тегам