HiDPI على Linux ، وتحديدا KDE

لم تعد الشاشات ذات دقة 4K تعتبر الكثير من البرجوازية وتدخل تدريجيا حياة الناس العاديين. فضلا عن مراقبي الدقة العالية الأخرى. قبل عامين ، قلت عن دعم مثل هؤلاء المراقبين في لينكس ، قائلة "بدلاً من نعم". يبدو أن هناك دعمًا ، لكن عدد الثغرات التي جعلت العملية بأكملها لا طائل من ورائها ، وأردت حقًا تبديل الشاشة إلى دقة أقل. ما لا تسمح به بعض شاشات 4K في Linux حتى الآن. الحقيقة هي أن برامج تشغيل NVidia ، عند الاتصال عبر DisplayPort ، تعتقد بسذاجة EDID للشاشة ، وإذا تمت كتابة الحد الأقصى لدقة واحدة فقط هناك ، فلن يسمحوا لك بتعيين أي جهاز آخر. يجب عليك إما التراجع إلى Nouveau أو تكوين HiDPI. سنقوم بتخصيص! (المقالة مخصصة لشخص يعرف أساسيات Linux وما هو خادم X).

حول DPI بشكل عام و HiDPI بشكل خاص


DPI (النقاط في البوصة) هي قيمة توضح عدد وحدات البكسل للشاشة بالسنتيمتر المادي لمنطقتها. إذا كانت الشاشة تعمل بدقة غير أصلية ، فإننا نتحدث عن بكسل الدقة الافتراضية. منذ العصور القديمة وحتى وقت قريب جدًا ، كانت 96 نقطة لكل بوصة هي المعيار - أي أن المراقبين العاديين ، إذا اختلفوا عنها ، كانوا إلى حد كبير بحيث يمكن تجاهل ذلك. 120 نقطة في البوصة كانت ذات مرة القيمة القصوى التي تم اختبارها بشكل شائع.

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

تشير كلمة HiDPI إلى الوضع على الشاشات مع DPI> 160. DPI لنظام التشغيل لا يساوي بالضرورة DPI للشاشة. على العكس من ذلك ، يمكن أن تكون أنظمة DPI ملتوية لجعل الواجهة أكبر وأصغر. علاوة على ذلك ، تميز الأنظمة بين DPI لكل شيء ، و DPI للخطوط و DPI لتطبيقات ملء الشاشة.

ماذا عن الآخرين؟


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

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

سمح Windows دائمًا بتحريف خطوط DPI. هنا لم تتغير رسومات DPI فقط من هذا. غيرت العناصر الفردية حجمها لأنها كانت مرتبطة بحجم الخط أو الشاشة. لكن الأحجام المحددة بالبكسل لم تتغير من هذا. في Win 10 ، أخيرًا ، كان هناك دعم HiDPI عادي ، ولكن فقط للبرامج المكتوبة لـ Win 10. بالنسبة للباقي ، تم كتابة عكاز ببساطة أدى إلى زيادة رسومية في نافذة البرنامج مع ترجمة موضع النقرات. يعمل التكبير على جعل النافذة ضبابية ، ويعمل البث بشكل منحرف. أسوأ جزء هو أن هذه الزيادة تحاول البدء لتطبيقات ملء الشاشة أيضًا ، لذلك للعب ، تحتاج إلى إيقاف تشغيله ، والعمل ، وتشغيله.

ماذا عن لينكس؟


وعلى لينكس ، كما هو الحال دائمًا ، البكالوريا. لدينا مجموعتان رئيسيتان لواجهة المستخدم الرسومية (Qt و GTK) ، كل منها نجا مؤخرًا من إعادة الكتابة من الصفر ، لذلك لا تزال الإصدارات القديمة والجديدة قيد الاستخدام. بالإضافة إلى مجموعات صغيرة أصغر (EFL ، wxWidgets). بالإضافة إلى العديد من اللغات التي تستخدم أدواتها لهذا الغرض ، على سبيل المثال Java. بالإضافة إلى عدد قليل من المكتبات القديمة التي لا أحد يكتب إليها ، لكن البرامج الضرورية لا تزال موجودة عليها. (GTK 1 ، Motif) حتى إذا تعامل خادم X ومدير النوافذ مع DPI بشكل صحيح ، فليس من الواقعي أن تدرك كل هذه حديقة الحيوان هذه المعلومات وستعمل بشكل جيد.

هناك الكثير الذي قد لا يعجبك في Ubuntu مع Unity ، ولكن هناك شيء واحد يجب أن أقوله. لا أعرف كيفية تهيئة HiDPI في Unity لأن كل شيء يعمل دائمًا خارج الصندوق. جميع DEs الأخرى: Cinnamon ، KDE ، XFCE ، لها أيضًا علامة مقابلة. تحدد هذه العلامة DE نفسها ، والتطبيقات المكتوبة في مكتبتها الرئيسية (الإصدار الجديد فقط) وزوج من الأعلام لـ Qt / GTK. والباقي جانبية. نتيجة لذلك ، على سبيل المثال ، في اللاعبين ، يظل زر التشغيل صغيرًا. وأيقونات الصينية صغيرة ، لكن ليس كلها. بعد عام من مثل هذا النظام - والشخص في Overwatch يلعب فقط مع McCrack ، لأن الشخص لديه دقة بكسل لكل بكسل على الماوس ويكره الجميع.

سأتحدث عن كيفية تكوين كيدي. ليس حسب التعليمات ، ولكن حتى يعمل كل شيء. Deadbeef ، Yakuake ، خلاط. راجعت بشكل رئيسي في القوس. في توزيعات أخرى ، قد يكون بعض ما أصفه قد تم بالفعل أو تم تنفيذه بشكل مختلف. فكر برأسك أو اكتب في التعليقات - سنكتشف ذلك.

الإعداد X


أول شيء يجب التحقق منه هو ما إذا كان X يعرف أن لدينا HiDPI؟ للقيام بذلك ، نحتاج إلى xdpyinfo xdpyinfo - إنه في اللفت. قم بتعيين الدقة الأصلية للشاشة ، إذا لم يتم تثبيتها (وأعد تشغيل X.) قم بتشغيل وحدة التحكم داخل X (أي ليس بواسطة Ctrl-Alt-F *).

 xdpyinfo | grep -B 2 resolution screen #0: dimensions: 3840x2160 pixels (621x341 millimeters) resolution: 157x161 dots per inch 

نرى ثلاثة أزواج من القيم - دقة الشاشة ، وأحجام الشاشة الفعلية ، و DPI (بشكل منفصل رأسيًا وأفقيًا) إذا كانت الأزواج الثلاثة متشابهة مع الحقيقة ، فابتعد عن الشاشة وقم بالثناء على أعلى كيان من اختيارك ؛ لأنه إذا أعاد xdpyinfo الهراء و DPI = 96 ، فإن ارتفاعك يرسل لك المحن.

الأسباب الأكثر شيوعًا لمؤشرات DPI غير الصحيحة هي منحنيات EDID وحطب الوقود ذو العلامة التجارية على بطاقة الفيديو. لن أقول أي شيء عن بطاقات فيديو ATi ، لأنني أتجنبها. ليس لأنها سيئة ، ولكن ATi + Linux = مشاكل غير ضرورية. مع Intel ، يجب أن يعمل كل شيء. نفيديا حتى الآونة الأخيرة DPI المتعفنة بعناد. أولاً ، قم بإيقاف تشغيل G-Sync في nvidia-settings ، على أي حال ، لا يوجد مدير مركب صديق له. إذا لم يساعد ذلك ، قم بتمكين KMS. إعداد وضع Kernel هو الطريقة التي تدير بها نواة Linux ، بدلاً من X ، دقة الشاشة. بالإضافة إلى الاستخدام المباشر ، يسمح لك هذا بالتنقل حول الكثير من كود عربات التي تجرها الدواب منذ 20 عامًا في X. لسوء الحظ ، فإن إجراء تمكين KMS على برامج تشغيل Nvidia المملوكة يعتمد على التوزيع ، لذلك سأصفه بعبارات عامة فقط. تحتاج إلى إضافة الوحدات nvidia, nvidia_modeset, nvidia_uvm, nvidia_drm في initramfs وإعادة إنشائها ثم إضافة المعلمة nvidia-drm.modeset=1 إلى kernel. جوجل.

إذا لم تكن تفهم أي شيء في الفقرة السابقة ، فيمكنك ببساطة التخلي عن الحطب الذي يحمل علامة NVidia واستخدام Nouveau في الوقت الحالي - هناك KMS خارج الصندوق. في Kubunt ، يتم ذلك من خلال برنامج يدير السائقين.

إذا لم يساعد كل ما سبق وما زال xdpyinfo يكتب القمامة ، فربما تكون برامج تشغيل الفيديو ، ولكن منحنى EDID للشاشة. أولاً ، قم بتشغيل xrandr --dpi 192 في نفس وحدة التحكم. وتشغيل بعض البرامج. إذا أصبحت أكبر ، فإن الطريقة تعمل. الصق هذا الأمر في .xprofile وأعد تشغيل .xprofile في المستقبل سأتحدث كثيرا عن .xprofile . هذا ملف في المجلد الرئيسي لكل مستخدم يقوم بتكوين تشغيل التطبيقات الرسومية. إذا لم يكن الأمر كذلك ، touch ~/.xprofile بإنشائه: touch ~/.xprofile . إذا كان كل شيء يعمل - مرحى! إذا لم يكن الأمر كذلك ، تحقق أولاً من أن .xprofile لا يحتوي على دعم .xprofile مقطوعًا من KDE. لماذا تضيف شيئًا مثل touch ~/net_ne_vyrezali وإعادة التشغيل مرة أخرى.

أما زلت لا تعمل؟ دعونا نسجل DPI في X يدويًا. قم بإنشاء الملف /etc/X11/xorg.conf.d/90-monitor.conf ، إن لم يكن بالفعل ، واكتب فيه:

 Section "Monitor" Identifier "Prikolny monitor" DisplaySize 286 179 #   EndSection 

وللحطب نفيديا وصفت

 Section "Monitor" Identifier "Prikolny monitor" Option "DPI" "192 x 192" EndSection 

يرجى ملاحظة أنه في كل مكان قمت بتعيين قيمة DPI القسرية إلى 192 ، أو بالأحرى إلى أي قيمة مضاعف لـ 96. وهي تعمل بدقة أكبر من DPI الحقيقية ، لأنها مفرغة. هنا تعمل مفارقة المصمم:

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

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

احفظ وأعد تشغيل X وابتهج. أو شرب المر وانتظر حتى ينتهي Wayland.

التكوين في كيدي


لذا ، أخيرًا ، نقوم بتكوين HiDPI في KDE بشكل صحيح. في القائمة ← إعدادات النظام ← العرض والمراقبة في الأسفل يوجد زر عرض مقياس كبير. بالضغط عليه ، تظهر نافذة بها شريط تمرير مقياس واحد. الآن الانتباه! إذا كنت لا تزال غير قادر على تكوين DPI في Xs ، فأغلق هذه المقالة ، وحدد قيمة شريط التمرير حسب الرغبة ، واستمتع بما هو ناجح. وما لا يعمل - التوفيق (هذا عادة ما يكون Chrome و Skype و QtCreator و Yakuake و GTK).

إذا كانت DPI في Xs صحيحة ، فلا تلمس شريط التمرير هذا! من الناحية المثالية ، لا تلويها للأمام والخلف ، لأنه يبدو أنه يكتب شيئًا في مكان ما. أغلق هذه النافذة nafig. وفقًا لمنشور مدونة منشئ هذا المنزلق (الملح في التعليقات) ، فإنه يتجاوز نظام DPI ويضع بعض المتغيرات الأخرى. تكمن المشكلة في أنه لا ترى جميع البرامج إعادة التعريف هذه ، وتبين أنها فوضى. لذلك ، لن نلمس شريط التمرير ، ولكن سنقوم بتكوين كل شيء يدويًا.

بشكل عام ، في هذه المرحلة ، إذا كانت DPI صحيحة ، فيجب أن يكون كل شيء كبيرًا بما يكفي. اذهب إلى إعدادات النظام ← الخطوط . بشكل افتراضي ، هناك حجم خط يبلغ 11. إذا كان 10-14 كافيًا لتحقيق التناغم - ضعه ، ستلحق التطبيقات بالركب. إذا كان أكثر أو أقل - فمن المنطقي محاولة نظام DPI الفرعي كما هو موضح أعلاه. يوجد أدناه حقل Force Font DPI. يمكنك تحريفها إذا أردت ، ولكن ضع في اعتبارك أنه ليس كل التطبيقات تقرأ هذه القيمة. ولا حتى ذلك. بعض التطبيقات لا تقرأ هذه القيمة في جميع أجزائها. لذلك إذا حاولت إصلاح نظام DPI في 96 هنا ، فستكون هناك فوضى. ولكن يمكنك رفع DPI 167 للشاشة إلى 192 المثالية.

أغلق نافذة الخطوط. بشكل عام ، حان الوقت لإعادة تشغيل X ومعرفة ما حدث. يجب أن يعملوا ويكون لديهم حجم KDE مناسب ، جميع إعداداته وتطبيقاته. بالمناسبة ، لن تنمو لوحة البلازما من تلقاء نفسها. لكنها متجهة ، ويمكنك دائمًا تمديدها - انقر على الساندويتش على اليسار وستظهر الأزرار. أيضا ، يجب ضبط الحجم في Dolphin يدويًا. إذا كانت الأزرار واللوحات صغيرة جدًا في مكان آخر في تطبيقات KDE ، فأنت بحاجة إلى تغيير حجم أحجام الأيقونات في System Settings → Icons.

نقوم بتكوين التطبيقات الأخرى


Chrome و Atom وآخرون


تقوم هذه التطبيقات بقراءة DPI مباشرة من مصدرها ومتابعتها مثل رمز الفارس. إذا قرأوا شيئًا خاطئًا ، فسيبدوون خطأً إلى حد ما. عادة ما يتجاهلون الإعدادات في إعدادات النظام ويتبعون DPI التي ترجع xdpyinfo. إذا كان هناك 96 ، --force-device-scale-factor=2 إلى Chrome ، يمكنك استخدام الوسيطة --force-device-scale-factor=2 ، بالنسبة إلى Atom ، يوجد مكوّن hidpi منحنى hidpi في اللفت الرسمي ، بالنسبة للبرامج الأخرى ، hidpi .

QtCreator و Yakuake وتطبيقات Qt5 الأخرى


بشكل عام ، يجب أن تعمل . لكن QtCreator أحيانًا لا يقيس شريط الأدوات ، بينما لا يحتوي Yakuake على شريط علامات التبويب. السبب في الخطأ وفي متغير البيئة QT_AUTO_SCREEN_SCALE_FACTOR . عندما تساوي 1 ، يحاول Qt5 إيجاد قيمة DPI نفسها ، وعندما 0 - يتوقع أن يتم إعطاء هذه القيمة لها في متغيرات أخرى. الخطأ هو أن KDE يمر بالقمامة.

باختصار ، تحتاج هذه التطبيقات إلى تعيين المتغير QT_AUTO_SCREEN_SCALE_FACTOR=1 وسيعمل كل شيء. يمكن القيام بذلك إما بشكل انتقائي أو عالمي. بشكل انتقائي في محرر القائمة. فقط تذكر إضافة التطبيق إلى اللوحة وتشغيله تلقائيًا لاحقًا. وذلك لأن نسخ إدخالات سطح المكتب. غير مرتبطة. الخيار الثاني هو تعيين هذا المتغير على مستوى النظام ، في .xprofile أو حتى / etc / بيئة ، أو حيث تتم كتابة المتغيرات في التوزيع الخاص بك. هناك نوعان من الفروق الدقيقة. أولاً ، تقوم KDE بإعادة تعيين هذا المتغير بالقوة إلى 0 في البرنامج النصي / usr / bin / startkde . سيتعين عليك فتحه وتحريره من خلال #export QT_AUTO_SCREEN_SCALE_FACTOR=0 على السطر #export QT_AUTO_SCREEN_SCALE_FACTOR=0 . بعد ذلك ، تذكر تكرار هذا التصحيح في كل مرة يتم فيها تحديث KDE. التحذير الثاني هو أن مطوري KDE يحذرون في التعليقات: يمكن أن يؤدي تعيين هذا المتغير عالميًا إلى تعزيز بعض تطبيقات Qt5 مرتين. لكن هذا لا يحدث لي. علاوة على ذلك ، إذا كان نظام DPI غير صحيح ، فأنت بحاجة إلى تعيين المتغير QT_SCALE_FACTOR=2 في .xprofile .

تذكر أن متغير QT_DEVICE_PIXEL_RATIO . إذا وضعته في مكان ما ، فأنت بحاجة إلى إزالته.

تطبيقات Qt4


بشكل عام ، هذه التطبيقات ليست جيدة في HiDPI. لكن ليس كل شيء ضاع. ينشئ Qt4 واجهة مرنة للغاية. قم بتشغيل qtconfig-qt4 . أولاً ، انظر إلى الخط وحدد حجمًا مناسبًا. ثم ، في علامة التبويب Interface ، ابحث عن عكاز يسمى " Global strut " (في الترجمة - عكاز عام.) يعني هذا الإعداد أن مثيلات QWidget ونسلها لا يمكن أن يكون أصغر من هذا الحجم بالبكسل ، مهما فعلوا. باستخدام الحد الأدنى للعرض ، يمكنك تعيين عرض أشرطة التمرير واستخدام الحد الأدنى للارتفاع - ارتفاع أشرطة الأدوات.

تطبيقات GTK3


كل شيء بسيط هنا. تحتاج إلى تعيين متغيرين في ملف .xprofile :

GDK_SCALE=2 GTK لزيادة كل شيء مرتين. يجب أن تكون القيمة عددًا صحيحًا. يضبط GDK_DPI_SCALE تكبير الخط. إذا GDK_SCALE الخطوط ضخمة بعد GDK_SCALE ، فأنت بحاجة إلى تعيين GDK_DPI_SCALE=0.5

تطبيقات GTK2


كل شيء معقد هنا. GTK2 لا يعرف كيفية HiDPI. ولكن هناك اختراق. Softina تسمى Oomox هو مولد الموضوعات (جلود) لـ GTK. بما في ذلك ، بمساعدتها ، يمكنك جمع مثل هذا الموضوع تحت GTK2 ، والذي سيقلد HiDPI. أو ابحث عن موضوع جاهز .

تطبيقات على Qt3 ، Gtk1 ، عزر


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

تطبيقات جافا


المزيد من برامج جافا التجارية الرائعة تتصرف مثل Chrome: فهي تقرأ DPI من X وتتبعها. يمكن إصلاح برامج -Dsun.java2d.uiScale=2 الوسيطتين: -Dsun.java2d.uiScale=2 يزيد من الواجهة مرتين ، و -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel تخبرها باستخدام الأبعاد من GTK للرسم . دعني أذكرك أنه في .xprofile يمكنك إنشاء export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' variable export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' . يتضمن هذا المثال الصقل في الخطوط و GTK.

حسنًا ، بطريقة ما.

Source: https://habr.com/ru/post/ar403165/


All Articles