В моем скрипте 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), чтобы временно заморозить все.
Итак, в итоге, у меня есть работоспособное решение (спасибо всем, кто помог), которое я могу или не могу реализовать (пока не уверен); но я буду продолжать искать что-то еще. Спасибо