Display scaling в Linux. Часть 1 — системные настройки

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Дисплеи с высокой плотностью пикселей уже давно не редкость. И для того, чтобы UI не выглядел слишком мелко, применяется масштабирование. В разных системах используются разные подходы и имеются различные возможности настроек. Но одно объединяет их все - безмерное количество кривизны, костылей и глюков. Посмотрим как на сегодняшний день обстоит ситуация в лагере Linux.

Цель первой части - обрисовать ситуацию с настройками масштабирования в системе из коробки, без лишних плясок с бубном - так, как ее видит обычный пользователь.

Десктопных окружений великое множество, проверить все займет огромное количество времени, поэтому критерии выбора такие - находится в активной разработке и не требует отдельной установки, т.е. идет в комплекте с каким-н дистрибутивом. Ну и конечно оно должно быть более мене известным, потому выбирал просто из перечня в таблице https://en.wikipedia.org/wiki/Comparison_of_X_Window_System_desktop_environments#Desktop_comparison_information.

Дистрибутивы для обзора были использованы следующие: Ubuntu и Fedora для Gnome, openSUSE для KDE, Manjaro для XFCE, Debian для MATE, Mint для Cinnamon, Ubuntu для LXQt и Deepin с его одноименным окружением.

Gnome

Поддерживает независимые настройки масштабирования для каждого монитора.

Окно настроек Settings -> Displays
Окно настроек Settings -> Displays

Доступные коэффициенты рассчитываются в зависимости от разрешения монитора, для 4K возможны варианты от 100% до 400%, для FullHD - 100% и 200%.

Дробное масштабирование (Fractional scaling) поддерживается частично. Возможность установки дробного масштабирования в различных дистрибутивах либо присутствует в настройках дисплея (например в Ubuntu), либо скрыта (как в Fedora). Но даже если опция скрыта, включить этот режим можно с помощью команды

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

Доступные коэффициенты также рассчитываются в зависимости от разрешения монитора, для 4K возможны варианты от 100% до 400% с шагом 25%, для FullHD - от 100% до 225%.

Поскольку актуальная версия Gnome использует протокол Wayland, то для полноценной работы приложения должны поддерживать эту технологию. Для обычных X11 приложений написанных с использованием UI-фреймворков, которые не поддерживают Wayland используется реализация X Server под названием XWayland. К сожалению дробное масштабирование среди того что не поддерживается в режиме совместимости, в этом случае X11 приложения отрисовываются в 100% масштабе а затем просто растягиваются до необходимых размеров, даже если в этом режиме выбран целочисленный коэффициент. Когда то за подобное ругали Windows... лет десять назад.

Изменения настроек применяются сразу, log out не требуется.

В окне справа все размыто
В окне справа все размыто
В обычном режиме все в порядке
В обычном режиме все в порядке

KDE

System Settings -> Display and Monitor
System Settings -> Display and Monitor

Не поддерживает независимые настройки масштабирования для нескольких мониторов.

Дробное масштабирование поддерживается, доступные коэффициенты от 100% до 300% (не зависят от разрешения) с шагом 25%.

С ходу бросается в глаза что высота панели задач не меняется.

Изменения требуют сделать restart, по факту достаточно перелогиниться.

XFCE

Тут все плохо. Поддержка с виду как бы есть но лучше бы ее совсем не было, такое впечатление что код не то что не тестировали, а даже не запускали.

Settings -> Display
Settings -> Display
Settings -> Appearance
Settings -> Appearance

Независимые настройки для каждого монитора есть, также есть секретная опция Window Scaling в Appearance.

Дробное масштабирование с виду поддерживается, но теперь самое интересное - ставим в первом окне коэффициент 1.5x вместо 1x и… весь UI уменьшается. Причем чем больше коэффициент тем мельче будет UI

Вот так выглядит масштаб 2x на 15'' 4K экране ноутбука
Вот так выглядит масштаб 2x на 15'' 4K экране ноутбука

Взяв линейку легко выявить что все размеры не умножаются на scale factor, а делятся на него т.е. Вместо 150% получаем 66%, вместо 200% - 50% и.т.п. Что интересно, настройки позволяют указывать произвольное значение от 0.1 до 10.0 с шагом 0.1. Если указать значение меньше единицы то UI таки увеличится (например 0.7 даст примерно 143%), но размыто будет абсолютно все. Ситуацию немного улучшает секретная опция Window scale, там всего два варианта 1x и 2x, если выбрать 2x, то размер окон будет умножен на 2 и поделен на коэффициент из настроек дисплея. Тогда коэффициент 1.5 даст масштаб 133%, а коэффициент 2 сократится до 100% и в этом случае проще оставить везде единицы.

Применение настроек требует перелогиниться. Причем делать это придется видимо с клавиатуры, потому что кнопки на панели задач отваливаются (видно на первом скриншоте) и не реагируют на нажатия. Короче это не лучший выбор для дисплеев с высокой плотностью пикселей.

MATE

Не поддерживает независимые настройки масштабирования для нескольких мониторов.

Также нет гибкости выбора коэффициентов, только Regular (x1) или HiDPI (x2).

Среди настроек дисплея эту опцию искать бесполезно, она запрятана довольно далеко и неочевидно в System -> Preferences -> Look And Feel -> MATE Tweak.

Изменения применяются сразу.

System -> Preferences -> Look And Feel -> MATE Tweak
System -> Preferences -> Look And Feel -> MATE Tweak

Cinnamon

System Settings -> Hardware -> Display
System Settings -> Hardware -> Display

Поддерживает независимые настройки масштабирования для нескольких мониторов.

Поддерживает дробное масштабирование, эта опция помечена как experimental, но по умолчанию включена. Отключение дробного масштабирования отключит также и возможность независимой настройки для разных мониторов. Для дробного масштабирования диапазон настроек от 100% до 200% с шагом 25% независимо от разрешения монитора. При отключенном дробном масштабировании диапазон зависит от разрешения, так же как и на Gnome - от 100% до 400% для 4K и 100% и 200% для FullHD.

Изменения применяются сразу.

System Settings -> Hardware -> Display
System Settings -> Hardware -> Display

Из всех рассматриваемых окружений Cinnamon масштабирует наиболее адекватно, можно настроить например 150% для High-DPI монитора (мне например 200% слишком много), и оставить 100% для второго Low-DPI монитора, и это будет работать.

LXQt

Preferences -> LXQt Settings -> Session Settings
Preferences -> LXQt Settings -> Session Settings

Не поддерживает независимые настройки масштабирования для нескольких мониторов.

Настройки здесь снова бесполезно искать среди конфигурации дисплея, они запрятаны далеко. Можно указать дробный коэффициент - произвольное значение от 1.0 до 4.0 с точностью в два знака. Заголовки окон не масштабируются.

Применение изменений требует перелогиниться.

Deepin

Control center -> Display
Control center -> Display

Окружение используется в одноименном китайском дистрибутиве. До недавних пор не знал о его существовании, включил в список только потому что он фигурирует в таблице из Википедии, оказалось что по визуальному оформлению пожалуй один из лучших среди перечисленного.

Не поддерживает независимые настройки масштабирования для нескольких мониторов.

Дробное масштабирование поддерживается, доступные коэффициенты зависят от подключенных мониторов. Например если использовать только 4К то коэффициенты от 1.0 до 3.0 с шагом 0.25, а если в дополнение к 4К подключить FullHD, то доступные коэффициенты только 1.0 и 1.25.

Применение настроек требует перелогиниться.

Вывод

Могло бы быть и лучше.

Вторая часть будет о том, как программно определить системные настройки масштабирования из приложения. Поскольку в Linux нет единого API для этого, то зоопарк с этим творится еще похлеще.

Источник: https://habr.com/ru/post/698650/


Интересные статьи

Интересные статьи

Если обновляешься со старой Java на LTS-версию Java 17, как разобраться сразу во всех фичах за несколько лет? Чтобы помочь с этим, мы уже публиковали расшифровку доклада tagir_valeev с нашего IT-фес...
Ситуация получилась следующая. Компания переделывала сайт и сказал, что необходимо сделать его максимально гибким, чтобы, во-первых, можно было дизайн обновлять просто, во-вторых, сделать ещё нескольк...
Часть 1 ‣ Часть2 Космические аппараты Starlink специально сконструированы для группового запуска двумя стопками по 30 спутников под обтекателем ракеты Falcon 9 и имеют размеры: длина ...
Продолжаем нашу подборку интересных материалов (первая часть, вторая часть). На этот раз один образовательный курс Техносферы, выступление про модульное тестирование и одна передача из ток-шо...
Часть 2 Часть 3 Часть фотографий была взята с сайта Hack The Moon. Статья была представлена на 27-й ежегодной конференции по навигации и управлению Американского Общества Астронавтики (AAS...