إجراء تطبيقات عن بعد بنوافذ X11

ArticleCategory: [Choose a category, do not translate this]

UNIX Basics

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to ar Taha Zerrouki

AboutTheAuthor:[A small biography about the author]

غيدو يهوى لينكس ليس لأنه يهتم بفهم كيفية عمل أنظمة التشغيل فحسب، بل للناس المهتمين بتصميمه أيضا..

Abstract:[Here you write a little summary]

المستجدون في لينكس يعتقدون أن واجهة X الرسومية ليست سوى نوافذ مثل الوندوز تعمل فيها التطبيقات . بعضهم تفطنوا أن لديهم مكاتب عديدة أو هذا ما يبدو . واجهة لينكس (X11) أكثر من ذلك، إنها نظام و نوافذ و شبكة. و سنرى معا من فوائدها الجمة.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

فكرة العرض

في وا جهة X ، كل تطبيق يقرأ متغير البيئة للعرض DISPLAY، ليحدد شاشة الحاسوب التي سيعرض عليها. هذا و زد عليه قدرات الشبكة على الواجهة يجعلك تجري تطبيقا عن بعد. فتستفيد من طاقة المعالج السريع في حاسوب آخر، بينما تعرض كل ما تريد أمامك على شاشتك، حتى لا تكاد تشعر أنك تعمل على حاسوبين اثنين.

ما الفائدة من ذلك؟ التطبيقات الرسومية الشبكية كثيرة. تعمل بها الشركات على أجهزة قد تتباعد آلاف الأميال، و أنت كذلك و كأنك في ذات الموقع.

ربما لديك حاسوبان أحدهما معالجه سريع، سرعته 1 جيغا هرتز، و آخر بنتيوم قديم لا تتجاوز سرعته 133 ميغا هرتز، ربما تريد أن تستفيد من سرعة السريع دون أن تجلس بين يديه، أو ربما شقيقتك الصغرى تجلس مكانك أمامه، لكن هذا لا يمنعك من الاستفادة منه.

اعلم أن معظم التطبيقات - gimp،xterm ، konquerer، netscape، ...- زبائن شبكية لدى خادم X. خادم X يرسم و يلون و يأمر الأجهزة بما يلزم، و يستقبل منها حركة الفأرة و كتابة لوحة المفاتيح.

فالتطبيق الزبون- netscape مثلا - يتعامل مع الخادم فيطلب منه أن يرسم له أو يكتب، و يحصل منه على ما نحود به الفأرة و لوحة المفاتيح.

تذكر، لابد لك من إذْن، و إلا لاستطاع أي كان أن يستغل حاسوب أي كان. البرنامجان xhost و xauth يعنيان بذلك، إذ يحددان الصلاحيات، فيأذنان و يمنعان.

- xhost ، به تسمح لأي شخص - من حاسوب معين - أن يرسم على شاشتك. مثلا : هب أنك أمام جهاز يسمى فيلوسوفوس، و ترغب أن تسمح لأي برنامج من جهاز آخر يدعى موفيتُكس أن يعرض ما يريد على شاشة فيلوسوفوس. عليك إذن بالأمر - اكتبه في سطر الأوامر في فيلوسوفوس- :

xhost +movietux

- xauth : كعكة للإذن ، أكثر تطور، إذ بها تأذن لأفراد بعينهم، فهي بذلك آكثر أمنا من xhost.

الإذن يستعمل كعكة محفوظة في الملف Xauthority. في المجلد الشخصي للمأذون له. فحين يتصل حاسوب به كعكة صالحة في هذا الملف فيؤذن له بالدخول و الرسم.

و حتى ترسل الكعكة (تنسخها) من الحاسوب الذي بين يديك (فيلوسوفوس) إلى الحاسوب التي تريد أن تاذن له ( لتجري فيه البرنامج، موفيتكس)، جرب احدى الطريقيتن:

 

xauth extract - philosophus:0.0 | ssh movietux /usr/X11R6/bin/xauth merge
أو
scp ~/.Xauthority movietux:


عند انطلاق البرنامج ( الزبون ) يجري ما يأتي :

  1. يتفحص الزبون نتغير البيئة للعرض DISPLAY ليتعرف على الخادم الذي سيتعامل معه.

  2. يتأكد الخادم إن كان للزبون الإذن بالعرض على شاشة الخادم، فإن نعم، يرسم له ما يريد، وإلا فلا.

صيغة متغير البيئة للعرض DISPLAY هي :

bash:export DISPLAY=hostname:displaynumber.screennumber
tcsh:setenv DISPLAY hostname:displaynumber.screennumber

لن أتحدث عن displaynumber و لا عن screennumber، فهما عادة 0:0 .

مثلا هي في bash :

export DISPLAY=philosophus:0.0

إجراء تطبيق عن بعد :

بعد كل ما رأيناه نظريا، جرب حظك عمليا بهذا المثال، كل ما نريده أن نجلس أمام فيلوسوفوس و أجر تطبيقا عن بعد على موفيتكس.

  1. أخبر خادم X أنك تأذن لموفيتكس أن تعرض على شاشتك.:
    xhost +movietux

  2. أدخل عن بعد إلى المضيف موفيتكس :
    slogin -l username movietux

  3. لقد دخلت إلى موفيتكس، و كل ما ستأمر سينفذ على موفيتكس:
    export DISPLAY=philosophus:0.0

  4. أجر برنامجا و ليكن :
    netscape &

إن كانت موفيتكس أسرع، فستلاحظ أن برنامجك يسرع عما عليه إن عمل على فيلوسوفوس - الحاسوب الذي بين يديك-. بيد انك لن تعرف إن كان البرنامج يعمل هنا أو هناك، ما دمت تعمل بالفأرة و لوحة المفاتيح دون أدنى فرق، ما أروع ذلك؟

خذ العرض معك.

إجراء التطبيق بعيدا سهل، مع ذلك أود لو جعلت الأوامر اللازمة لتعديل متغير البيئة للعرض DISPLAY عملا آليا:

# take your display with you at remote login:
# Put it into your ~/.login file
set whoami=`who -ml`
set remhost=`expr "$whoami" : '.*(\(.*\))'`
if ( "$remhost" != "" ) then
setenv DISPLAY "$remhost":0.0
endif

المخطوطة تحصل على اسم الحاسوب البعيد بالأمر"who -ml" ، فتحصل على مثل هذا :