এক্স উইন্ডোটি প্রদর্শিত / অদৃশ্য হওয়ার জন্য অপেক্ষা করুন (বোকামি দিয়ে)


11

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

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

while :; do
    until wmctrl -l | grep -q "$string"; do   # until
        sleep 0.5
    done
    : do action 1

    while wmctrl -l | grep -q "$string"; do   # while
        sleep 0.5
    done
    : do action 2
done

যেহেতু আমি সিদ্ধান্ত নিয়েছি যে উল্লিখিত কোডটি তীব্রভাবে ডিস্কটি জাগিয়ে তুলছে, তাই আমি কয়েকটি কমান্ড লাইন সরঞ্জামের ডকুমেন্টেশন দিয়ে গিয়েছিলাম এবং xdotoolউইন্ডোটি প্রদর্শিত হওয়ার অপেক্ষার জন্য এবং উইন্ডোটি xpropকখন অদৃশ্য হয়ে গেছে তা নির্ধারণ করার সিদ্ধান্ত নিয়েছিলাম :

while :; do
    # we use `until' because sometimes xdotool just crashes
    until xdotool search -sync -all -onlyvisible -pid $pid -name "$string"; do
        :
    done

    # xdotool isn't trustworthy either, so check again
    wmctrl -l | grep -q "$string" ||
        continue

    : do action 1

    xprop -spy -root _NET_CLIENT_LIST_STACKING | while read line; do
        if [[ ! ${_line:-} || $_line = $line ]]; then
            _line=$line
            continue
        else
            _line=$line
            if wmctrl -l | grep -q "$string"; then
                continue
            else
                : do action 2
                break
            fi
        fi
    done
done

উপরের কোডটি নিয়ে এখন আমার দুটি নতুন সমস্যা রয়েছে:

  • xdotoolআমি ক্রাশ হয়েছি এবং অদ্ভুত ফলাফল দেয় না, যেমনটি আমি আগে থেকেই workarounded করেছি, তবে এটি প্রায় 15% সিপিইউ চুষে দেয় উইন্ডোটি প্রদর্শিত হওয়ার অপেক্ষায় বামে। সুতরাং এর অর্থ আমি ডিস্ককে জাগিয়ে তোলে এমন সাধারণ কোড থেকে মুক্তি পেয়েছি, কয়েক ঘন্টা সিপিইউ নষ্ট করে ফেলেছে এমন কোডটি লিখতে, এবং আমার উদ্দেশ্যটি প্রথম স্থানে শক্তি সঞ্চয় করছিল।
  • xprop -spyআমি যখনই ফোকাস পরিবর্তন করব তখনই আমাকে অবহিত করবে (যা দিয়ে আমি কাজটি করেছি $_line) বা উইন্ডোজ তৈরি এবং ধ্বংস করব। এটি এক্সডটুলের চেয়ে বেশি ঘন ঘন ডিস্ক জেগে।

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


1
আপনার পুরানো কোডটি কেন ডিস্কটি সন্ধান করে এবং সমাধানের সন্ধান করবে তা জানার কি অর্থ হবে না? ক্রুট এবং রামডিস্কের মতো কিছু। আমার ধারণা, strace -f -e trace=file wmctrl -lতথ্যমূলক হওয়া উচিত।
হউক লেগেইন

আমি fatraceডিস্ক ওয়েকআপগুলি পরীক্ষা করার জন্য ব্যবহার করছি এবং এটি আমাকে bashপড়তে /bin/sleepএবং /usr/bin/wmctrlপ্রতি অর্ধেক সেকেন্ডে বলে, তাই আমি এমন কিছু প্রোগ্রাম খুঁজছি যা উইন্ডো ইভেন্টগুলির জন্য অপেক্ষা করবে। আমি কিছু অনুপস্থিত করছি?
তেরেসা ই জুনিয়র

1
এগুলি পড়লে ডিস্কটি জেগে ওঠে না কারণ তারা যদি প্রতি সেকেন্ডে দু'বার চালিত হয় তবে তারা সম্ভবত ক্যাশে থাকবে। আপনি কি নোয়াটিম দিয়ে আপনার ফাইল সিস্টেমগুলি মাউন্ট করেছেন? আরও দেখুন btraceথেকে blktraceডিস্ক কার্যকলাপ উৎস তদন্ত করতে।
স্টাফেন চেজেলাস

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

1
@ এমএসডাব্লু আমি আনপিক্সেবলটি ঠিক করার চেষ্টা করছি, যা গুগল আর্থের জন্য একটি অটোস্যাভ বৈশিষ্ট্য (বন্ধ সোর্স করা এবং বাগগুলি প্রতিবেদন করা সময় নষ্ট করা)
টেরেসা ই জুনিয়র

উত্তর:


4

এটি আপনাকে সমস্ত দেওয়া উচিত (ঠিক আছে: সর্বাধিক

strace -f command 2>&1 | 
  grep -e '^open.*O_CREAT' \
    -e ^write   \
    -e ^mkdir   \
    -e ^rmdir   \
    -e ^unlink  \
    -e ^rename  \
    -e ^chmod   \
    -e ^link    \
    -e ^symlink \
    -e ^mknod

এই তথ্যের সাহায্যে tmpfs এ একটি ওয়ার্কিং ক্রুট পরিবেশ তৈরি করা যেতে পারে (শেষ অবলম্বনের ক্রিয়া হিসাবে; সম্ভবত tmpfs- তে সিমলিংকই যথেষ্ট)। প্রোগ্রামটি যদি কোনও র‌্যাম ক্রুটে শুরু করা হয় তবে সরাসরি ডিস্কটি জাগানোর কোনও সুযোগ নেই। এর ফাইল সিস্টেমের স্তরক্রমের কোনও লিখনই ডিস্কে লেখা হয় না।


আমি বিশ্বাস করি যে কোনও সময় ফাইল পড়ার সময় অন্তত প্রথমবারের মতো ডিস্কটিও জাগ্রত করা হয় তাই না? আমি ভাবছি blktraceযে এটির জন্য সঠিক সরঞ্জামটি কিনা , তবে এটির জন্য একটি কার্নেল সংকলন প্রয়োজন # CONFIG_BLK_DEV_IO_TRACE is not set:( এটি এই প্রশ্নের ক্ষেত্রের বাইরে, যদিও! ধন্যবাদ!
তেরেসা ই জুনিয়র

1
@ তেরেসি জুনিয়র অবশ্যই তবে কে এই সমস্যাটিকে বিবেচনা করবে? এটি স্ক্রিপ্টটি সর্বদা চলমান রাখার বিষয়ে এটি শুরু করার বিষয়ে নয়। এবং আপনি boot.local/ থেকে tmpfs তৈরি করতে পারেন rc.localযাতে আপনার পরে স্ক্রিপ্টটি শুরু করা হলেও ডিস্ক অ্যাক্সেস না থাকে। আমি স্রেফ একবার তাকিয়েছি blktrace(এটি আগে জানতাম না) এতো ভয়ঙ্কর আমি ভাবছি যদি আমি আজ রাতে ঘুমোতে পারি ...
হউক লেগেইজ

হ্যাঁ, আমার আর এ সম্পর্কে সত্যিই চিন্তা করা উচিত নয়, আপনি আবার ঠিক আছেন right তবে আমি মনে করি আমি এই রাত্রেও কার্নেল সংকলনের ঘুমটি আলগা করব, যেহেতু আমি ক্রমাগত ডিস্ক জাগ্রত হতে পারে এমন সমস্ত কিছু পরীক্ষা করতে চাই, কেবলমাত্র এই নির্দিষ্ট গুগল আর্থ হ্যাক নয় :)
টেরেসা ই জুনিয়র

6

এটি "উইন্ডো ম্যানেজার" বা এক্স 11 এর উপর নির্ভর করে "সত্যিকারের" এক্স 11 অ্যাপ্লিকেশন লিখে এটি পরিচালনা করতে আপনার পক্ষে সহজ এবং আরও নির্ভরযোগ্য হতে পারে।

শেল থেকে আপনি যা চান সেটি উইন্ডো ম্যানেজারের সাথে নিবন্ধভুক্ত এবং শেলটিতে ফিরে যাওয়ার আগে একটি পছন্দসই ইভেন্ট ধরণের জন্য অপেক্ষা করে ... আপনি যদি শেলের ভিতরে লুপিং এড়াতে পারেন তবে এটি অনেক বেশি লোড-বন্ধুত্বপূর্ণ। (আপনার until xdotool...কারণগুলি বোঝা লোপের অভ্যন্তরে কোনও বিলম্ব (ঘুম) নেই বলে))

আহ ... দৃশ্যত xdotoolএই বৈশিষ্ট্যটি বছর খানেক আগে যুক্ত হয়েছিল --sync। এটি আমার বর্তমান লিনাক্স ডিস্ট্রোতে (ডিবিয়ান স্কুইজ) উপলব্ধ নয়, তাই আমি এটি চেষ্টা করে দেখিনি।

এক্সডটুল বিকাশকারী আপনার অনুরূপ প্রশ্নের উত্তর দিচ্ছেন: https://groups.google.com/d/msg/xdotool-users/7zfKTtyWm0Q/DM6TSOBUWZMJ


হ্যাঁ, হুবহু, -syncআমি যা চাইছিলাম তা করার কথা ছিল, তবে এটির প্রয়োজন whileকারণ এটি শেষ পর্যন্ত উইন্ডোটি প্রদর্শিত হওয়ার আগে ক্র্যাশ হয়ে যাবে এবং খুব বেশি সিপিইউ নষ্ট করে। আমি xdotoolউত্স থেকে সংকলন করেছি কারণ দেবিয়ান থেকে একজন টাইপ করতে অবিশ্বাস্যভাবে ধীর ছিল। এক্স এর সাথে সরাসরি ইন্টারেক্ট করে এমন একটি অ্যাপ্লিকেশন লেখা আসলে আমার বাইরে। ধন্যবাদ যদিও!
তেরেসা ই জুনিয়র
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.