USB डिवाइस प्लग-इन पर कस्टम स्क्रिप्ट कैसे चलाएं?


41

डेबियन / सेंटोस / फेडोरा जैसे वर्तमान लिनक्स वितरण के तहत यूएसबी डिवाइस प्लग-इन पर कस्टम स्क्रिप्ट को स्वचालित रूप से निष्पादित करने के लिए अत्याधुनिक विधि क्या है?

उदाहरण के लिए यदि आप कुछ फ़ाइलों को स्वचालित रूप से माउंट / कॉपी करना चाहते हैं / अपने यूयूआईडी (या डिवाइस आईडी) के आधार पर एक यूएसबी मास स्टोरेज डिवाइस को umount करें।

जवाबों:


27

एक फ़ाइल में इस तरह एक लाइन रखो /etc/udev/rules.d:

KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"

NAME="subdir/mydisk%n"यदि आप एक कस्टम प्रविष्टि पथ का उपयोग करना चाहते हैं तो एक खंड जोड़ें /dev

udevadm info -a -n sdbयह देखने के लिए चलाएं कि आप किन विशेषताओं के विरुद्ध मिलान कर सकते हैं ( attribute=="value", जब आप इसे प्लग sdbइन /devकरते हैं , तो नई प्रविष्टि में बनाई गई डिस्क के लिए स्वचालित रूप से डिस्क को असाइन किए गए डिवाइस नाम द्वारा प्रतिस्थापित किया जाता है)। ध्यान दें कि आप ATTRSकिसी एक श्लोक से खंड का उपयोग कर सकते हैं : आप किसी भी श्लोक को चुन सकते हैं, लेकिन ATTRSखंडों को सभी एक ही श्लोक से आना चाहिए, आप मिश्रण और मेल नहीं खा सकते हैं। आप ATTRSएक अलग श्लोक में सूचीबद्ध अन्य प्रकार के खंडों के साथ क्लॉस को मिला सकते हैं ।


1
क्या यह उत्तर अभी भी मान्य है? फ़िडलिंग की कोई राशि के तहत मैं स्क्रिप्ट को निष्पादित करने के लिए (और किसी फ़ाइल को स्पर्श करने के लिए) प्राप्त कर सकता हूं। यदि आप सबसे बुनियादी उदाहरण प्रदान कर सकते हैं जो किसी भी चीज को प्लग इन करने पर स्क्रिप्ट निष्पादित करता है , तो यह बहुत अच्छा होगा और हम वहां से काम कर सकते हैं।
Redsandro

@ रोदसन्द्रो मैं अपने udv विन्यास में इस नियम के रूपांतर हैं और वे काम कर रहे हैं। क्या आपने डिवाइस को प्लग इन और बैक इन या रन किया udevadm trigger? क्या आपका सिस्टम udev का उपयोग करता है? यदि आप किसी स्क्रिप्ट को चलाना चाहते हैं, जिसमें कुछ भी प्लग-इन है, तो सभी शर्तों (साथ क्लॉस ==) को हटा दें (हो सकता है कि सिंटैक्स के लिए एक शर्त की आवश्यकता हो, मुझे यकीन नहीं है; यदि यह करता है, तो उपयोग करें KERNEL=="*")।
गिलेस एसओ- बुराई को रोकना '

मैंने वह भी करने की कोशिश की, लेकिन जब से यह आपके लिए काम करता है, मुझे एक कदम याद आ रहा है। मैंने इस प्रश्न को यहां स्थानांतरित कर दिया है , इसलिए मैं उदाहरण कोड लिख सकता हूं।
Redsandro

शायद संबंधित है, मुझे लगता है कि स्क्रिप्ट कितनी देर तक चल सकती है, इसकी समय सीमा है। मेरा मानना ​​है कि यह बहुत कम है (जैसे 1 सेकंड या कुछ और)। यदि इससे अधिक समय लगता है, तो udv इसे मार देगा। आप स्क्रिप्ट को कुछ इस तरह से इस्तेमाल करके इसके आसपास काम कर सकते हैं atReactivated.net/writing_udev_rules.html
cheshirekow

बस इसे जोड़ने के लिए, पूर्णता के लिए, फ़ाइल को प्रत्यय की आवश्यकता होती है .rulesऔर निर्देशिका में फ़ाइलों को एक शाब्दिक क्रम में पढ़ा जाता है (सम्मेलन उन्हें आदेश देने के लिए संख्यात्मक उपसर्ग का उपयोग करता है), और वे नीचे हो सकते हैं /etc/, /usr/libया /run। अधिक के लिए, आरटीएफएम
स्टारफ्री

14

मैंने /lib/udev/rules.dडिस्क संबंधी नियमों के उदाहरणों पर ध्यान दिया । उबंटू प्रणाली पर एक नियम फ़ाइल पर्यावरण चर प्रदान करती है ID_FS_UUID_ENCजिसे आप स्वयं नियम फ़ाइलों में उपयोग कर सकते हैं।

इस प्रकार मैं के तहत एक कस्टम नियम फ़ाइल डाल दिया /etc/udev/rules.d/foodevice.rules। चूंकि यह एक संख्या के साथ उपसर्ग नहीं है, इसलिए इसे udv द्वारा अंतिम रूप से चलाया जाता है। Btw, udev डेमॉन /etc/udev/rules.dऐसे परिवर्तनों के लिए देखा जाता है, जिन्हें आपको फ़ाइल परिवर्तनों पर पुनरारंभ करने की आवश्यकता नहीं है।

की सामग्री /etc/udev/rules.d/foodevice.rulesहै:

ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
  RUN+="/usr/bin/sudo -u juser /home/juser/path/script.sh"

(यह एक नियम है - आपको ईएनवी क्लॉज के बाद नई लाइन को हटाना होगा क्योंकि udv में एक लाइन निरंतरता तंत्र नहीं है)

Udev द्वारा शुरू किया गया एक कार्यक्रम डेमॉन को अवरुद्ध करता है - इस प्रकार यह लंबे समय तक नहीं चलना चाहिए। मैंने इसे हल किया at- अर्थात वास्तविक कार्य करने की प्रक्रिया से अलग होकर:

$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now

1
आपको udevadm control --reload-rulesअपने वितरण के आधार पर, udv नियमों का उपयोग करने की आवश्यकता हो सकती है ।
user44038

1
इसके बजाय at nowमैं सुझाव देता हूं batch
मोनिका को बहाल करना - एम। श्रोडर

आपके पास न तो जब क्या करना है atऔर न ही batch? मैं के साथ एक एम्बेडेड वातावरण में हूँ बिजीबॉक्स
नत्थेनो

@natenho, आप उपयोग कर सकते हैं ~/path/mountcopystuff.sh &- atआदि का फायदा यह है कि आपको ईमेल सूचनाएं प्राप्त होने की स्थिति में कुछ गलत हो जाता है - लेकिन एक एम्बेडेड सिस्टम पर यह शायद ज्यादा दिलचस्पी नहीं रखता है।
मैक्सक्लेपजिग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.