Jawaban:
Ada banyak solusi yang lebih baik dengan systemd sekarang. Anda membuat layanan yang tergantung dan diinginkan oleh media Anda mis:/etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/home/you/bin/triggerScript.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Maka Anda harus memulai / mengaktifkan layanan:
sudo systemctl start your.service
sudo systemctl enable your.service
Setelah mount, systemd akan mengaktifkan skrip trigger Anda. Keuntungan dari aturan udev adalah skrip benar-benar aktif setelah mount, bukan setelah menambahkan perangkat sistem.
Gunakan case : Saya memiliki partisi crypted yang ingin saya backup secara otomatis. Setelah menambahkan perangkat saya harus mengetikkan kata sandi. Jika saya mengaitkan skrip cadangan ke udev, skrip mencoba untuk menjalankan pada saat saya mengetik kata sandi, yang akan gagal.
Sumber: Scripting dengan udev
Catatan: Anda dapat menemukan unit perangkat Anda dengan:systemctl list-units -t mount
systemctl enable your.service
. File skrip harus dapat dieksekusi.
Requires=
, After=
dan WantedBy=
garis-garis baik dengan media-bb.mount
dan media-BB.mount
karena Nautilus menunjukkan saya volume sebagai "BB", bukan "bb". Pesan kesalahan yang sama, kecuali untuk kapitalisasi. Apa yang salah? Apakah saya harus membuat media-<something>.mount
layanan itu?
Mulailah dengan menemukan perangkat Anda lsusb
. Catat ID (mis. 0a81:0101
)
Buat file aturan udev baru di /etc/udev/rules.d/
via sudoedit /etc/udev/rules.d/100-mount-videos.rules
dan plonk aturan baru di sana seperti ini:
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
Perhatikan bagaimana saya menggunakan ID dari lsusb
.
Maka Anda hanya perlu menulis skrip untuk melakukan pekerjaan. Perintah mount sederhana harus bekerja. Anda mungkin memerlukan sleep 5
perintah di sana untuk menunggu inisialisasi sistem file (jika Anda membiarkan gnome untuk melakukan pemasangan utama - tetapi Anda bebas untuk memasangnya terlebih dahulu dan kemudian Anda mungkin tidak perlu tidur).
Tambahan dari Allan: Skrip yang berjalan lama mungkin memblokir "semua acara lebih lanjut untuk ini atau perangkat yang tergantung". Halaman buku Mint saya lebih lanjut menyatakan "Tugas yang sudah berjalan lama harus segera dilepaskan dari proses acara itu sendiri." Tidak ada tip yang diberikan tentang tempat untuk mendapatkan keterampilan untuk melakukan ini.
Balas dari Oli: Bungkus seperti ini: https://askubuntu.com/a/106359/449
/root/
atau di suatu tempat di mana hanya root yang dapat mengeditnya.
Cara lain untuk mendapatkan nilai untuk ATTRS {idVendor} dan ATTRS {idProduct} (diuji di Ubuntu 12.04) adalah:
Temukan di mana usb Anda terpasang:
$ mount | grep /dev/sd*
ini menunjukkan sesuatu seperti berikut:
/dev/sdb on /media/SOMEDIR type vfat ...
Gunakan udevadm untuk mendapatkan info perangkat itu:
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
outputnya harus seperti:
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
Sekarang gunakan id model untuk ATTRS {idProduct} dan id vendor untuk ATTRS {idVendor}
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
Dalam Nautilus di bawah Edit> Preferensi> Media Anda dapat memilih "tindakan lain" dan daripada "perintah costum". untuk berbagai jenis media yang akan dieksekusi. Pada saat itu, drive usb sudah terpasang, tetapi saya kira Anda masih bisa menautkannya (dengan perintah costum) ke folder tempat Anda ingin drive tersebut muncul. Saya tidak tahu apakah ini lebih mudah atau lebih baik daripada menggunakan udev.
Jika Anda tidak ingin mengganggu kontrol filemanager Anda (nautilus, konquerer, gnome, dll.) Atas pemasangan dan pelepasan perangkat Anda, saya sarankan untuk tidak pergi ke rute udev.
Alih-alih, gunakan udisks-lem jika sistem Anda menggunakan udisks (hampir semuanya).
Setelah menginstal, cukup buat file config ~/.udisks-glue.conf
di direktori home Anda seperti ini.
Contoh berikut saya memperbarui data GPS-Assist di kamera saya setiap kali saya mencolokkan SD-card.
filter BT16EXTREME {
optical = false
partition_table = false
usage = filesystem
label = BT16EXTREME
}
match BT16EXTREME {
post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}
Setelah itu pastikan lem-udisks mulai ketika Anda boot atau masuk. Yaitu melalui aplikasi startup gnome
Jawaban @ sumid memiliki masalah. Anda tidak boleh memulai layanan. Anda hanya perlu mengaktifkannya.
mengajukan: /etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Kemudian aktifkan layanan:
sudo systemctl enable your.service
Itu saja.
Catatan: Anda dapat menemukan label medial Anda dengan:sudo systemctl list-units -t mount
Note2: Jika layanan gagal entah bagaimana (misalnya, skrip tidak dapat dieksekusi), titik pemasangan Anda akan berubah ke <old_mount_point_name>1
waktu berikutnya Anda memasang perangkat usb. Untuk memperbaiki masalah ini, Anda hanya perlu mengeksekusisudo systemctl reset-failed