যখন কোনও নির্দিষ্ট ফ্ল্যাশ-ড্রাইভ মাউন্ট হয় তখন স্ক্রিপ্টটি কীভাবে চালানো যায়?


46

কোনও নির্দিষ্ট ইউএসবি ডিভাইস মাউন্ট করা থাকলে স্ক্রিপ্ট চালানোর কোনও উপায় আছে কি?

আমি আমার ভিডিওগুলিকে পৃথক ইউএসবিতে রাখি এবং একটি স্ক্রিপ্ট চালাতে চাই যা ইউএসবি ডিভাইসে ভিডিও ফোল্ডারটি হোম ফোল্ডারের একটিতে মাউন্ট করবে।

উত্তর:


31

সিস্টেমডের সাথে এখন অনেক সুন্দর সমাধান রয়েছে solution আপনি এমন একটি পরিষেবা তৈরি করেন যা নির্ভর করে এবং আপনার মিডিয়া দ্বারা চাইছে যেমন:/etc/systemd/system/your.service

[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount

[Service]
ExecStart=/home/you/bin/triggerScript.sh

[Install]
WantedBy=media-YourMediaLabel.mount

তারপরে আপনাকে পরিষেবাটি চালু / সক্ষম করতে হবে:
sudo systemctl start your.service
sudo systemctl enable your.service

মাউন্ট পরে, সিস্টেমড আপনার ট্রিগার স্ক্রিপ্ট ফায়ার করে। Udev নিয়মের সুবিধাটি হ'ল স্ক্রিপ্টটি সত্যই মাউন্টের পরে জ্বলতে থাকে, সিস্টেম ডিভাইস যুক্ত করার পরে নয়।

কেস ব্যবহার করুন : আমার একটি ক্রিপ্টযুক্ত পার্টিশন রয়েছে যা আমি স্বয়ংক্রিয়ভাবে ব্যাকআপ নিতে চাই। ডিভাইসটি যুক্ত করার পরে আমাকে পাসওয়ার্ডটি টাইপ করতে হবে। যদি আমি ব্যাকআপ স্ক্রিপ্টটি ওদেবকে হুক করে দিয়েছি, আমি পাসওয়ার্ড টাইপ করার সময় স্ক্রিপ্টটি চালানোর চেষ্টা করে যা ব্যর্থ হবে।

রিসোর্স: উদেবের সাথে স্ক্রিপ্টিং

দ্রষ্টব্য: আপনি এর সাথে আপনার ডিভাইস ইউনিটটি খুঁজে পেতে পারেন:systemctl list-units -t mount


আমি আশা করি শীঘ্রই এপ্রিল 2016 আসবে। পরবর্তী উবুন্টু এলটিএসে সিস্টেমড সক্ষম করা হবে। উপরের চমৎকার সমাধানটিকে আফাইকের প্রয়োজন উবুন্টু 15.04 বা আরও নতুন।
guettli

ওহ, আমি ভেবেছিলাম সিস্টেমড ইতিমধ্যে উবুন্টুতে আছে। আমি আসলে
ডিবিয়ান

@ সুমিড আমি যদি এটি ~ / .config / systemd এর আওতায় রাখতে চাই তবে এটি কি কাজ করবে?
খুরশিদ আলম

4
গ্রেট! দেবিয়ান জেসিতে পরীক্ষিত। আপনার পরিষেবা সক্ষম করতে ভুলবেন না systemctl enable your.service। স্ক্রিপ্ট ফাইলটি কার্যকর হতে হবে।
করনি

1
আমার জন্য, এটি ব্যর্থ। যখন আমি পরিষেবাটি শুরু করার চেষ্টা করি তখন এটি অভিযোগ করে "ইউনিট মিডিয়া-বিবি.মাউন্টটি পাওয়া যায় নি"। এটিতে কোনও অদ্ভুত অক্ষর নেই এবং এটি খুব দীর্ঘ বা এর মতো কিছু নয় তা নিশ্চিত করার জন্য আমি আমার থাম্ব ড্রাইভের (FAT32) এফএসকে "বিবি" বলেছিলাম। আমি চেষ্টা Requires=, After=এবং WantedBy=উভয় সঙ্গে লাইন media-bb.mountএবং media-BB.mountকারণ আমাকে নটিলাস শো হিসাবে "বিবি", নয় "BB" ভলিউম। মূলধন ব্যতীত একই ত্রুটি বার্তা। কোনো সমস্যা? আমার কি কোনওভাবে সেই media-<something>.mountপরিষেবাটি তৈরি করতে হবে ?
ইউটিএফ-8

29

আপনার ডিভাইসটি সন্ধান করে শুরু করুন lsusb। আইডি নোট করুন (উদাঃ 0a81:0101)

এর /etc/udev/rules.d/মাধ্যমে একটি নতুন udev নিয়ম ফাইল তৈরি করুন sudoedit /etc/udev/rules.d/100-mount-videos.rulesএবং সেখানে এইভাবে একটি নতুন নিয়ম চূড়ান্ত করুন:

ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"

আমি কীভাবে আইডি ব্যবহার করেছি তা নোট করুন lsusb

তারপরে কাজটি করার জন্য আপনাকে কেবল স্ক্রিপ্টটি লিখতে হবে। একটি সাধারণ মাউন্ট কমান্ড কাজ করা উচিত। sleep 5ফাইল সিস্টেমটি শুরু করার জন্য অপেক্ষা করতে আপনার সেখানে কমান্ডের প্রয়োজন হতে পারে (যদি আপনি মূল মাউন্টিংয়ের জন্য জিনোম ছেড়ে যান - তবে আপনি প্রথমে এটি মাউন্ট করতে পারেন এবং তারপরে আপনার ঘুমের দরকার পড়বে না)।

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

অলি থেকে জবাব দিন: এটি এর মতো মোড়ানো: https://askubuntu.com/a/106359/449


4
আমি "su your_user -c" দিয়ে "RUN" কমান্ডের উপসর্গের পরামর্শ দিতে পারি যাতে স্ক্রিপ্টটি রুট সুবিধাগুলি সহ চলমান না।
কিস কুক

3
@ কিস এখানে লক্ষ্যটি বাড়ছে তাই মূলের গোপনীয়তা রাখা ভাল ধারণা হতে পারে। সম্ভবত স্ক্রিপ্টটি ব্যবহারকারীর বাড়িতে রাখার পরিবর্তে আপনি এটিকে /root/বা এমন কোনও জায়গায় রাখুন যেখানে কেবল মূল এটির সম্পাদনা করতে পারে।
অলি

2
এটি প্রশ্নের উত্তর দেয় না। প্রশ্নটি জিজ্ঞাসা করা হয় যখন কোনও ইউএসবি ড্রাইভ মাউন্ট করা হয় তখন স্ক্রিপ্টটি কীভাবে চালানো যায় । এই উত্তরটি বলছে কীভাবে কোনও স্ক্রিপ্ট চালানো যায় যা একটি ইউএসবি ড্রাইভ সন্নিবেশ করা হয় তা মাউন্ট করে না । পার্থক্যটি আমার কাছে গুরুত্বপূর্ণ কারণ আমার কাছে এমন স্ক্রিপ্ট রয়েছে (ডিজিটাল ক্যামেরার জন্য); স্ক্রিপ্ট ব্যতীত, ড্রাইভটি সন্নিবেশ (ব্যবহারকারী সেটিংসের উপর নির্ভর করে) বসানো হতে পারে এবং এটি তখনই চালিত করা হবে যখন আমি কিছু করতে চাই (চিত্রগুলি অনুলিপি করুন)। সুতরাং আমার স্ক্রিপ্ট (যা ড্রাইভ যুক্ত হওয়ার সাথে সাথে চালিত হয়) প্রায়শই ভুল সময়ে চালিত হয়।
পোস্ট


এটি অর্জনের জন্য অবিশ্বাস্যভাবে নির্দিষ্ট (ভঙ্গুর) উপায়। আধুনিক ডিস্ট্রো এর আরো প্রযোজ্য @sumid উত্তর ব্যবহার systemd
MrMesees

8

এটিটিআরএস {আইডিভেন্ডার} এবং এটিটিআরএস {আইডিপ্রডাক্ট for (উবুন্টু 12.04 এ পরীক্ষিত) এর মান পাওয়ার আরেকটি উপায় হ'ল:

  1. আপনার ইউএসবি কোথায় লাগানো হয়েছে তা সন্ধান করুন:

    $ mount | grep /dev/sd*
    

    এটি নিম্নলিখিত মত কিছু দেখায়:

    /dev/sdb on /media/SOMEDIR type vfat ...
    
  2. ডিভাইসটির তথ্য পেতে udevadm ব্যবহার করুন:

    udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
    

    আউটপুটটি এমন কিছু হওয়া উচিত:

    E: ID_MODEL_ID=001a
    E: ID_VENDOR_ID=002b
    
  3. এখন এটিটিআরএস {আইডিপ্রডাক্ট for এর জন্য মডেল আইডি এবং এটিটিআরএস {আইডিভেন্ডার for এর জন্য বিক্রেতার আইডি ব্যবহার করুন

    ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
    

1

নটিলাসে সম্পাদনা> পছন্দসমূহ> মিডিয়াতে আপনি "অন্যান্য ক্রিয়া" এবং "কস্টম কমান্ড" এর চেয়ে বেছে নিতে পারেন। বিভিন্ন ধরণের মিডিয়া কার্যকর করার জন্য। ততক্ষণে ইউএসবি ড্রাইভটি ইতিমধ্যে মাউন্ট করা হয়েছে, তবে আমি মনে করি আপনি এখনও এটি (কস্টম কমান্ড সহ) যে ফোল্ডারে ড্রাইভটি উপস্থিত হতে চান তার সাথে যুক্ত করতে পারেন u এটি ইউদেব ব্যবহারের চেয়ে সহজ বা ভাল কিনা তা আমি বলতে পারলাম না।


কমান্ড একটি পোশাক পরেন না? বা একটি পোশাক?
এরজালো 18

1

আপনি যদি নিজের ফাইল ম্যানেজারের (নটিলাস, কনকয়েরার, জিনোম, ইত্যাদি) আপনার ডিভাইসটিকে মাউন্ট এবং আনমাউন্ট করার নিয়ন্ত্রণের সাথে হস্তক্ষেপ না করতে চান, তবে আমি উদেব রুটে না যাওয়ার পরামর্শ দিই।

পরিবর্তে, যদি আপনার সিস্টেমটি ইউডিস্ক ব্যবহার করে (প্রায় সবগুলি করে) তবে ইউডিস্কস-আঠালো ব্যবহার করুন।

ইনস্টল করার পরে, ঠিক ~/.udisks-glue.confআপনার হোম ডিরেক্টরিতে একটি কনফিগার ফাইল তৈরি করুন ।

আমার নিম্নলিখিত উদাহরণটি এসডি-কার্ডে প্লাগ ইন করার সময় আমার ক্যামেরায় জিপিএস-সহায়তা ডেটা আপডেট করে।

filter BT16EXTREME {
  optical = false
  partition_table = false
  usage = filesystem
  label = BT16EXTREME
}
match BT16EXTREME {
  post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}

এরপরে নিশ্চিত হয়ে নিন যে আপনি বুট করার সময় বা লগ ইন করার সময় ইউডিস্কস-আঠা শুরু হয়। অর্থাৎ জিনোমের স্টার্টআপ অ্যাপ্লিকেশনগুলির মাধ্যমে


1
Udev2 :-( সমর্থন করে না


0

@ সামিদের উত্তরের একটি সমস্যা আছে। আপনার পরিষেবাটি শুরু করা উচিত নয় । আপনার কেবল এটি সক্ষম করা দরকার।

ফাইল: /etc/systemd/system/your.service

[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount

[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh

[Install]
WantedBy=media-YourMediaLabel.mount

তারপরে পরিষেবাটি সক্ষম করুন:

sudo systemctl enable your.service

এখানেই শেষ.

দ্রষ্টব্য: আপনি এটির সাথে আপনার মধ্যস্থ লেবেলটি খুঁজে পেতে পারেন:sudo systemctl list-units -t mount

দ্রষ্টব্য 2: পরিষেবাটি যদি কোনওভাবে ব্যর্থ হয় (উদাহরণস্বরূপ, স্ক্রিপ্টটি কার্যকরযোগ্য নয়), আপনি <old_mount_point_name>1পরবর্তী সময় ইউএসবি ডিভাইসটি মাউন্ট করার সময় আপনার মাউন্ট পয়েন্টটি পরিবর্তিত হবে । এই সমস্যাটি সমাধান করার জন্য, আপনাকে কেবল কার্যকর করতে হবেsudo systemctl reset-failed

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