যে কোনও ইউএসবি স্টোরেজ ডিভাইসের সাথে ম্যাচ করার জন্য উদেব নিয়ম


10

আমি কেবল udevকোনও নির্দিষ্টটির জন্য নয়, প্লাগ ইন করা কোনও ইউএসবি ভর-স্টোরেজ ডিভাইসের নিয়ম কীভাবে প্রয়োগ করতে পারি ? কি পরিবর্তন করা উচিত idVendor, এবং idProduct?

 ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="0204", SYSFS{idProduct}=="6025",
     RUN+="/home/workspace/bash_script.sh"

উত্তর:


7

একটি স্টোরেজ ডিভাইস blockসাব-সিস্টেমে রয়েছে, সুতরাং আপনি SUBSYSTEM=="block"আপনার নিয়মে চাইবেন:

ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
    RUN+="/path/to/script"

আপনি যদি ব্যবহার করেন তবে প্রতিবার কোনও USB স্টোরেজ ডিভাইস যুক্ত হওয়ার পরে systemdআপনি systemdইউনিট চালাতে পারেন । ইউনিট ফাইল তৈরি করুন, যেমন /etc/systemd/system/my-usb-rule.service:

[Service]
Type=oneshot
ExecStart=/path/to/script

এবং নিয়ম, যেমন /etc/udev/rules.d/85-my-usb-rule.rules:

ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
    ENV{SYSTEMD_WANTS}="my-usb-rule.service"

এখন কোনও ইউএসবি স্টোরেজ ডিভাইস অ্যাড ইভেন্টে udevট্রিগার করবে my-usb-rule.service(যা পরিবর্তে আপনার স্ক্রিপ্টটি কার্যকর করবে) ।


আপনি নিয়ম / ইউনিটগুলি সম্পাদনা করার পরে কনফিগারেশনটি পুনরায় লোড করতে ভুলবেন না:

udevadm control --reload
systemctl daemon-reload

আমি যখন একটি ইউএসবি ভর স্টোরেজ যুক্ত করি তখন আমি এতে থাকা পার্টিশন (গুলি) তে কাজ করতে চাই। ওদেব স্তরে আমি 4 টি সাবসিস্টেমের ইভেন্টগুলি দেখতে পাচ্ছি: ইউএসবি, এসসিসি, বিডি এবং ব্লক (এই ক্রমে)। প্রথম 3 টি ব্যবহারযোগ্য নয়, কারণ পার্টিশনটি এখনও জানা যায়নি। ব্লক ইভেন্টটিতে আইডি_বিউস = এসপিএসি রয়েছে, এটি আপনার কোড উদাহরণ হিসাবে ইউএসবি নয়। আমি ব্লক ইভেন্টে কোনও উপযুক্ত বৈশিষ্ট্য দেখতে পাচ্ছি না, এটি আমাকে ইউএসবি ভর স্টোরেজ কিনা তা বলবে। (তদন্তে উদেবাডম মনিটর এবং উদেবডেম তথ্য ব্যবহার করে)। যদি না আমি বিশ্বাস করতে পারি যে ID_BUS = scsi যুক্তিসঙ্গতভাবে ইউএসবি ভর স্টোরেজ ব্যতীত আর কিছু হতে পারে না।
উওয়ে গিউডার 15'53

@ উয়েউইউডার - আপনার প্রোগ্রামের পক্ষে যুক্তি হিসাবে ডিভাইসের নাম ব্যবহার করতে এবং পার্টিশনের উপর ভিত্তি করে এই আইনটির ভিত্তিতে আপনাকে কিছুই থামছে না ...
ডোন_ক্রিসটি

ঠিক আছে, ইউএসবি ইভেন্টগুলিতে ডিভাইসের নামটি / dev / bus / usb / 002/040 এর মতো। আমার প্রোগ্রামে এটি দিয়ে কী করবেন তা নিশ্চিত নই। ব্লক ইভেন্টগুলিতে ডিভাইসের নামটি / dev / sdb বা / dev / sdb1 এর মতো কিছু। এটাই আমি চাই, তবে এখন আমি ID_BUS = scsi সমস্যাটিতে ফিরে এসেছি। আমি আরও কিছুটা এগিয়ে পেয়েছি: 80-udisk2 এর একটি বিধি ফাইল রয়েছে, যা আইডি_ডিআরআইভিতে একটি সম্পত্তি যুক্ত করে। এটি কতটা দৃ is় তা নিশ্চিত নয়, তালিকাভুক্ত খুব কম বিক্রেতাদের মনে হচ্ছে seem আমার নিয়ম ফাইলটিকে 70- * বলা হয়েছিল, সুতরাং প্রত্যাশার সাথে আমার / ডেভ / এসডিবি মেলে না। অদ্ভুতভাবে যথেষ্ট / ডিভ / এসডিবি 1 মেলে, যদিও আমার নিয়মটি আগে চলে runs
উওয়ে গিউডার

1
আহ আমি কেবল লক্ষ্য করছি মূল প্রশ্নটি ছিল কোনও ইউএসবি ভর স্টোরেজ ড্রাইভ। এটি নিয়মের সাথে কাজ করা উচিত SUBSYSTEM=="block", SUBSYSTEMS=="usb"( এস এর সাথে পার্থক্যটি নোট করুন )। আমি সন্দেহ করি যে এটি সর্বদা ENV{ID_BUS}=="usb"আসল উত্তরে কাজ করতে পারে, কারণ আমি এখানে মান স্ক্সি দেখি। তবে আমি প্রাথমিকভাবে জিজ্ঞাসা করা থেকে কিছুটা পৃথক সমস্যা নিয়ে কাজ করছি, আমি কোনও ইউএসবি স্টিক (পেনড্রাইভ) চাই, তবে কোনও বাহ্যিক ড্রাইভ নেই।
উওয়ে গিউডার 20

1
আসলে বাজে সত্য সত্য যে ENV{ID_BUS}সমস্ত সিস্টেমে মান এক হয় না। গতকাল আমি udev দ্বারা 210 (আমি বিশ্বাস করি। এখন পরীক্ষা করা যাবে না কারণ মেশিন ইন্টারনেটে নয়) সঙ্গে একটি পুরোনো সিস্টেমে কাজ ছিল আছে মান ছিল SCSI । এখন, আমি 228 ইউদেব সহ নতুন মেশিনে রয়েছি এবং মানটি ইউএসবি । একই ইউএসবি স্টিকের জন্য, আমি এটি আমার সাথে বহন করছি। (নিশ্চিত যে ইউদেব সংস্করণটি এখানে প্রাসঙ্গিক ফ্যাক্টর কিনা, কার্নেল বা udev নিয়ম ইনস্টল করে অন্য কোনও প্যাকেজও হতে পারে, e, g, udisks2) স্টিল SUBSYSTEM=="block", SUBSYSTEMS=="usb"(নোট এস ) পোর্টেবল এবং নিরাপদ হতে পারে।
উয়ে গিউডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.