ইউএসবি ডিভাইস প্লাগ-ইনের উপর কীভাবে কাস্টম স্ক্রিপ্টগুলি চালানো যায়?


41

দেবিয়ান / সেন্টোস / ফেডোরার মতো বর্তমান লিনাক্স ডিস্ট্রিবিউশনের অধীনে ইউএসবি ডিভাইস প্লাগ-ইন-এ স্বয়ংক্রিয়ভাবে কাস্টম স্ক্রিপ্টগুলি সম্পাদন করার জন্য অত্যাধুনিক পদ্ধতি কী?

উদাহরণস্বরূপ আপনি যদি কিছু ফাইল স্বয়ংক্রিয়ভাবে মাউন্ট / অনুলিপি করতে চান / তার ইউআইডি (বা ডিভাইস আইডি ইত্যাদি) এর উপর ভিত্তি করে কোনও ইউএসবি ভর স্টোরেজ ডিভাইসটি সঞ্চার করতে চান।

উত্তর:


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
এই উত্তর এখনও বৈধ? কোনও পরিমাণ ফিডিংয়ের অধীনে আমি স্ক্রিপ্টটি কার্যকর করতে (এবং কোনও ফাইল স্পর্শ করতে) পেতে পারি না। যদি আপনি এমন কিছু প্রাথমিক উদাহরণ প্রদান করতে পারেন যা কোনও স্ক্রিপ্ট কার্যকর করার সময় কোনও স্ক্রিপ্ট কার্যকর করে, তবে তা দুর্দান্ত হবে এবং আমরা সেখান থেকে কাজ করতে পারি।
রেডসান্দ্রো

@ রেডসান্দ্রো আমার উদেব কনফিগারেশনে এই নিয়মের বিভিন্নতা রয়েছে এবং তারা কাজ করছে। আপনি কি ডিভাইসটি প্লাগ আউট করে ফিরে এসেছেন, নাকি চালিয়েছেন udevadm trigger? আপনার সিস্টেমটি কি ইউদেব ব্যবহার করে? যদি কোনও প্লাগ ইন করা অবস্থায় আপনি কোনও স্ক্রিপ্ট চালাতে চান তবে সমস্ত শর্তগুলি (এর সাথে থাকা ধারাগুলি ==) সরিয়ে ফেলুন (সম্ভবত সিনট্যাক্সের একটি শর্ত প্রয়োজন, আমি নিশ্চিত নই; যদি তা হয় তবে এটি ব্যবহার করুন KERNEL=="*")।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

আমি এটিও চেষ্টা করেছিলাম, তবে যেহেতু এটি আপনার পক্ষে কার্যকর, তাই আমি অবশ্যই একটি পদক্ষেপ মিস করছি। আমি এই প্রশ্নটি এখানে সরিয়ে নিয়েছি, তাই উদাহরণ কোড লিখতে পারি।
রেডসান্দ্রো

সম্ভবত সম্পর্কিত, আমি মনে করি স্ক্রিপ্টটি কতক্ষণ চলতে পারে তার একটি সময়সীমা রয়েছে। আমি বিশ্বাস করি এটি খুব ছোট (যেমন 1 সেকেন্ড বা কিছু) something যদি এর থেকে বেশি সময় লাগে তবে উদেব এটি মেরে ফেলবে। স্ক্রিপ্টটির ব্যাকগ্রাউন্ড ব্যবহার করে আপনি এরকম কিছু দিয়ে কাজ করতে পারেন at। " পুনরায় সক্রিয়
রাইটিং_দেভ_রুলেস.ইচটিএমএল

কেবল এটিতে যুক্ত করার জন্য, সম্পূর্ণতার জন্য, ফাইলটির প্রত্যয় থাকা দরকার .rulesএবং ডিরেক্টরিতে থাকা ফাইলগুলি একটি সংক্ষিপ্ত আকারে পড়তে হবে (কনভেনশনটি তাদের অর্ডার করার জন্য সংখ্যার উপসর্গ ব্যবহার করে), এবং সেগুলি নীচে /etc/, /usr/libবা হতে পারে /run। আরও জন্য, আরটিএফএম
স্টারফ্রি

14

আমি /lib/udev/rules.dডিস্ক সম্পর্কিত নিয়মের উদাহরণ অনুসন্ধান করেছি। উবুন্টু সিস্টেমে একটি নিয়ম ফাইল পরিবেশের পরিবর্তনশীল সরবরাহ করে ID_FS_UUID_ENCযা আপনি নিজের নিয়ম ফাইলগুলিতে ব্যবহার করতে পারেন।

এইভাবে আমি একটি কাস্টম রুল ফাইলের নীচে রাখি /etc/udev/rules.d/foodevice.rules। যেহেতু এটি কোনও সংখ্যার সাথে উপসর্গীকৃত নয় তাই এটি সর্বশেষে উদেব দ্বারা চালিত হয়। বিটিডব্লিউ, উদেব ডেমন /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"

(এটি একটি নিয়ম - ENV শর্তের পরে আপনাকে নতুন লাইনটি সরিয়ে ফেলতে হবে কারণ উদেবের কোনও লাইনের ধারাবাহিকতা ব্যবস্থা নেই)

উদেব দ্বারা শুরু করা একটি প্রোগ্রাম ডেমনকে ব্লক করে - সুতরাং এটি দীর্ঘ সময় চালানো উচিত নয়। আমি এর মাধ্যমে সমাধান করেছি at- অর্থাত্ প্রকৃত কাজটি করে প্রক্রিয়াটি বিচ্ছিন্ন করার মাধ্যমে:

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

1
udevadm control --reload-rulesআপনার বিতরণের উপর নির্ভর করে আপনাকে ইউদেব বিধিগুলি পুনরায় লোড করার দরকার হতে পারে ।
ব্যবহারকারী44038

1
পরিবর্তে at nowআমার পরামর্শ batch
মনিকা পুনরায় ইনস্টল করুন - এম। শ্রাইডার

আপনার না atথাকলেও batchকী করবেন? আমি ব্যস্তবক্স সহ এম্বেড পরিবেশে আছি ।
নাটেনহো

@ নাটেনহো, আপনি ব্যবহার করতে পারেন ~/path/mountcopystuff.sh &- atইত্যাদির সুবিধা রয়েছে যে কোনও কিছু ভুল হয়ে গেলে আপনি ইমেল বিজ্ঞপ্তিগুলি পান - তবে এম্বেডেড সিস্টেমে এটি সম্ভবত খুব বেশি আগ্রহী নয়।
ম্যাক্সচলেপজিগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.