जवाबों:
अब systemd के साथ बहुत अच्छे समाधान है । आप एक सेवा बनाते हैं जो निर्भर करता है और आप मीडिया द्वारा चाहते हैं जैसे:/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
फिर आपको सेवा शुरू / सक्षम करनी होगी:
sudo systemctl start your.service
sudo systemctl enable your.service
माउंट के बाद, systemd आपकी ट्रिगर स्क्रिप्ट को फायर करता है। Udv नियम पर लाभ यह है कि स्क्रिप्ट वास्तव में माउंट के बाद फायर करती है, सिस्टम डिवाइस को जोड़ने के बाद नहीं।
केस का उपयोग करें : मेरे पास एक क्रिप्टेड विभाजन है जिसे मैं स्वचालित रूप से बैकअप करना चाहता हूं। डिवाइस को जोड़ने के बाद मुझे पासवर्ड टाइप करना होगा। यदि मैंने बैकअप स्क्रिप्ट को udv पर हुक कर दिया है, तो स्क्रिप्ट उस समय चलने का प्रयास करती है जब मैं पासवर्ड टाइप कर रहा हूं, जो विफल हो जाएगा।
संसाधन: udev के साथ स्क्रिप्टिंग
नोट: आप अपनी डिवाइस यूनिट को इसके साथ पा सकते हैं:systemctl list-units -t mount
systemctl enable your.service
। स्क्रिप्ट फ़ाइल निष्पादन योग्य होनी चाहिए।
Requires=
, After=
और, WantedBy=
दोनों लाइनों के साथ media-bb.mount
और media-BB.mount
क्योंकि Nautilus मुझे "BB" के रूप में वॉल्यूम दिखाता है, न कि "bb"। एक ही त्रुटि संदेश, पूंजीकरण को छोड़कर। क्या गलत है? क्या मुझे किसी तरह उस media-<something>.mount
सेवा को बनाना है ?
में अपने डिवाइस को खोजने के द्वारा शुरू करो lsusb
। आईडी नोट करें (उदाहरण के लिए 0a81:0101
)
नए udev रूल्स फ़ाइल को इसके /etc/udev/rules.d/
माध्यम से बनाएँ sudoedit /etc/udev/rules.d/100-mount-videos.rules
और एक नए नियम को इस तरह से प्लैंक करें:
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
ध्यान दें कि मैंने किस तरह से आईडी का उपयोग किया है lsusb
।
फिर आपको काम करने के लिए सिर्फ स्क्रिप्ट लिखने की जरूरत है। एक साधारण माउंट कमांड को काम करना चाहिए। sleep 5
फ़ाइलसिस्टम को प्रारंभ करने के लिए प्रतीक्षा करने के लिए आपको एक आदेश की आवश्यकता हो सकती है (यदि आप मुख्य बढ़ते करने के लिए सूक्ति छोड़ देते हैं - लेकिन आप इसे पहले माउंट करने के लिए स्वतंत्र हैं और फिर आपको नींद की आवश्यकता नहीं हो सकती है)।
एलन से जुड़ाव: लंबे समय तक चलने वाली स्क्रिप्ट "इस या एक आश्रित डिवाइस के लिए सभी आगे की घटनाओं को रोक सकती है"। मेरा मिंट मैन पेज आगे बताता है, "लंबे समय से चल रहे कार्यों को तुरंत घटना प्रक्रिया से अलग करने की आवश्यकता है।" ऐसा करने के लिए कौशल हासिल करने के लिए कोई टिप नहीं दी जाती है।
ओली का जवाब: इसे इस तरह लपेटें: https://askubuntu.com/a/106359/449
/root/
या कहीं और रखते हैं जहां केवल रूट इसे संपादित कर सकता है।
ATTRS {idVendor} और ATTRS {idProduct} (उबंटू 12.04 में परीक्षण) के लिए मान प्राप्त करने का दूसरा तरीका है:
पता लगाएं कि आपका usb कहां है:
$ mount | grep /dev/sd*
यह कुछ इस तरह दिखाता है:
/dev/sdb on /media/SOMEDIR type vfat ...
उस उपकरण की जानकारी प्राप्त करने के लिए udevadm का उपयोग करें:
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
आउटपुट कुछ इस तरह होना चाहिए:
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
अब ATTRS {idProduct} के लिए मॉडल आईडी और ATTRS {idVendor} के लिए विक्रेता आईडी का उपयोग करें
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
संपादित करें> वरीयताएँ> मीडिया के तहत Nautilus में आप "अन्य कार्रवाई" और "कॉस्ट्यूम कमांड" की तुलना में चुन सकते हैं। विभिन्न प्रकार के मीडिया के निष्पादन के लिए। उस समय तक USB ड्राइव पहले से ही माउंट है, लेकिन मुझे लगता है कि आप अभी भी इसे (एक कॉस्ट्यूम कमांड के साथ) उस फ़ोल्डर से लिंक कर सकते हैं, जिसे आप ड्राइव में दिखाना चाहते हैं। मैं नहीं बता सकता कि यह udev का उपयोग करने से आसान या बेहतर है।
यदि आप अपने डिवाइस पर बढ़ते हुए और अपने डिवाइस को नियंत्रित करने के लिए अपने फिल्ममेकर (नॉटिलस, कोनकेयर, गनोम, आदि) के साथ हस्तक्षेप नहीं करना चाहते हैं, तो मेरा सुझाव है कि udv रूट नहीं जा रहा है।
इसके बजाय, udisks-गोंद का उपयोग करें यदि आपका सिस्टम udisks का उपयोग करता है (लगभग सभी करते हैं)।
इंस्टॉल करने के बाद, बस ~/.udisks-glue.conf
इस तरह से अपने होम डायरेक्टरी में एक कॉन्फिगर फाइल बनाएं ।
मेरा निम्नलिखित उदाहरण मेरे कैमरे पर हर समय एसडी-कार्ड में प्लग-इन करने पर जीपीएस-असिस्ट डेटा को अपडेट करता है।
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"
}
बाद में बस यह सुनिश्चित करें कि जब आप बूट या लॉग-इन करते हैं तो udisks-गोंद शुरू होता है। सूक्ति के स्टार्टअप अनुप्रयोगों के माध्यम से
udv का उपयोग करें
@ सुमिद के जवाब में समस्या है। आपको सेवा शुरू नहीं करनी चाहिए । आपको बस इसे सक्षम करने की आवश्यकता है।
फ़ाइल: /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
फिर सेवा को सक्षम करें:
sudo systemctl enable your.service
बस इतना ही।
नोट: आप के साथ अपने औसत दर्जे का लेबल पा सकते हैं:sudo systemctl list-units -t mount
नोट 2: यदि सेवा किसी भी तरह से विफल है (उदाहरण के लिए, स्क्रिप्ट निष्पादन योग्य नहीं है), तो <old_mount_point_name>1
अगली बार जब आप USB डिवाइस को माउंट करेंगे तो आपका आरोह बिंदु बदल जाएगा । इस समस्या को ठीक करने के लिए, आपको बस निष्पादित करने की आवश्यकता हैsudo systemctl reset-failed