Запретить отображение наутилуса, смонтированного в bash-скрипте

8

В моем скрипте bash я монтирую разделы, проверяю их, копирую в них файлы и размонтирую. Когда скрипт монтирует раздел, Nautilus появляется с окном, показывающим раздел и фокус кражи. Это то, чего я хочу избежать.

Примечание: я знаю, что могу изменить это в Системных настройках, Сведениях, Съемном носителе, Never prompt or start programs on media insertionно я не хочу менять поведение, например, если USB-накопитель подключен, я просто хочу предотвратить это в моем скрипте bash , Так как этот скрипт запускается на компьютерах других пользователей, я не могу изменить эти настройки (в скрипте), потому что если он ненормально завершится, он оставит измененные настройки на месте (я также не считаю, что это необходимо делать).

На самом деле это автоматическое отображение не кажется последовательным. Если я выполняю ту же самую команду из терминала, Наутилус не отображается, и я знаю, что в моем скрипте есть другие монтирования, которые не отображаются. Так что может быть причиной этого? Вот пример кода (оба вызывают появление отдельных окон nautilus):

mount $dev $target
mkdir -p $target/home
mount $homedev $target/home

Я заинтересован в понимании процесса, которым монтирует сигнал Nautilus и почему это происходит (когда этого не происходит, если я монтирую раздел из терминала). И каков наилучший способ предотвратить это?

Я заметил это поведение начиная с версии 11.10 (если я правильно помню). В настоящее время я использую 12.04, но скрипт должен работать на всех поддерживаемых выпусках. Я не верю, что решение должно включать изменение настроек системы (которые могут отличаться в разных выпусках). Например, если вы посмотрите на другие вещи, которые монтируют разделы (например, os-prober), окна nautilus не появляются, когда он монтирует разные разделы.

Сценарий можно найти здесь . И вот та часть, где появляется Наутилус. Я думаю, что это также появляется здесь , но я сосредоточил свое тестирование на первой ссылке. Это то место , где оно не появляется, вызывается до этих других монтировок - заметьте, я переписал первые как - только для чтения и в операторе if, и это не имеет значения.

В идеале ответ объяснит, почему это происходит и как это предотвратить, другими словами, объяснит, почему сценарий mountобрабатывается иначе, чем тот, который выдается из терминала. Хороший обходной путь также будет принят, если это полностью объясненное и практичное решение, которое может поддерживать все настольные среды (Ubuntu, Kubuntu, Xubuntu, Lubuntu и т. Д.) - я также хочу избежать экспоненциального увеличения тестирования для его проверки.

заранее спасибо

============

Решение по ссылке Папашу :

add_udev_rules ()
{
    for i in "$dev" "$homedev" "$bootdev" "$usrdev"; do
      if [ -n "$i" ]; then
        block=${i#/dev/}
        echo "KERNEL==\"""$block""\",ENV{UDISKS_PRESENTATION_HIDE}=\"1\"" >> "$wubi_move_dir"/wubi_move.rules
      fi
    done
    cp "$wubi_move_dir"/wubi_move.rules /etc/udev/rules.d/wubi_move.rules
    udevadm trigger > /dev/null 2>&1
}

remove_udev_rules ()
{
    rm /etc/udev/rules.d/wubi_move.rules
    rm "$wubi_move_dir"/wubi_move.rules
    udevadm trigger > /dev/null 2>&1
}

Это достигает желаемого результата, но похоже на кувалду. Я полагаю, что в udev есть тонкая настройка, которая позволит разделу по-прежнему отображаться в Nautilus (и других файловых браузерах) без всплывающего окна при подключении. Кстати, если кто-то захочет попробовать это, следующий скрипт покажет эффект nautilus:

mkdir -p /tmp/testmount
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1 
rmdir /tmp/testmount

Я собираюсь продолжить играть, udevи я также подал ошибку , так как это не имеет никакого смысла для раздела, который не вставлен, чтобы действовать как вставленная карта USB / медиа при монтировании. Также udevadm triggerне недорогая операция, которая появляется (по крайней мере, 12.04), чтобы временно заморозить все.

Итак, в итоге, у меня есть работоспособное решение (спасибо всем, кто помог), которое я могу или не могу реализовать (пока не уверен); но я буду продолжать искать что-то еще. Спасибо

BCBC
источник
Чтобы другие могли ответить, не могли бы вы добавить свою версию Ubuntu? например, 9.04, 10.10, 12.04. Было немало эволюции от одного к другому.
Пол
Хорошая точка зрения. Я отредактирую свой вопрос, чтобы добавить это.
Би-би-си
если вы монтируете -i, это не даст наутилусу всплыть? Это работает для меня, чтобы препятствовать тому, чтобы gnome-shell выскочил с маленьким диалоговым окном внизу экрана. Это было протестировано на 12.04 Ubuntu с использованием gnome-shell.
Гэри
Это не имеет значения для меня.
Би-би-си
<p> _Если я выполняю ту же команду с терминала, Наутилус не показывает_ - Как вы запускаете свой скрипт? </ p> <p> и я знаю, что в моем скрипте есть другие маунты, которые не показывают - Какие различия между этими маунтами? </ p>
zuba

Ответы:

3

Попробуйте это предложение: http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

Я уверен, что это связано с сигналами и обработкой udev.

papashou
источник
3
Можете ли вы кратко опубликовать содержание ссылки здесь? Ответ только с ссылкой не очень приветствуется в сообществе AU.
Mahesh
Это работает. На данный момент слишком мало деталей, чтобы принять ответ. Я подтвердил вручную, что он работает для создания файла и вызова udevadm trigger. Просто хочу подтвердить, что это работает в сценарии. Я опубликую детали в вопросе, если вы не добавили больше здесь.
Би-би-си
Я не хотел бы резюмировать то, что ссылка уже четко изложена. По сути, это требует добавления правила в /etc/udev/rules.d/, которое говорит udev не обрабатывать определенные устройства - каждое устройство получит свою собственную строку, указав: KERNEL == ”sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} =” 1 ". Это не меняет поведение системы или ядра. Он просто говорит UDEV скрыть презентацию диска. Наутилус полагается на обработку правил udev именно для этого поведения.
Папашу
1

Попробуйте обернуть ваш скрипт:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put your script here  
#
...

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

Не проверено, потому что я на 10.04

ОБНОВИТЬ:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put CALLING your script here to survive its crashes
#
/bin/bash -c "/whenever/it/is/placed/script.sh"

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true
Zuba
источник
Спасибо за предложение ... Я не хочу изменять настройки, потому что я не уверен, что он вступит в силу немедленно, он требует разного кода для каждого выпуска, он не элегантен, и если скрипт прерван, он покидает пользователя в нежелательном состоянии - я тоже не считаю, что это необходимо. Что мне нужно, так это механизм, с помощью которого nautilus уведомляется о монтировании, и как его обойти. например удев? DBus? Что-то в этом роде.
bcbc
+ Я не хочу изменять настройки, потому что я не уверен, что они вступят в силу немедленно - это вопрос, который нужно проверить (достаточно просто). + он требует разного кода для каждого выпуска - может потребовать или не 50 | 50, как если бы я мог встретить динамо на улице)) + это не элегантно - по сравнению с какой альтернативой?
Зуба
+ если скрипт прерван, он оставляет пользователя в нежелательном состоянии - многие пакеты (например, aptitude), когда прерываются, делают это. Есть подходы, чтобы избежать этого побочного эффекта. Например, вы можете поручить cron проверять каждые 1 минуту, если скрипт запущен, и если нет, чтобы изменить настройку обратно. Или вы можете запустить свой скрипт из другого, который контролирует настройки.
Зуба
Моя точка зрения заключается в том, что не нужно менять настройки рабочего стола. Я также должен был добавить, что этот скрипт может работать на ubuntu / xubuntu / kubuntu / lubuntu и т. Д., Поэтому он добавляет высокий уровень сложности и риска.
bcbc
Альтернатива внесения в черный список раздела с помощью udisk (см. Papashous link) требует sudo и не переносима между компьютерами, поэтому это будет еще более сложным и рискованным.
Эгиль
1

Вы можете предотвратить автоматическое монтирование флешки, добавив новое правило udev. В этом правиле вы можете указать флешку по ее производителю, серийному номеру, другим атрибутам. Посмотрите строки ATTRS {} в выводе:

udevadm info -a --name=sdb1

Этот скрипт вы должны поместить в папку /etc/udev/rules.d со специальным именем файла, например, 81-usb-wubi-move.rules.

Правило может выглядеть так

ACTION=="add", KERNEL=="sdb?", SUBSYSTEMS=="usb", ATTRS{serial}=="001CC07CEE5EFB91C91B235C", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_PRESENTATION_NOPOLICY}="1"

Смотрите также:

Zuba
источник
Похоже, что это должен быть потенциальный обходной путь - мне нужно время, чтобы пересмотреть это и поэкспериментировать, и у меня не будет шанса до сегодняшнего дня (потом даст отзыв). В идеале ответ объяснит, почему это происходит (по сравнению с запуском mountиз терминала), но если я получу хороший обходной путь, я тоже приму это.
bcbc
Это один
RobotHumans
0

Не проверено .... просто догадка.

Смонтируйте файловую систему в дереве, недоступном для пользователя nautilus, например, в подкаталоге / root или / home / somebodyelse или подкаталоге / tmp, принадлежащем и защищенном кем-то другим

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

Некоторая человеческая конфигурация возможна в (12.04beta) Ubuntu-> Настройки системы-> Детали-> Съемные носители. Некоторые из параметров могут быть установлены на «ничего не делать», и это может избежать всплывающего окна.

Документация по адресу https://help.ubuntu.com/community/Mount/USB может быть полезна для 9.10, но не работает с 12.04. Ключи для gconf-editor, которые они упоминают, больше не используются.

Павел
источник
Он монтируется в каталоге в / tmp (и больше нигде).
Би-би-си
Но вошедший в систему пользователь все еще может получить доступ к / tmp. Было предложено использовать каталог, к которому вошедший в систему пользователь не может получить доступ.
Пол
Я использовал chmod 700на директории ... выглядел многообещающе, а затем вверх выскочил окно сообщения (без заголовка окна): «Невозможно открыть папку для файловой системы 10 ГБ», «Ни одно приложение не зарегистрировано для обработки этого файла»
bcbc
Захватывающий. Это конечно старается. Может быть, у меня будет время поиграть с этим позже.
Пол
0

Попробуйте mountс -nи -iфлагами.

Zuba
источник
Я пробовал это - в значительной степени прошел через все варианты монтирования, которые я могу. Триггер происходит в другом месте.
bcbc