ইউএসবি সন্নিবেশে স্ক্রিপ্ট চালাতে udev নিয়ম ব্যবহার করা


17

আমি যখনই কোনও ইউএসবি ডিভাইস প্লাগ ইন করি ততবার চালানোর জন্য একটি স্ক্রিপ্ট সেট আপ করার চেষ্টা করছি। আমি ফাইল /etc/udev/rules.d/90-local.rules তৈরি করেছি এবং নিম্নলিখিত নিয়মটি যুক্ত করেছি:

ACTION=="add", SUBSYSTEM=="usb", KERNEL=="sd*", SYSFS{model}=="Cruzer*", RUN+="sh /home/jesse/Documents/Scripts/cruzer.sh"

সমস্যাটি হ'ল যখন ড্রাইভটি সংযুক্ত থাকে তখন কিছুই ঘটে না। স্ক্রিপ্টটি ডিবাগিংয়ের উদ্দেশ্যে বিজ্ঞপ্তি-প্রেরণ সহ একটি বিজ্ঞপ্তি প্রেরণে অনিয়মিত হয় যা ইনস্টল করা আছে এবং টার্মিনাল থেকে সূক্ষ্মভাবে কাজ করে।

স্ক্রিপ্টের পথটি সঠিক, কারণ আমি টার্মিনালে কোনও ঝামেলা ছাড়াই সেই সঠিক কমান্ডটি চালিয়েছি run


আপনার অ্যান্টিভাইরাস চলছে? এটি এমন আচরণ যা কোনও সংখ্যক AV প্রোগ্রাম থেকে ক্রিয়াকলাপ ঘটায়। যদিও আমি একটি সতর্কতা আশা করব, আপনি যদি বিজ্ঞপ্তিগুলি অক্ষম করে থাকেন তবে লগ ছাড়া আপনি এটি দেখতে পাবেন না। আমি ইন্টারনেটটি অক্ষম করার পরামর্শ দেব, তারপরে আপনার এভি প্রোগ্রামটি আবার চেষ্টা করে দেখুন।
জেনবাইক

কোনও এভি ইনস্টল না করে উবুন্টু 11.04 চালাচ্ছেন।
JTeK

@ জেনবাইক: কাস্টম ওদেব বিধিগুলি যুক্ত করার ফলে অ্যান্টিভাইরাস প্রোগ্রামটি কেন ট্রিগার হবে?
user1686

ডিভাইস সন্নিবেশে যে কোনও স্ক্রিপ্ট শুরু করার ফলে অপসারণযোগ্য ডিভাইসগুলি স্ক্যান করতে কোনও এভি সেটটিতে মিথ্যা ইতিবাচক কারণ হতে পারে। কেন, আমি জানি না। থাম্বড্রাইভ এবং আভিরা এভিতে ফ্যাক্টরি ইনস্টল করা স্ক্রিপ্টটি আমার সাথে ঘটেছিল, আমি জানি।
জেনবাইক

উত্তর:


6

আমারও একই সমস্যা ছিল। এটি আমার পক্ষে কাজ করেছে:

আপনার স্ক্রিপ্টটি অনুলিপি করার চেষ্টা করুন /usr/local/binএবং আপনার .rulesফাইলে ডিরেক্টরিটি পরিবর্তন করুন।

এছাড়াও, আমি জানি না এসওয়াইএসএফস কী, তবে আমি এটিটিআর বৈশিষ্ট্যগুলি ব্যবহার করতে পছন্দ করব।

নিম্নলিখিত লাইনটি আমার .rulesফাইলের বিষয়বস্তু :

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1", ATTRS{vendor}=="SanDisk ", RUN+="/usr/local/bin/backup.sh"

ATTRS{vendor}=="SanDisk "অংশ মানে যে শুধুমাত্র আছে Sandiskসনাক্ত করা হবে?
ব্লেড 19899

7

notify-send আপনার ডিবিস সেশন বাসে অ্যাক্সেস প্রয়োজন, যা এটি দুটি কারণে হতে পারে না:

  • অধিবেশন সম্পর্কে কোন তথ্য। যখন ইউদেব দ্বারা শুরু করা হয়, আপনার স্ক্রিপ্টটি আপনি কোথায় লগ ইন করেছেন বা আপনি যদি লগইন করেছেন সে সম্পর্কে কিছুই জানে না । এক্স 11 সহ একাধিক আসনটি এখনও জটিল, তবে ব্যবহারকারী স্যুইচিং এক্স 11 এবং কনসোল উভয় সেশনের জন্যই কাজ করে। অনেক লোক এসএসএইচ, ভিএনসি এবং এনএক্স নেটওয়ার্কের মাধ্যমেও ব্যবহার করে।

    ( DISPLAY=:0সময়ের অর্ধেক সময় কাজ করবে তবে এটি এখনও অনুমান করা যায়))

  • ডিবিস নীতি দ্বারা অস্বীকৃত। এমনকি যদি আপনার স্ক্রিপ্টটি কোনওভাবে আপনার এক্স 11 সেশনটি আবিষ্কার করে তবে এটি rootআপনার ব্যবহারকারীর অ্যাকাউন্টের পরিবর্তে স্ক্রিপ্টটি চালিত হওয়ার কারণে বিজ্ঞপ্তিগুলি প্রেরণ করতে সক্ষম হবে না ।


2
for LINE in $(find /proc/ -maxdepth 2 -name environ -exec grep -z "^DBUS_SESSION_BUS_ADDRESS" {} \; | sort -uz | tr '\0' '\n'); do eval $LINE ... done;বিজ্ঞপ্তি-প্রেরণ দ্বারা আমার জন্য কৌতুকটি করেছেন
mlt

1

আপনি এর পরিবর্তে বিক্রেতা এবং পণ্য আইডি দ্বারা ডিভাইসটি মেলানোর চেষ্টা করতে পারেন। নিম্নলিখিত কাস্টম বিধি আমার জন্য কাজ করে:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0763", ATTR{idProduct}=="019b", RUN+="/usr/bin/aconnect 20 128"

ডিভাইস সংযুক্ত করার পরে আপনি lsusb আউটপুট বা dmesg এ idVendor এবং idPr Prodct দেখতে পাবেন।


আমি এটি চেষ্টা করেছিলাম, এবং এটিও কার্যকর হয় নি ... (এটিটিআর {আইডিপ্রডাক্ট} == "5530") ... বিক্রেতাও কি প্রয়োজনীয়? আমি এমনটি
ভাবব

সেক্ষেত্রে সমস্যাটি নিজেই স্ক্রিপ্ট নিয়ে থাকতে পারে। উদাহরণস্বরূপ এটি AT PATH env ভেরিয়েবলের উপর নির্ভর করতে পারে। পরীক্ষার জন্য এটিকে এক্সপোর্ট PATH = '' এর মতো চালানোর চেষ্টা করুন; /home/jesse/Documents/Scripts/cruzer.sh
Aleh

1

আলেহের জবাব অনুসরণ করা: আপনি যদি removeইভেন্টগুলিও নিরীক্ষণ করতে চান তবে আপনাকে পরিবেশগত পরিবর্তনশীল নামের জন্য অনুসন্ধান করতে হবে ID_SERIAL। এটিতে আন্ডারস্কোর দ্বারা পৃথকীত বিক্রেতা এবং পণ্য আইডি রয়েছে:

ACTION=="add|remove", SUBSYSTEM=="usb", ENV{ID_SERIAL}=="0763_019b" RUN+="/usr/bin/aconnect 20 128"

নিয়মটি এখন খুব ছোট।


0

সম্ভবত, sleepইউএসবি ডিভাইসটিকে "বসতি স্থাপন" করার সুযোগ দেওয়ার জন্য, আপনাকে স্ক্রিপ্টের মধ্যে একটি যোগ করার প্রয়োজন হতে পারে ? উদাহরণস্বরূপ, ইউএসবি 3 জি মডেমগুলি, কার্নেল দ্বারা লাথি মেরে চালিত হয়ে চালানোর জন্য / dev / ttyUSB পেতে মোড স্যুইচিং।


0

SUBSYSTEMS = "ইউএসবি" দিয়ে SUBSYSTEM = "ইউএসবি" প্রতিস্থাপন করার চেষ্টা করুন


না, SUBSYSTEM=="usb"ঠিক আছে।
krlMLr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.