কোনও সেশনে লগ-ইন করা ব্যবহারকারীর জন্য কোনওভাবেই ইউডিইভি জেনিটিকে ট্রিগার করতে পারে?


0

আমি একটি zenityডায়ালগ পপআপ চাই যখন আমি একটি নির্দিষ্ট বাহ্যিক ড্রাইভ সংযুক্ত করি, তবে আমি কোনও ব্যাকআপ চালাতে চাই কিনা তা জানতে চাই।

দুর্ভাগ্যক্রমে, আমি ইউডিইভি নিয়ম সিনট্যাক্স নিয়ে সমস্যায় পড়ছি। আমি এই নিয়ম পেয়েছি /etc/udev/rules.d/test.rules:

ACTION=="add", ATTRS{manufacturer}=="Western Digital", ATTRS{idVendor}=="1058", ATTRS{idProduct}=="1140", RUN+="/usr/local/bin/test.sh"

এটি বেশ প্রাথমিক, কিন্তু:

  1. এটি একবারের স্থলে এক ডজন বার ট্রিগার হয়।
  2. এটি zenityযখন test.shযায় তখন 'কথা বলতে পারে না' sudo -Hu <username> zenity --warning --text="Just some random text for now."কারণ ইউদেব সিস্টেমে দূরে সরে যায় এবং উইন্ডো ম্যানেজারটি খুঁজে পায় না: Gtk-WARNING **: প্রদর্শনটি খুলতে পারে না:
  3. এটি খুব সম্পাদন-বান্ধব নয়, আমি ইচ্ছা করি এমন কোনও নিয়ম থাকত যেখানে আমি নির্দিষ্ট পার্টিশনের জন্য কেবল LABEL টাইপ করতে পারি যার উপর আমি নির্দিষ্ট স্ক্রিপ্টগুলি ট্রিগার করতে চাই।

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

তবে সবচেয়ে গুরুত্বপূর্ণ, কীভাবে, আমি কীভাবে এখানে থেকে আমার বাড়ির কোনও স্ক্রিপ্টের সাথে সংযোগ স্থাপন করতে পারি যাতে আমার সেশন এবং আমার স্ক্রিনের মতো স্টাফ ব্যবহার করতে পারে যাতে এটি zenityকাজ করতে পারে?

উত্তর:


0

আপনি ইতিমধ্যে উত্তরটি খুঁজে পেয়েছেন। স্ক্রিপ্ট (জেনिटी) বার্তা প্রদর্শনের জন্য একটি এক্স উইন্ডো সার্ভারের প্রয়োজন। স্ক্রিপ্টটি চালানো হয়েছে udevএবং এর সাথে কোনও প্রদর্শন সংযুক্ত নেই। আপনি DISPLAYআপনার স্ক্রিপ্টে ভেরিয়েবলকে শক্ত করে এটি সমাধান করতে পারেন , যেমন

DISPLAY=:0; export DISPLAY

এর অপূর্ণতা হ'ল, এটি কেবলমাত্র তখনই কার্যকর হয় যদি আপনি একমাত্র ব্যবহারকারী হন এবং / অথবা আগে থেকেই প্রদর্শনটি জানেন। সেখানে আপনার সিস্টেমে একাধিক ব্যবহারকারী হন, প্রদর্শন অন্য কিছু, উদাহরণস্বরূপ হতে পারে :1, :2এবং তাই। অথবা অন্য ব্যবহারকারী তার পর্দায় জেনिटी বার্তা পান।

একটি ভাল পদ্ধতির ইভেন্ট সনাক্তকরণ এবং বার্তাটির ব্যবহারকারী বা প্রদর্শনের সাথে ইন্টারঅ্যাকশনকে বিভক্ত করা আরও ভাল উপায়।

এর জন্য আপনি একটি স্ক্রিপ্ট বা প্রোগ্রাম তৈরি করতে পারেন যা আপনার জিইউআই অধিবেশন চলবে এবং একটি ডিমন বা উদেব ট্রিগার স্ক্রিপ্ট থেকে ট্রিগার শুনবে।

তৃতীয় সম্ভাবনা সাথে সংযোগ হতে পারে udisks-daemonএবং তথ্য যখন বহিরাগত ডিভাইস প্লাগ ইন করা আছে জন্য জিজ্ঞাসা করুন। আপনি চেষ্টা করতে পারেন udisks --monitorঅথবা udisks --monitor-detailএই জন্য এবং আউটপুট পার্স, যখনই একটি ইভেন্ট ঘটে।

একটি udisksctlকমান্ড বলে মনে হচ্ছে , যা কিছুটা আলাদা সিনট্যাক্সের সাথে একই কাজ করে। সম্ভবত এটি udisksকমান্ডের নতুন সংস্করণ ।

আপনি জিনোম ডিস্কের মতো কয়েকটি গুই সরঞ্জামগুলিও দেখতে পারেন যা udev / udisks সিস্টেমেও নির্ভর করে।

আপডেট :

একাধিক প্রার্থনা সাধারণত বিভিন্ন সাবসিস্টেমের রিপোর্ট থেকে উত্থাপিত হয়। আপনি /usr/local/bin/test.shস্ক্রিপ্টের কিছু লগ ফাইলে পরিবেশে লগ করার সময় এটি দেখতে পাবেন

umask 077
mkdir -p /tmp/udevtest.d
env >>/tmp/udevtest.d/udevtest.log

যখন আমি একটি ইউএসবি স্টিক প্লাগ করি তখন আমি নিম্নলিখিত প্রতিবেদনগুলি পাই

$ grep -e ACTION -e SUBSYSTEM /tmp/udevtest.d/udevtest.log
ACTION=add
SUBSYSTEM=usb
ACTION=add
SUBSYSTEM=usb
ACTION=add
SUBSYSTEM=scsi
ACTION=add
SUBSYSTEM=scsi_host
ACTION=add
SUBSYSTEM=scsi
ACTION=add
SUBSYSTEM=scsi
ACTION=add
SUBSYSTEM=scsi_disk
ACTION=add
SUBSYSTEM=scsi_generic
ACTION=add
SUBSYSTEM=scsi_device
ACTION=add
SUBSYSTEM=bsg
ACTION=add
SUBSYSTEM=block
ACTION=add
SUBSYSTEM=block

আপনি DEVTYPEদুটি usbবা diskপ্রতিবেদনের মধ্যে পার্থক্য যুক্ত করতে পারেন । সুতরাং, প্রতিবেদনগুলি কেবল মাত্র কয়েকটি বা এমনকি একটি কলকে হ্রাস করতে, আপনাকে আরও নির্দিষ্ট হতে হবে এবং আপনার উদেব নিয়ম ফাইলে অতিরিক্ত শর্ত যুক্ত করতে হবে, উদাহরণস্বরূপ SUBSYSTEM=scsi_diskআপনার ডিভাইসের জন্য উপযুক্ত বা যা বেছে নিন তা বেছে নিন ।


প্রতিক্রিয়া এবং উল্লেখ বিকল্পের জন্য আপনাকে ধন্যবাদ। তুমি ঠিক DISPLAY=:0বলেছ, কৌতুকটা করেছ । এই উত্তরটি সাবস্ক্রেশন 2 অ্যাড্রেসেস করে, তবে 1 অনুমান অনুসারে, আমি এখন আমার পপআপটি zenity1 প্লাগ ইন ড্রাইভের জন্য প্রায় 30 বার পেয়েছি । কোন ধারণা কীভাবে আমি এটিকে টোন করতে পারি? সাধারণত আমি চাই যে স্ক্রিপ্টটি যুক্তি হিসাবে কেবলমাত্র পার্টিশনের নামের সাথে ডাকা হবে। (উদাহরণস্বরূপ স্ক্রিপ্টটি 3 টি পার্টিশন সহ 3 বার বলা হয়।) আমি এটি চেষ্টাও করেছি udisksকারণ এটি খুব সহজ বলে মনে হয়েছে, তবে এটি কেবল মনিটরিংয়ের দাবি করে বসে, তবে আমি যে প্লাগ ইন করি তার কোনও প্রতিবেদন না করে। সম্ভবত এটি উবুন্টুর জন্য সঠিকভাবে প্রয়োগ করা হয়নি।
রেডসান্দ্রো

আহ udiskctlঘটনাগুলি নিরীক্ষণ করে। udevপ্রাথমিকভাবে পরিকল্পনা অনুযায়ী নিয়মে এটি কীভাবে করা যায় তা যদি আমি অনুভব করতে না পারি তবে আমি এটিকে আরও তদন্ত করব ।
রেডসান্দ্রো

@ রেডসান্দ্রো দয়া করে আপডেট হওয়া উত্তর দেখুন।
ওলাফ ডিয়েটশে

ধন্যবাদ. এটি এখনও ধাঁধা, তবে আমি এখন আরও ভালভাবে অবহিত। আমি আপনার উত্তর গ্রহণ করেছি।
রেডসান্দ্রো

0

অন্য কারও এটি পড়ার জন্য, আমি কালি লিনাক্স ২০১ 2016 সালে আমার স্ক্রিপ্টটি কাজ করতে সক্ষম হয়েছি, এটি ছিল:

#!/bin/bash
set -x
xhost local:root
export DISPLAY=:0.0
su root -c 'zenity --notification --text="I am a notification!"'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.