Zapobiegaj nautilusowi pokazującemu partycję zamontowaną w skrypcie bash

8

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 mountjest 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ł udevi 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 triggernie 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

bcbc
źródło
Czy w przypadku innych osób możesz dodać swoją wersję Ubuntu? np. 9.04, 10.10, 12.04. Od jednego do drugiego nastąpiła spora ewolucja.
Paul
Słuszna uwaga. Zmodyfikuję moje pytanie, aby je dodać.
bcbc
jeśli montujesz -i, czy to powstrzymuje nautilusa przed wyskakiwaniem? Działa to dla mnie, aby powstrzymać gnome-shell od wyskakiwania za pomocą małego okna dialogowego u dołu ekranu. Zostało to przetestowane na Ubuntu 12.04 przy użyciu gnome-shell.
Gary
To dla mnie nie ma znaczenia.
bcbc
<p> _Jeśli wykonam dokładnie to samo polecenie z terminala, Nautilus się nie pokazuje_ - Jak uruchomić skrypt? </p> <p> i wiem, że w moim skrypcie są inne wierzchowce, które nie pokazują - Jakie różnice między tymi wierzchowcami? </p>
zuba

Odpowiedzi:

3

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.

papashou
źródło
3
Czy możesz tutaj zwięźle zamieścić treść linku? Odpowiedź z linkiem nie jest mile widziana w społeczności AU.
Mahesh,
To działa. W tej chwili jest zbyt mało szczegółów, aby zaakceptować odpowiedź. Potwierdziłem ręcznie, że działa tworzenie pliku i wywołanie udevadm trigger. Chcę tylko potwierdzić, że działa w skrypcie. Opublikuję szczegóły w pytaniu, jeśli nie dodałeś tutaj więcej.
bcbc
Nie chciałem podsumowywać tego, co link już jasno przedstawiłem. Zasadniczo wymaga dodania reguły w /etc/udev/rules.d/, która mówi udev, aby nie przetwarzał określonych urządzeń - każde urządzenie otrzyma własną linię określającą: KERNEL == ”sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} =” 1 ″. Takie postępowanie nie modyfikuje żadnego zachowania systemu ani jądra. Po prostu mówi UDEV, aby ukrył prezentację dysku. Nautilus polega właśnie na przetwarzaniu reguł udev w tym właśnie zachowaniu.
papashou
1

Spróbuj owinąć skrypt:

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

Nie testowałem, bo mam 10.04

AKTUALIZACJA:

#!/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
źródło
Dzięki za sugestię ... Nie chcę modyfikować ustawień, ponieważ nie jestem pewien, czy zadziała natychmiast, wymaga innego kodu dla każdej wersji, jest nieelegancki, a jeśli skrypt zostanie przerwany, pozostawia użytkownika w niepożądanym stanie - nie sądzę też, aby to było konieczne. To, czego szukam, to mechanizm, za pomocą którego nautilus jest powiadamiany o wierzchowcu i jak go ominąć. np. udev? dbus? coś w tym rodzaju.
bcbc
+ Nie chcę modyfikować ustawień, ponieważ nie jestem pewien, czy to zadziała od razu - oto pytanie, które należy sprawdzić (dość łatwe). + wymaga innego kodu dla każdego wydania - może wymagać lub nie 50 | 50 tak, jakbym mógł spotkać się z dyno na ulicy)) + jest nieelegancki - w porównaniu z jaką alternatywą?
zuba
+ jeśli skrypt zostanie przerwany, pozostawia użytkownika w niepożądanym stanie - wiele pakietów (np. aptitude) po przerwaniu robi to. Istnieją sposoby na uniknięcie tego efektu ubocznego. Np. Możesz naładować crona, aby sprawdzał co 1 minutę, czy skrypt jest uruchomiony, a jeśli nie, aby przywrócić ustawienie. Lub możesz uruchomić skrypt z innego, który kontroluje ustawienie.
zuba
Chodzi mi o to, że zmiana ustawienia specyficznego dla pulpitu nie powinna być wymagana. Powinienem również dodać, że ten skrypt może działać na Ubuntu / Xubuntu / Kubuntu / Lubuntu itp., Więc dodaje wysoki poziom złożoności i ryzyka.
bcbc
Alternatywa czarnej listy partycji z udisk (patrz papashous link) wymaga sudo i nie jest przenośna na różnych komputerach, więc byłaby jeszcze bardziej złożona i ryzykowna.
Egil,
1

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:

udevadm info -a --name=sdb1

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ć

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

Zobacz też:

Zuba
źródło
Wygląda na to, że powinno to być potencjalne obejście - potrzebuję czasu, aby to przeanalizować i poeksperymentować, i nie będę miał szansy aż do dzisiaj (przekażę opinię). Idealnie odpowiedź wyjaśni, dlaczego tak się dzieje (w porównaniu do uruchamiania mountz terminala), ale jeśli otrzymam dobre obejście, również to zaakceptuję.
bcbc
To jest ten
RobotHumans
0

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.

Paweł
źródło
Jest zamontowany w katalogu w katalogu / tmp (i nigdzie indziej).
bcbc
Ale zalogowany użytkownik nadal może uzyskać dostęp do / tmp. Sugerowano użycie katalogu, do którego zalogowany użytkownik nie ma dostępu.
Paul
Użyłem chmod 700w 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”
bcbc
Fascynujący. Z pewnością bardzo się stara. Może później będę miał czas na zabawę.
Paul
0

Spróbuj mountz flagami -ni -i.

Zuba
źródło
Próbowałem tego - prawie przeszedłem przez wszystkie opcje montowania, jakie mogłem. Spust ma miejsce gdzie indziej.
bcbc