जब मैंने USB डिवाइस को प्लग या अनप्लग किया तब ऑटोरुन एक स्क्रिप्ट


22

माउंट / प्लगइन या अनमाउंट / USB डिवाइस को अनप्लग करने के बाद मैं स्वचालित रूप से एक स्क्रिप्ट चलाने के लिए क्या कर सकता हूं?


2
@ एक्सएक्सएक्सएक्सएक्सएक्स: जब तक कि कटलफिश के पास उबंटू 12.10 के लिए रिलीज़ संस्करण नहीं है, तब तक कोई विकल्प नहीं है
रादू रिलडीनू

2
संभव डुप्लिकेट: askubuntu.com/questions/25071/…
Glutanimate

@Glutanimate: यह सवाल एक विशिष्ट USB फ्लैश-ड्राइव के बारे में है, लेकिन मैंने एक USB डिवाइस के बारे में पूछा, आम तौर पर
Radu Rădeanu

@Glutanimate: मान लें कि उस प्रश्न के उत्तर मददगार हैं, वैसे भी इसका जवाब नहीं है कि मैंने एक USB डिवाइस को अनप्लग करने के बाद स्वचालित रूप से स्क्रिप्ट को कैसे चलाया जाए ।
रादु राईडेनु

1
"यह कहने दें कि उस प्रश्न के उत्तर सहायक हैं, वैसे भी इसका जवाब नहीं है कि मैं किसी USB डिवाइस को अनप्लग करने के बाद स्वचालित रूप से कैसे चला सकता हूं" मैं अनुमान लगा रहा हूं कि यदि आप "ACTION = 'जोड़ें'" से "ACTION =" 'निकालें' ", जो शुरू करने के लिए एक अच्छी जगह होगी।
Blujay

जवाबों:


17

MinimusHeximus और धागे के संबंधित योगदानकर्ताओं के लिए धन्यवाद उन्होंने अपनी टिप्पणी में मेरे समान प्रश्न का उल्लेख किया, मुझे लगता है कि मैं अब आपको निम्नलिखित उत्तर दे सकता हूं।

आपको इस तरह के USB डिवाइस के लिए 5 (पांच) फाइलों की आवश्यकता होगी, बस संबंधित मानों को भरना <fortheseparts>:

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

टिप्पणियाँ:

  1. आप मान कैप्चर कर सकते हैं <yourvendorid>और <yourproductid>आदेश दर्ज करके lsusbटर्मिनल में - जब अपने USB डिवाइस प्लग किया गया है - जो, अपने सभी USB उपकरणों वर्तमान में उपलब्ध सूची जाएगा की तरह Bus 003 Device 002: ID 8087:07da Intel Corp.है, जहां 8087 है VendorID और 07da है ProductID
  2. और <yourdevice>कोई भी मनमाना नाम हो सकता है जिसे आप अपने USB डिवाइस के लिए चुन सकते हैं, उदाहरण के लिए, मैंने अपने USB कीबोर्ड के लिए ऐसी फाइलें बनाते समय जेनेरिक नाम " कीबोर्ड " का उपयोग करने के लिए चुना, जिसे जब भी प्लग किया जाता है एक अलग कीबोर्ड लेआउट को लागू करने की आवश्यकता होती है।
  3. कुछ परिदृश्यों में, यह ACTION=="remove"udv रूल्स फ़ाइल में लाइन का उपयोग करने के लिए आवश्यक नहीं हो सकता है , और इसलिए संबंधित 2 (दो) " out" फाइलें, जब आपको कुछ भी करने की आवश्यकता नहीं होती है (उदाहरण के लिए डिवाइस में किए गए बदलाव को उल्टा करना) प्लग इन होने के बाद डिवाइस को प्लग आउट किया जाता है।

यह मेरे नौसिखिए दृष्टिकोण से गलत लगता है। क्या उन खंडों को एक ही पंक्ति में नहीं होना चाहिए?
नफ

1
यह काम करता है: ACTION == "जोड़ें", ATTRS {idVendor} == "...", ATTRS {idProduct} == "...", ENV {XAUTHORITY} = "/ घर / </ b> </ xauthority"। , ENV {DISPLAY} = ": 0", RUN + = "<स्क्रिप्ट>"
nafg

@nafg: मेरे नौसिखिए दृष्टिकोण से, अगर आप सभी को एक पंक्ति में (अल्पविराम के रूप में विभाजक के रूप में) यूडीवी नियमों की फाइल में डालते हैं, तो इससे कोई फर्क नहीं पड़ना चाहिए, लेकिन मैं देख रहा हूं कि आपने udv नियमों में XAUTHORITY और DISPLPL पैरामीटर को जोड़ा है, जो आपके लिए या किसी और के लिए काम कर सकता है, जिस स्थिति में मुझे आश्चर्य होता है कि क्या वे अब नीचे दो स्क्रिप्ट फ़ाइलों में आवश्यक नहीं हैं।
सादी

1
हाँ, यह बात है, अब आपको मध्यवर्ती स्क्रिप्ट (पृष्ठभूमि में वास्तविक स्क्रिप्ट को छोड़कर) की आवश्यकता नहीं है क्योंकि udv वातावरण सेट करने देता है। Udv डॉक्स से भी मेरी समझ यह है कि प्रत्येक लाइन एक स्वतंत्र नियम है, किसी फ़ाइल में लाइनें संयुक्त नहीं हैं।
nafg

@nafg: आपके बहुमूल्य योगदान के लिए धन्यवाद। मैंने इन वातावरणों को udv शासन में स्थानांतरित कर दिया और यह मेरे लिए भी काम आया। इसके अलावा, मैंने स्क्रिप्ट्स को / usr / लोकल / बिन में स्थानांतरित कर दिया क्योंकि मैं समस्याओं को सामना करना शुरू कर दिया था क्योंकि मैंने अपने / घर के फ़ोल्डर को अपने आप एक अलग विभाजन पर स्थानांतरित कर दिया था (शायद इसलिए कि यह पहले माउंट नहीं किया गया था)। ऐसा लगता है कि udv नियमों में लाइन ब्रेक का उपयोग मेरे सिस्टम (Ubuntu 13.04 64 बिट) में कम से कम कोई समस्या पैदा नहीं करता है और मैंने इसे पठनीयता के लिए पसंद किया है।
सादी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.