W moim skrypcie bash instaluję partycje, sprawdzam je, kopiuję do nich pliki i odmontowuję. Kiedy skrypt montuje partycję, Nautilus wyskakuje z oknem pokazującym partycję i kradzież fokusa. To jest coś, czego chcę uniknąć.
Uwaga: Wiem, że mogę zmienić to zachowanie w Ustawieniach systemu, Szczegółach, Nośnikach wymiennych Never prompt or start programs on media insertion
, ale nie chcę zmieniać tego zachowania, np. Jeśli pamięć USB jest podłączona, chcę temu zapobiec w skrypcie bash . Ponieważ ten skrypt działa na komputerach innych użytkowników, nie mogę modyfikować tych ustawień (w skrypcie), ponieważ jeśli zostanie nieprawidłowo zakończony, pozostawi zmodyfikowane ustawienia na miejscu (nie sądzę też, aby było to konieczne).
W rzeczywistości ten automatyczny wyświetlacz nie wydaje się spójny. Jeśli wykonam dokładnie to samo polecenie z terminala, Nautilus się nie pokazuje i wiem, że w moim skrypcie są inne wierzchowce, które się nie pokazują. Co może być tego przyczyną? Oto przykład kodu (oba powodują wyskakiwanie oddzielnych okien nautilusa):
mount $dev $target
mkdir -p $target/home
mount $homedev $target/home
Interesuje mnie zrozumienie procesu, w którym mount sygnalizuje Nautilusowi i dlaczego tak się dzieje (kiedy tak się nie stanie, jeśli zamontuję partycję z terminala). I jaki jest najlepszy sposób, aby temu zapobiec.
Zauważyłem to zachowanie od wersji 11.10 (jeśli dobrze pamiętam). Obecnie korzystam z wersji 12.04, ale skrypt musi działać na wszystkich obsługiwanych wersjach. Nie sądzę, że rozwiązanie powinno obejmować modyfikację ustawień systemowych (które mogą się różnić w zależności od wersji). Na przykład, jeśli spojrzysz na inne rzeczy, które montują partycje (takie jak os-prober), nie ma okien nautilus wyskakujących, gdy montuje różne partycje.
Skrypt można znaleźć tutaj . I tutaj jest część, w której pojawia się Nautilus. Wydaje mi się, że to również pojawia się tutaj , ale skupiłem się na testowaniu pierwszego linku. To tam nie wyskakuje, wywoływane przed tymi innymi mountami - zauważ, że przepisałem pierwsze z nich jako - tylko do odczytu i wewnątrz instrukcji if i to nie ma znaczenia.
Idealnie, odpowiedź wyjaśni, dlaczego tak się dzieje i jak temu zapobiec, innymi słowy, wyjaśni, dlaczego skrypt mount
jest traktowany inaczej niż ten wydany z terminala. Dobre obejście zostanie również zaakceptowane, jeśli będzie to w pełni wyjaśnione i praktyczne rozwiązanie, które może obsługiwać wszystkie środowiska pulpitu (ubuntu, kubuntu, xubuntu, lubuntu itp.) - Chcę również uniknąć gwałtownego wzrostu liczby testów, aby to zweryfikować.
Z góry dziękuję
============
Rozwiązanie zgodnie z linkiem papashou :
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
}
Osiąga to pożądany rezultat, ale wydaje się, że jest to młot kowalski. Wierzę, że prawdopodobnie udoskonalenie w udev pozwoli na pokazanie partycji w Nautilusie (i innych przeglądarkach plików) bez wyskakiwania po zamontowaniu. Nawiasem mówiąc, jeśli ktoś chce tego spróbować, poniższy skrypt pokaże wyskakujący efekt 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
Będę nadal grał udev
i zgłosiłem błąd , ponieważ nie ma to sensu, aby partycja, która nie jest włożona, działała jak włożona karta USB / multimedialna po zamontowaniu. Również udevadm trigger
nie jest to niedroga operacja, która pojawia się (przynajmniej 12.04), aby tymczasowo zatrzymać wszystko.
Podsumowując, mam realne rozwiązanie (dzięki wszystkim, którzy pomogli), które mogę wdrożyć lub nie (nie jestem pewien); ale będę szukał czegoś innego. Dzięki
Odpowiedzi:
Wypróbuj tę sugestię: http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/
Jestem całkiem pewien, że ma to związek z sygnałami i przetwarzaniem udev.
źródło
udevadm trigger
. Chcę tylko potwierdzić, że działa w skrypcie. Opublikuję szczegóły w pytaniu, jeśli nie dodałeś tutaj więcej.Spróbuj owinąć skrypt:
Nie testowałem, bo mam 10.04
AKTUALIZACJA:
źródło
Możesz zapobiec automatycznemu montowaniu dysku flash, dodając nową regułę udev. W tej regule możesz określić dysk flash według jego dostawcy, numeru seryjnego i innych atrybutów. Zobacz wiersze ATTRS {} w danych wyjściowych:
Skrypt ten należy umieścić w folderze /etc/udev/rules.d ze specjalną nazwą pliku, np. 81-usb-wubi-move.rules
Reguła może wyglądać
Zobacz też:
źródło
mount
z terminala), ale jeśli otrzymam dobre obejście, również to zaakceptuję.Niesprawdzone .... tylko przeczucie.
Zamontuj system plików w drzewie niedostępnym dla użytkownika nautilus, np. W podkatalogu / root lub / home / someoneelse lub podkatalogu / tmp będącym własnością i zabezpieczonym przez kogoś innego
Należy pamiętać, że zamontowanie tego samego urządzenia sprzętowego w dwóch punktach montażowych i zmodyfikowanie go z obu może być złym pomysłem.
Pewna ludzka konfiguracja jest możliwa w (12.04beta) Ubuntu-> Ustawienia systemu-> Szczegóły-> Nośniki wymienne. Niektóre opcje można ustawić na „nic nie rób”, dzięki czemu można uniknąć wyskakującego okienka.
Dokumentacja na https://help.ubuntu.com/community/Mount/USB może być pomocna w przypadku wersji 9.10, ale nie działała z wersją 12.04. Wspomniane przez nich klucze edytora gconf nie są już używane.
źródło
chmod 700
w katalogu ... wyglądało obiecująco, a potem pojawiło się okno komunikatu (bez tytułu okna): „Nie można otworzyć folderu dla systemu plików 10 GB”, „Żadna aplikacja nie jest zarejestrowana jako obsługująca ten plik”Spróbuj
mount
z flagami-n
i-i
.źródło