Program DISPLAY এ উল্লিখিত এক্স সার্ভারের সাথে সংযোগ স্থাপন করা সম্ভব হলে আমি কীভাবে প্রোগ্রামটিমেটিকভাবে পরীক্ষা করব


8

এটি প্রোগ্রামিং এবং সার্ভার-অ্যাডমিনের মাঝামাঝি কিছুটা হলেও এটি শেষ পর্যন্ত এটি সবচেয়ে প্রাসঙ্গিক বলে মনে হয়।

আমি ভেরিয়েবল ' $DISPLAY' এক্স-সার্ভারের বিজ্ঞাপন দিচ্ছি যা আমরা প্রকৃতপক্ষে সংযোগ করতে পারি কিনা তা নির্ধারণের জন্য একটি উপায় অনুসন্ধান করছি , এটি হল যদি সমস্ত প্রমাণীকরণ এবং নোট নোট জায়গায় থাকে যাতে আরও কিছু কার্যকর করার অনুমতি দেয়।

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

বর্তমানে পরীক্ষাগুলি কেবল envপরিবর্তনশীল " $DISPLAY" জন্য পরীক্ষা করে এবং যদি এটি সেখানে থাকে তবে সংযোগ স্থাপনের চেষ্টা করবে এবং যখন সংযোগটি কাজ করে না, পরীক্ষাগুলি পরীক্ষার ব্যর্থতা ধরে নেয়, কেবল প্রদর্শনটি সংযোগযোগ্য নয়।

আমি শুধু করতে সক্ষম হতে হবে

if [[ ! can_connect_to_X ]] ; then 
    unset DISPLAY
fi

গুরুতর মানসিক সমস্যা রয়েছে এই পরীক্ষা বন্ধ করার জন্য।

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

উত্তর:


6

আপনি xset কমান্ড দিয়ে চেষ্টা করতে পারেন:

if [[ ! $(xset -q) ]]; then
   # the X server is not reachable
else
   # the X server is reachable
fi

যদিও আমি এটি আরও জটিল উপায়ে ব্যবহার করে শেষ করেছি, xdpyinfo এর চেয়ে xset সম্ভবত ইনস্টলড বলে মনে হচ্ছে।
কেন্ট ফ্রেড্রিক


2

আমি অনুমান করছি আরও ভাল সমাধান আছে। তবে আপনি সর্বদা এক্সক্লক এর মতো একটি ছোট সরঞ্জাম ব্যবহার করতে এবং প্রস্থান স্থিতি পরীক্ষা করতে পারেন।

if [[ ! xclock ]]; then
  exit 1
fi
pkill xclock

কিন্তু মানুষ, যে হয় কুশ্রী :-)

কম হ্যাকি, নিম্নলিখিতটি চেকএক্স.সি. তে রাখুন:

#include <X11/Xlib.h>
#include <stdio.h>

int main() 
{
    Display *display;
    if( ! (display=XOpenDisplay(NULL) ) ) {
        return(1);
    }
    return 0;
}

তারপর:

gcc -lX11 checkX.c -o checkX
chmod +x checkX

সর্বশেষে:

if ./checkX; then
   echo "We are good to go!"
fi

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

এক্সক্লোক-জ্যামিতি 1 এক্স 1 ভিজ্যুয়াল অনুপ্রবেশ দূর করতে আমি যা করতে পারি তার সম্পর্কে সেরা: /, তবে এটি টাস্ক বারে একটি টাস্ক-স্পেসও বরাদ্দ করে :(
কেন্ট ফ্রেড্রিক

এটি আমি প্রথম সি-তে প্রথম প্রোগ্রাম লিখেছি, সুতরাং এটি পুরোপুরি নির্ভরযোগ্য কিনা তা নিশ্চিত নন :-)
কাইল ব্র্যান্ড্ট

এবং সর্বাধিক বহনযোগ্য জিনিস নয় ;-)
কাইল ব্র্যান্ড্ট

দুর্ভাগ্যক্রমে, আমার সীমাবদ্ধতা কিছুটা কঠোর That সত্যই বলার অপেক্ষা রাখে না, আমি একটি ইবিল্ড (ভদ্রলু) লিখছি, সুতরাং আমাকে কার্যত / সবকিছু / শেলের মধ্যে করতে হবে এবং ধরে নিতে হবে যে অ্যাপ্লিকেশনগুলি হাতের আগে উপস্থিত হবে এবং আমি তৃতীয় পক্ষের অ্যাপ্লিকেশনগুলিতে সময়ের আগে বাইনারি ব্লবগুলি যোগ করতে পারি না :)
কেন্ট ফ্রেড্রিক

1

এখানে একটি সম্ভাব্য ওয়েটোডোআইটি, এটি কতটা ভাল তা নিশ্চিত নয়।

  x_works(){
     # If there is no xdpyinfo
     # Bash will return 127
     # If X cant connect, it returns 1
     # If X can connect, it returns 0
     xdpyinfo 1>/dev/null 2>&1
     WORKS="$?"
     return $WORKS
  }

  if x_works; then 
   ...

এটি কাজ করছে বলে মনে হচ্ছে


আমার ফেডোরা ১১ মেশিনে আমি পাচ্ছি: d xdpyinfo 1 ব্যবহার: xdpyinfo [বিকল্পসমূহ] যাইহোক, আমি মনে করি যে xdpyinfo প্রোগ্রামটি ব্যবহার করা ভাল ধারণা বলে মনে হচ্ছে।
ক্রিশ্চিয়ান সিউপিতু

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