كيفية اكتشاف دقة الشاشة في نصوص Linux

النقاط الرئيسية

  • استخدم الأمر xrandr للاستعلام عن دقة الشاشة وتعيينها، ويمكن تحليل الناتج باستخدام awk للحصول على الدقة الحالية، مثل
    xrandr | awk -F'( +)' '/primary/{print $4}'
  • يوفر الأمر xdpyinfo معلومات مفصلة حول الشاشة، ويمكن استخدام awk لعزل السطر بالدقة الحالية، وبمزيد من المعالجة، يمكنك استخراج دقة X وY كمتغيرات.



إذا كنت بحاجة إلى معرفة دقة الشاشة الحالية على جهاز كمبيوتر يعمل بنظام Linux، فلديك عدة أوامر يمكنك الاختيار من بينها. في بعض الأحيان يكون من المفيد دمج هذه الوظيفة في نص برمجي Bash.


لماذا يجب عليك تغيير دقة الشاشة

في بعض الأحيان، تحتاج إلى معرفة دقة الشاشة قبل تشغيل البرنامج النصي الخاص بك لتطبيق أو إجراء بعض المعالجة الإضافية. قد تحتاج إلى تمرير الدقة كمعلمات سطر أوامر إلى التطبيق الذي توشك على تشغيله، أو ربما قمت بإعادة تعيين الدقة وتريد التحقق من نجاح تغيير الدقة.

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


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

استخدام الأمر xrandr

يمكن استخدام الأمر xrandr لتعيين دقة الشاشة والاستعلام عنها. بشكل افتراضي، وبدون أي معلمات، يقوم الأمر بإنشاء قائمة بأوضاع الفيديو التي تدعمها شاشتك أو شاشاتك.

xrandr 
الناتج الافتراضي لأمر xrandr في Linux

يتبع أوضاع الفيديو المفضلة علامة الجمع “+”، ويتبع وضع الفيديو الحالي علامة النجمة “*”.

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


قد ترى أمثلة على الإنترنت حيث يفعلون ذلك. يستخدمون grep للعثور على السطر الذي يحتوي على علامة النجمة، ثم يستخدمون sed أو awk لتحليل المعلومات التي تهمنا.

ولكن هناك طريقة أبسط. تحتوي المعلومات الموجودة في الناتج من xrandr على تفاصيل الشاشة “الرئيسية المتصلة”، بما في ذلك دقة وضع الفيديو الحالي. يمكننا استخدام awk لتحليل ذلك، دون استخدام grep على الإطلاق.

xrandr | awk -F'( +)' '/primary/{print $4}' 
استخدام awk مع xrandr لعزل دقة الشاشة الحالية

هذه هي الطريقة التي يعمل بها الأمر. نستخدم خيار -F (فاصل الحقل) لإخبار awk بأن المسافات وعلامات الجمع “+” يجب التعامل معها كفاصلات للحقول. نبحث عن أسطر تحتوي على كلمة “primary”. تم اختيار هذه الكلمة لأنها تظهر في السطر الذي نهتم به، ولا تظهر في أي مكان آخر في الناتج من xrandr.


تقسيم هذا الخط إلى حقول عند المسافات وعلامات الجمع “+” يعني أن الدقة الحالية تقع في الحقل الرابع.

نستخدم أمر الطباعة awk لطباعة الحقل الرابع. ولأننا نقسم الحقول أيضًا عند علامات الجمع، يتم اقتصاص “+0+0” من الجزء الخلفي من الدقة، لتصبح الحقلين الخامس والسادس. ولا نهتم بهما.

ذات صلة: كيفية استخدام الأمر awk على Linux

استخدام الأمر xdpyinfo

بشكل افتراضي، يعرض الأمر xdpyinfo الكثير من المعلومات حول شاشتك وأوضاع الفيديو المتاحة. ويولد أكثر من 1000 سطر من الإخراج على جهاز الاختبار الخاص بنا.

xdpyinfo 
الناتج الافتراضي من أمر xdpyinfo


يتم وصف الوضع الحالي بمزيد من التفصيل مقارنة بالأوضاع الأخرى المتاحة. يتضمن السطر الذي يصف دقة الوضع الحالي كلمة “dimensions”. لا تظهر هذه الكلمة في أي مكان آخر في الإخراج، لذا يمكننا استخدامها لعزل السطر المطلوب باستخدام awk.

xdpyinfo | awk '/dimensions/ {print $2}' 
توصيل xdpyinfo عبر awk لعزل دقة الشاشة الحالية

إنه أمر أبسط من الأمر الذي استخدمناه مع xrandr، لأننا لا نحتاج إلى تحديد أي فواصل للحقول. يستخدم awk افتراضيًا المسافات البيضاء كفواصل للحقول، وهذا كل ما يتعين علينا التعامل معه في الإخراج من xdpyinfo. الدقة هي الحقل الثاني في سطر الإخراج، ويكتب {print $2} ذلك في نافذة المحطة الطرفية نيابة عنا.


وضعه في النص

يتطلب استخدام أي من هذه التقنيات في البرنامج النصي القليل جدًا من الجهد الإضافي. نحتاج إلى وجود متغير يحمل الدقة التي اكتشفناها حتى نتمكن من إصدار حكم في البرنامج النصي حول ما إذا كان يجب الاستمرار في المعالجة أو الخروج إذا لم تلبي دقة الشاشة الحالية احتياجاتها الخاصة.

انسخ هذه الأسطر إلى محرر، ثم احفظ الملف باسم “get_res.sh”، ثم أغلق محرر النصوص الخاص بك.

#!/bin/bash

current_res=$(xdpyinfo | awk '/dimensions/ {print $2}')

echo $current_res

سنحتاج إلى جعل البرنامج النصي قابلاً للتنفيذ باستخدام الأمر chmod.

chmod +x get_res.sh 
جعل البرنامج النصي get_res.sh قابلاً للتنفيذ

يؤدي هذا إلى تعيين مخرجات أمر awk إلى متغير يسمى current_res، وإظهار قيمة هذا المتغير في نافذة المحطة الطرفية. لنبدأ في تشغيل البرنامج النصي.


./get_res.sh 
تشغيل البرنامج النصي get_res.sh

ومن المشجع أننا نرى نفس النتائج التي حصلنا عليها عند تشغيل الأوامر في نافذة المحطة الطرفية يدويًا.

فصل الدقة X والدقة Y

إذا كنت تريد فصل دقة X وY، يمكننا إضافة بضعة أسطر للقيام بذلك. انسخ هذه الأسطر إلى محرر النصوص الخاص بك، واحفظ الملف باسم get_x_y.sh، وأغلق محرر النصوص الخاص بك.

#!/bin/bash

current_res=$(xdpyinfo | awk '/dimensions/ {print $2}')

current_x=$(echo $current_res | awk -F'( x)' '{print $1}')
current_y=$(echo $current_res | awk -F'( x)' '{print $2}')

echo $current_res
echo $current_x
echo $current_y

يمكننا استخدام awk لاستخراج دقة X من القيمة المخزنة في المتغير current_res، وتخزين النتيجة في متغير يسمى current_x. نكرر العملية لاستخراج دقة Y، وتعيينها إلى متغير يسمى current_y. أخيرًا، نطبع المتغيرات الثلاثة.

مرة أخرى، نحتاج إلى استخدام chmod لجعله قابلاً للتنفيذ.


chmod +x get_x_y.sh 
استخدام chmod لجعل البرنامج النصي get_x_y.sh قابلاً للتنفيذ

هذا هو الناتج من البرنامج النصي على جهاز الاختبار الخاص بنا.

./get_x_y.sh 
تشغيل البرنامج النصي get_x_y.sh

يتيح لك استخدام دقة X وY كمتغيرات فردية إجراء مقارنات على كل بُعد. ربما يكون الدقة الأفقية هي التي تهمك فقط، وطالما أنها تلبي الحد الأدنى أو تتجاوزه، فيمكن أن يستمر البرنامج النصي الخاص بك.

حافظ على البساطة واللطف

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


لا يلزم أن يكون الحصول على هذه القيم معقدًا. حتى المعرفة البسيطة بأدوات Linux القياسية مثل awk ستكافئ الوقت الذي قضيته في تعلمها، مرات عديدة.

أضف تعليق