Сокрытие разделов в Nautilus без монтирования
- Подробности
- Просмотров: 3554
Те, кто пользуется линуксом и в частности файловым менеджером Nautilus уже оценили удобность интерфейса монтирования флешек при их подключении. Они всегда видны на боковой панели и их можно в любой нужный момент смонтировать и размонтировать. Но вот те, кто использует мультисистемную конфигурацию, т.е. несколько ОС на одном компе, наверное заметили, что туда также часто попадают несмонтированные разделы винта. С одной стороны удобно, но далеко не всегда они должны быть под рукой. Бывают потребности в сокрытии их.
Самый простой способ - смонтировать их руками через команду mount. Тогда они оттуда исчезают. Но это далеко не всегда удобно и зачастую просто не нужно. Но есть способ похитрее. Он описан тут.
Суть способа такова. Обнаружением и монтированием дисков занимается такая хитрая штука как udisks. Nautilus же обменивается с ним информацией через dbus. Грубо говоря что udisks нашёл, то Nautilus и показывает. Поэтому нужно заставить udisks не выдавать некоторые разделы. Это делается элементарно просто через правила udev. Создаём файлик типа /etc/udev/rules.d/99-hide-partitions.rules:
KERNEL=="sda1", ENV{UDISKS_PRESENTATION_HIDE}="1" KERNEL=="sdb2", ENV{UDISKS_PRESENTATION_HIDE}="1"
В этом примере скрываются разделы /dev/sda1 и /dev/sdb2. Впрочем отбирать можно и по другим критериям. Если воспользоваться утилитой udevadm, то можно узнать много интересного, в том числе и список критериев для отбора конкретного девайса.
$ udevadm info -a -p /sys/class/block/sdb2 Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device. looking at device '/devices/pci0000:00/0000:00:1f.1/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2':
KERNEL=="sdb2"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="104855552"
ATTR{stat}==" 164 0 1312 313 0 0 0 0 0 313 313"
ATTR{partition}=="2"
ATTR{start}=="718848"
ATTR{discard_alignment}=="0"
ATTR{alignment_offset}=="0"
ATTR{inflight}==" 0 0"
looking at parent device '/devices/pci0000:00/0000:00:1f.1/ata4/host3/target3:0:0/3:0:0:0/block/sdb':
KERNELS=="sdb"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{ro}=="0"
ATTRS{size}=="234441648"
ATTRS{stat}==" 595 0 4754 982 0 0 0 0 0 708 982"
ATTRS{range}=="16"
ATTRS{discard_alignment}=="0"
ATTRS{events}==""
ATTRS{ext_range}=="256"
ATTRS{events_poll_msecs}=="-1"
ATTRS{alignment_offset}=="0"
ATTRS{inflight}==" 0 0"
ATTRS{removable}=="0"
ATTRS{capability}=="50"
ATTRS{events_async}==""
.........
И этот пример не полный. Впринципе любое уникальное отличие можно использовать, а можно и несколько штук. Но лично я для себя решил отбирать нужные разделы по UUID файловой системы. Всё равно меняется только либо при форматировании либо при большом желании. Наш файлик с правилами приобретает такой вид:
ENV{ID_FS_UUID}=="04F45320F4531371", ENV{UDISKS_PRESENTATION_HIDE}="1"
ENV{ID_FS_UUID}=="C0C8739AC8738002", ENV{UDISKS_PRESENTATION_HIDE}="1"
Проверить всё ли работает можно через дамп udisks:
$ udisks --dump
.......
========================================================================
Showing information for /org/freedesktop/UDisks/devices/sdb2
native-path: /sys/devices/pci0000:00/0000:00:1f.1/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2
device: 8:18
device-file: /dev/sdb2
.....
detected at: Mon 27 May 2013 12:58:03 PM EEST
system internal: 1
removable: 0
has media: 1 (detected at Mon 27 May 2013 12:58:03 PM EEST)
.......
is read only: 0
is mounted: 0
mount paths:
mounted by uid: 0
presentation hide: 1
presentation nopolicy: 0
.......
Если против presentation hide видим еденичку, то правило сработало правильно. Но если Nautilus всё равно показывает разделы, значит он работает не через udisks. Дело в том, что с выходом udisks2 всё немного не так. Для него нужно писать правила такого плана:
ENV{ID_FS_UUID}=="04F45320F4531371", ENV{UDISKS_IGNORE}="1"
ENV{ID_FS_UUID}=="C0C8739AC8738002", ENV{UDISKS_IGNORE}="1"
А проверить срабатывание можно так:
$ udisksctl dump
/org/freedesktop/UDisks2/block_devices/sdb5:
org.freedesktop.UDisks2.Block:
Configuration: []
CryptoBackingDevice: '/'
Device: /dev/sdb5
DeviceNumber: 2069
HintAuto: false
HintIconName:
HintIgnore: true
HintName:
Тут смотрим на HintIgnore, и убеждаемся что там значение true.
Вот впринципе и всё, от этого уже можно что-то мутить.
PS В системе могут быть установлены и обе версии udisks, но делом занимается только одна, поэтому если нужно пробовать обоими способами.
PPS Для применения правил нужно перезагружать машину, применить их без перезагрузки способа пока не нашёл.
PPPS Очевидно, что не только для Nautilus это работает, а и для всего, что работает через udisks.