Cegah nautilus menampilkan partisi yang dipasang di skrip bash

8

Di skrip bash saya, saya memasang partisi, memeriksanya, menyalin file, dan meng-unmount. Ketika skrip mount partisi, Nautilus muncul dengan Window yang menunjukkan partisi dan mencuri fokus. Ini adalah sesuatu yang ingin saya hindari.

Catatan: Saya tahu saya bisa mengubah perilaku ini di Pengaturan sistem, Detail, Media yang dapat dilepas Never prompt or start programs on media insertion,, tetapi saya tidak ingin mengubah perilaku, misalnya jika stik USB dicolokkan, saya hanya ingin mencegahnya di skrip bash saya . Karena skrip ini berjalan pada komputer pengguna lain, saya tidak dapat mengubah pengaturan ini (dalam skrip) karena jika diakhiri secara tidak normal akan meninggalkan pengaturan yang diubah di tempat (saya juga tidak percaya itu harus dilakukan untuk melakukan ini).

Sebenarnya tampilan otomatis ini sepertinya tidak konsisten. Jika saya melakukan perintah yang sama persis dari terminal, Nautilus tidak muncul, dan saya tahu ada mount lain di skrip saya yang tidak muncul. Jadi apa yang menyebabkan ini? Berikut adalah contoh kode (keduanya menyebabkan jendela nautilus terpisah muncul):

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

Saya tertarik untuk memahami proses dimana sinyal mount Nautilus dan mengapa ini terjadi (ketika tidak jika saya me-mount partisi dari terminal). Dan apa cara terbaik untuk mencegah hal ini terjadi.

Saya perhatikan perilaku ini dimulai pada rilis 11.10 (jika saya ingat dengan benar). Saya sedang menjalankan 12,04, tetapi skrip harus bekerja pada semua rilis yang didukung. Saya tidak percaya solusinya harus melibatkan memodifikasi pengaturan sistem (yang mungkin berbeda antara rilis). Misalnya, jika Anda melihat hal-hal lain yang me-mount partisi (seperti os-prober), tidak ada jendela nautilus yang muncul ketika me-mount partisi yang berbeda.

Skrip dapat ditemukan di sini . Dan inilah bagian di mana Nautilus muncul. Saya pikir ini juga muncul di sini , tetapi saya telah memfokuskan pengujian saya pada tautan pertama. Ini adalah di mana ia tidak muncul, yang disebut sebelum mereka tunggangan lain - catatan saya sudah menulis ulang yang pertama sebagai --read-satunya dan dalam sebuah pernyataan jika dan tidak ada bedanya.

Idealnya, jawaban akan menjelaskan mengapa hal ini terjadi dan bagaimana cara mencegahnya, dengan kata lain, menjelaskan mengapa skrip mountdiperlakukan secara berbeda dengan yang dikeluarkan dari terminal. Solusi yang baik juga akan diterima jika itu adalah solusi yang sepenuhnya dijelaskan dan praktis yang dapat mendukung semua lingkungan desktop (ubuntu, kubuntu, xubuntu, lubuntu dll) - Saya juga ingin menghindari peningkatan eksponensial dalam pengujian untuk memverifikasinya.

Terima kasih sebelumnya

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

Solusi sesuai tautan 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
}

Ini mencapai hasil yang diinginkan, tetapi terasa seperti pendekatan palu godam. Saya percaya mungkin ada fine-tuning di udev yang akan memungkinkan partisi untuk tetap ditampilkan di Nautilus (dan browser file lainnya) tanpa muncul ketika sudah terpasang. Ngomong-ngomong jika ada yang ingin mencoba ini, skrip berikut akan menunjukkan efek pop-up 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

Saya akan terus bermain udevdan saya juga telah mengajukan bug , karena ini tidak masuk akal untuk partisi yang tidak dimasukkan untuk bertindak seperti USB / kartu media yang dimasukkan saat mount. Juga udevadm triggerbukan operasi murah yang muncul (setidaknya 12,04) untuk sementara membekukan segalanya.

Jadi, secara ringkas, saya memiliki solusi yang bisa diterapkan (terima kasih kepada semua orang yang telah membantu), yang mungkin atau mungkin tidak saya terapkan (belum yakin); tapi aku akan terus mencari yang lain. Terima kasih

bcbc
sumber
Untuk yang lain menjawab, dapatkah Anda menambahkan Versi Ubuntu Anda? mis. 9.04, 10.10, 12.04. Ada sedikit evolusi dari satu ke yang lain.
Paul
Poin yang bagus. Saya akan mengedit pertanyaan saya untuk menambahkan itu.
bcbc
jika Anda me-mount, apakah nautilus tidak muncul? Ini berfungsi untuk saya agar gnome-shell tidak muncul dengan dialog kecil di bagian bawah layar. Ini diuji pada 12,04 Ubuntu menggunakan gnome-shell.
Gary
Itu tidak ada bedanya bagi saya.
bcbc
<p> _Jika saya melakukan perintah yang sama persis dari terminal, Nautilus tidak menunjukkan_ - Bagaimana Anda meluncurkan skrip Anda? </p> <p> dan saya tahu ada tunggangan lain dalam skrip saya yang tidak ditampilkan - Apa perbedaan di antara tunggangan ini? </p>
zuba

Jawaban:

3

Coba saran ini: http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

Saya cukup yakin itu ada hubungannya dengan sinyal dan pemrosesan udev.

papashou
sumber
3
Bisakah Anda memposting konten tautan secara singkat di sini? Jawaban hanya dengan tautan sangat tidak diterima di komunitas AU.
Mahesh
Ini bekerja. Saat ini terlalu sedikit detail untuk menerima jawabannya. Saya telah mengkonfirmasi secara manual bahwa ini berfungsi untuk membuat file dan panggilan udevadm trigger. Hanya ingin memastikan itu berfungsi dalam skrip. Saya akan memposting detail dalam pertanyaan jika Anda belum menambahkan lebih lanjut di sini.
bcbc
Saya tidak ingin meringkas kembali apa yang telah ditata dengan jelas oleh tautan. Pada dasarnya, ini membutuhkan penambahan aturan di /etc/udev/rules.d/ yang memberi tahu udev untuk tidak memproses perangkat tertentu - setiap perangkat akan mendapatkan baris yang menentukan: KERNEL == ”sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} =” 1 ″. Melakukannya tidak mengubah perilaku sistem atau kernel apa pun. Itu hanya memberitahu UDEV untuk menyembunyikan presentasi dari disk. Nautilus bergantung pada pemrosesan aturan udev untuk perilaku ini.
papashou
1

Coba balas skrip Anda:

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

Tidak diuji karena saya pada 10,04

MEMPERBARUI:

#!/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
sumber
Terima kasih atas sarannya ... Saya tidak ingin mengubah pengaturan karena saya tidak yakin itu akan segera berlaku, itu membutuhkan kode yang berbeda untuk setiap rilis, itu tidak berlaku, dan jika skrip dibatalkan maka meninggalkan pengguna dalam keadaan yang tidak diinginkan - saya juga tidak percaya itu harus diperlukan. Apa yang saya kejar adalah mekanisme di mana nautilus diberitahu tentang mount, dan bagaimana memintasnya. misalnya udev? dbus? hal semacam itu.
bcbc
+ Saya tidak ingin mengubah pengaturan karena aku tidak yakin itu akan segera berlaku - Itu adalah pertanyaan untuk diperiksa (cukup mudah). + itu membutuhkan kode yang berbeda untuk setiap rilis - mungkin memerlukan atau tidak mungkin 50 | 50 seolah-olah saya bisa bertemu dengan dyno di jalan)) + itu tidak valid - membandingkan dengan alternatif apa?
zuba
+ jika skrip dibatalkan maka pengguna dalam keadaan yang tidak diinginkan - banyak paket (misalnya aptitude) ketika dibatalkan melakukannya. Ada beberapa pendekatan untuk menghindari efek samping itu. Misalnya, Anda dapat mengisi cron untuk memeriksa setiap 1 menit jika skrip berjalan, dan jika tidak mengubah pengaturan kembali. Atau Anda dapat menjalankan skrip Anda dari yang lain yang mengontrol pengaturan.
zuba
Maksud saya adalah tidak perlu mengubah pengaturan khusus desktop. Saya juga harus menambahkan bahwa skrip ini dapat berjalan di ubuntu / xubuntu / kubuntu / lubuntu dll. Jadi ini menambah tingkat kerumitan dan risiko yang tinggi.
bcbc
Alternatif daftar hitam partisi dengan udisk (lihat tautan papashous) memerlukan sudo dan tidak portabel di mesin, sehingga akan menjadi lebih kompleks dan berisiko.
Egil
1

Anda dapat mencegah penginstalan flash drive dengan menambahkan aturan udev baru. Dalam aturan itu Anda dapat menentukan flash drive oleh vendornya, nomor seri, atribut lainnya. Lihat baris ATTRS {} di output dari:

udevadm info -a --name=sdb1

Script yang harus Anda tempatkan di folder /etc/udev/rules.d dengan nama file khusus, misalnya 81-usb-wubi-move.rules

Aturannya bisa seperti

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

Lihat juga:

zuba
sumber
Sepertinya ini harus menjadi solusi potensial - Saya perlu waktu untuk meninjau ini dan bereksperimen, dan tidak akan memiliki kesempatan sampai hari ini (akan memberikan umpan balik). Idealnya jawabannya akan menjelaskan mengapa hal ini terjadi (dibandingkan dengan berlari mountdari terminal) tetapi jika saya mendapatkan solusi yang baik saya akan menerimanya juga.
bcbc
Ini dia
RobotHumans
0

Belum diuji .... hanya dugaan.

Pasang sistem file di pohon yang tidak dapat diakses oleh pengguna nautilus, misalnya dalam subdirektori dari / root atau / home / someoneelse atau subdirektori / tmp yang dimiliki dan diamankan oleh orang lain

Perlu diingat itu mungkin ide yang buruk untuk memasang perangkat keras yang sama di dua titik mount dan memodifikasinya dari keduanya.

Beberapa konfigurasi manusia dimungkinkan di (12.04beta) Ubuntu-> System Settings-> Detail-> Removable Media. Beberapa opsi dapat diatur untuk "tidak melakukan apa-apa" dan itu mungkin menghindari popup.

Dokumentasi di https://help.ubuntu.com/community/Mount/USB mungkin bermanfaat untuk 9.10 tetapi tidak berfungsi dengan 12.04. Kunci untuk gconf-editor yang mereka sebutkan tidak lagi digunakan.

Paul
sumber
Itu dipasang di direktori di bawah / tmp (dan tempat lain).
bcbc
Tetapi pengguna yang login masih dapat mengakses / tmp. Sarannya adalah untuk menggunakan direktori yang tidak dapat diakses oleh pengguna yang masuk.
Paul
Saya menggunakan chmod 700dir ... tampak menjanjikan dan kemudian muncul jendela pesan (tanpa judul jendela): "Tidak dapat membuka folder untuk 10 GB Filesystem", "Tidak ada aplikasi terdaftar yang menangani file ini"
bcbc
Menarik. Itu pasti berusaha keras. Mungkin saya akan punya waktu untuk bermain dengan ini nanti.
Paul
0

Coba mountdengan -ndan -ibendera.

zuba
sumber
Saya sudah mencobanya - cukup banyak melalui semua opsi mount yang saya bisa. Pemicunya terjadi di tempat lain.
bcbc