Запретить Nautilus показывать смонтированный раздел в скрипте Bash

Запретить Nautilus показывать смонтированный раздел в скрипте Bash

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

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

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

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

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

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

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

В идеале ответ должен объяснять, почему это происходит и как это предотвратить, другими словами, объяснять, почему in-script 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), временно замораживает все.

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

решение1

Попробуйте это предложение:http://www.worldofnubcraft.com/969/скрыть-диски-или-разделы-из-nautilus/

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

решение2

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

#!/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

решение3

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

udevadm info -a --name=sdb1

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

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

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

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

решение4

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

Связанный контент