Настройка dpi в линукс
Я пытаюсь найти, а затем изменить настройку разрешения экрана (точек на дюйм) в 12.04 и 12.10. Тем не менее, я не могу найти приложение или файл конфигурации, который может сделать это. Для этого есть какое-нибудь приложение или файл conf?
Обратите внимание, что это для 12.04+, поэтому следующее не будет работать:
Более того, они в основном меняют размер шрифта, а не фактическое разрешение экрана.
Это обновленная версия моего предыдущего ответа, который был связан с Ubuntu 12.04. В 16.04 (Xenial) необходимо 3 шага для правильной установки DPI вместо 2.
Я объясню на примере системы с Ubuntu 12.04 с Gnome Classic и монитора с разрешением 1680x1050. Мои стартовые настройки: xdpyinfo | grep dots сообщается 96x96 dots , xrdb -query | grep dpi сообщается Xft.dpi: 96 , grep DPI /var/log/Xorg.0.log сообщил о некоторых странных настройках NOUVEAU(0): DPI set to (90, 88) ,
В 16.04 выходные данные всех этих 3 команд были согласованы и равны 96. Хотя такой консенсус лучше, чем беспорядок 12.04, сообщаемое значение жестко закодировано и далеко от реального значения DPI.
Давайте посчитаем оптимальное значение DPI для моего монитора. Фактический размер экрана можно узнать с помощью команды xrandr | grep -w connected (преобразовать вывод в сантиметры) или с длинной линейкой вручную. В моем случае: X = 47.4cm ; Y = 29.6cm , Разделите их на 2,54, чтобы получить размер в дюймах: X
11.65in , Наконец, разделите фактическое количество точек (в зависимости от вашего разрешения) на размер в дюймах: X = 1680/18.66
90dpi ; Y = 1050/11.65
90dpi , Так что мой реальный dpi - 90.
Помните, что ручной метод измерения может быть более точным, чем вывод команды xrandr | grep -w connected потому что более новые версии X-сервера игнорируют размер, сообщаемый EDID, и рассчитывают размер, используя разрешение экрана и жестко заданное значение DPI (дополнительная информация здесь).
Другой способ найти размер монитора - это напрямую прочитать его EDID. устанавливать read-edid упаковать и запустить команду sudo get-edid | parse-edid | grep DisplaySize в терминале. Его вывод даст вам фактический размер вашего монитора в миллиметрах. Если нет - используйте линейку.
Давайте начнем исправлять DPI:
1) В 12.04 запустить gksudo gedit , открыть /etc/lightdm/lightdm.conf и добавить параметр в [SeatDefaults] раздел:
В 16.04 по умолчанию такого файла нет, поэтому необходимо создать lightdm.conf вручную и положить его в /etc/lightdm/lightdm.conf.d/ , Содержимое этого файла одинаково:
Перезагрузите компьютер или перезагрузите X. Теперь grep DPI /var/log/Xorg.0.log покажет желаемую настройку.
2) В моем предыдущем ответе я предложил создать файл в /etc/X11/Xsession.d/ содержащий строку xrandr --dpi 90 , Это работало в 12.04, но в 16.04 этот параметр не является постоянным. В более новых системах мы можем добавить желаемое значение при запуске сеанса. Запустите "Автозагрузка приложений", нажмите кнопку "Добавить", назовите ее "Fix DPI" и установите команду xrandr --dpi 90 в поле. Сохраните изменения и войдите снова. Сейчас xdpyinfo | grep dots сообщит 90x90 dots ,
Если xdpyinfo все еще показывает 96, затем добавить тайм-аут перед запуском xrandr , Отредактируйте команду в "Автозагрузке приложений" и измените ее на:
Шаг 2 не является обязательным для 12.04, потому что в старых системах шаг 1 исправляет оба Xorg.0.log а также xdpyinfo ценности.
3) В GNOME3 DPI настройка жестко задана на 96 и не может быть изменена напрямую, но вместо этого можно масштабировать текст. Рассчитаем нужный множитель: desired_DPI / 96 (в моем случае 90/96 = 0.9375 ). Теперь запустите команду (или используйте dconf Если вы предпочитаете):
Изменения будут применены сразу. xrdb -query | grep dpi сообщит желаемое Xft.dpi: 90 ,
Послесловие: Только разработчики Ubuntu могут с уверенностью сказать, действительно ли значения, измененные в соответствии с шагами 1 и 2, действительно имеют значение в современной Ubuntu, или они молча игнорируются. Только Шаг 3 производит изменения, которые мгновенно заметны. Тем пользователям, которые считают, что определенные приложения могут по-прежнему полагаться на настройки X-сервера, рекомендуется выполнить все 3 шага, описанных выше. В остальном достаточно шага 3 - это единственный способ настройки, принятый в современных дистрибутивах Ubuntu.
DPI (dots per inch) — это величина, говорящая, сколько пикселей экрана приходится физический сантиметр его площади. Если монитор работает в неродном разрешении, то речь идёт о виртуальных пикселях разрешения. С античных времён и до совсем недавно, величина в 96 DPI была стандартом — то есть, обычные мониторы если и отличались от неё, то настолько, что этим можно было пренебречь. 120 DPI когда-то была максимальной величиной, которую обычно тестировали.
Не удивительно, что за столько лет разработчики программ приняли эту величину за незыблемую постоянную. Вдруг пришли мониторы с 160-192 DPI и началось. Все программы, которые хоть какой-то размер в интерфейсе задавали в пикселях, получили наезжающие друг на друга панели, подписи, обрезанные до первой буквы, и кнопки, за успешное нажатие которых надо давать денежный приз.
Словом HiDPI называют ситуацию на мониторах с DPI>160. DPI операционной системы не обязательно равна DPI экрана. Напротив, DPI системы можно крутить для того, чтобы делать интерфейс крупнее-мельче. Мало того, системы различают DPI всего, DPI шрифтов и DPI, отдаваемую полноэкранным приложениям.
А как у других?
Макось выручило её авторитарное правление. Поскольку почти все программы создают свой интерфейс через одно и то же API, его просто поправили, и получилось сразу хорошо. Отдельные неистребимые косяки только подчёркивают, насколько в целом всё хорошо.
Android родился на системах с большим разбросом DPI, поэтому умел всё с самых пелёнок, и учебники для программистов это всё учитывали.
Windows позволяло крутить DPI шрифтов всегда. Вот только DPI графики от этого не менялась. Отдельные элементы меняли размер оттого, что привязаны к размеру шрифта, или экрана. Но размеры, заданные в пикселях, от этого не сдвигались. В Win 10, наконец, появилась нормальная поддержка HiDPI, но только для программ, написанных для Win 10. Для остальных написан костыль, делающий просто графическое увеличение окна программы с трансляцией положения кликов. Увеличение делает окно размытым, а трансляция работает криво. Хуже то, что это увеличение пробует запуститься для полноэкранных приложений тоже, поэтому, чтобы поиграть, его нужно выключить, а чтобы поработать — включить.
А в Linux?
А в Linux, как всегда, вакханалия. У нас есть два мажорных набора для GUI (Qt и GTK), каждый из которых относительно недавно пережил переписывание с нуля, поэтому до сих пор в ходу старая и новая версия. Плюс несколько наборов поменьше(EFL, wxWidgets). Плюс несколько языков, которые используют для этого свои средства, например Java. Плюс несколько древних библиотек, на которых уже никто не пишет, но нужный софт на них ещё бывает. (GTK 1, Motif) Даже если X сервер и оконный менеджер правильно обрабатывают DPI, не факт, что весь этот зоопарк воспримет эту информацию и будет работать нормально.
Можно много за что не любить Ubuntu с Unity, но одну вещь я должен сказать. Я не знаю, как в Unity настраивать HiDPI потому, что всё всегда работало само из коробки. Все остальные DE: Cinnamon, KDE, XFCE, тоже имеют соответствующий флажок. Этот флажок настраивает саму DE, приложения, написанные на её главной библиотеке(только новой версии) и пару флагов для Qt/GTK. А остальное всё побоку. В результате, например, в плеерах кнопка Play остаётся крошечной. И значки в трее маленькие, но не все. Годик за такой системой — и человек в Overwatch играет только за МакКряка, потому что у человека попиксельная меткость на мышке и он всех ненавидит.
Я буду рассказывать, как настроить KDE. Не так, как по инструкции, а так, чтобы работало всё. Deadbeef, Yakuake, Blender. Я проверял это, в основном, в Арче. В других дистрибутивах может быть, что что-то из того, что я опишу, уже сделано или сделано по-другому. Думайте головой или пишите в комментариях — разберёмся.
Настройка Иксов
Первым делом нужно проверить, а знают ли Иксы, что у нас HiDPI? Для этого нам нужна софтинка xdpyinfo — она есть в репе. Установите, если не установлено, родное разрешение монитора, (и перезапустите Иксы). Запускайте в консоли внутри иксов (то есть не по Ctrl-Alt-F*).
Видим три пары значений — разрешение экрана, реальные размеры экрана, и DPI (отдельно по вертикали и горизонтали) Если все три пары похожи на правду, то отвернитесь от монитора и воздайте хвалу высшей сущности по вашему выбору; ибо если же xdpyinfo возвращает ерунду и DPI=96, значит ваша высшая сущность посылает вам мытарства.
Самые частые причины неправильной DPI — кривые EDID и фирменные дрова видеокарты. Про видеокарты ATi не скажу ничего, так как сторонюсь их. Не то, чтобы они чем-то плохи, но ATi + Linux = лишние проблемы. C Intel всё само должно работать. NVidia же до недавнего времени упорно поганила DPI. Сначала отключите G-sync в nvidia-settings , всё равно никакой композитный менеджер с ним не дружит. Если не помогло, включите KMS. Kernel Mode Setting — это метод, по которому разрешением экрана заведует ядро Linux, а не Иксы. Кроме прямого назначения, это позволяет обойти много глючного кода 20-летней давности в Иксах. К сожалению, процедура включения KMS на фирменных драйверах Nvidia дистрибутивозависима, поэтому опишу только в общих чертах. Нужно добавить модули nvidia, nvidia_modeset, nvidia_uvm, nvidia_drm в initramfs, пересобрать его, а затем добавить ядру параметр nvidia-drm.modeset=1 . Гуглите.
Если в предыдущем абзаце вы ничего не поняли, то можно просто отказаться от фирменных дров NVidia и использовать пока что Nouveau — там KMS из коробки. В Кубунте это делается через программу, управляющую драйверами.
Если всё вышеописанное не помогло и xdpyinfo по прежнему пишет фигню, то, может быть, виноваты не драйверы видео, а кривые EDID монитора. Сначала запустите в той же консоли xrandr --dpi 192 . И запустите какую-нибудь программку. Если она стала больше, то способ работает. Вставляйте эту команду в .xprofile и перезапускайте Иксы. В дальнейшем я буду много говорить про .xprofile . Это файл в домашней папке каждого пользователя, который настраивает работу графических приложений. Если его нет — просто создайте его: touch
/.xprofile . Если всё заработало — Ура! Если нет, сначала проверьте, что в вашем дистрибутиве из KDE не вырезали поддержку .xprofile . Для чего добавьте туда что-то вроде touch
/net_ne_vyrezali и перезагрузите ещё раз.
Всё равно не работает? Пропишем DPI в Иксы вручную. Создайте, если уже нет, файл /etc/X11/xorg.conf.d/90-monitor.conf и в него напишите:
А для фирменных дров Nvidia
Обратите внимание, что везде принудительное значение DPI я ставлю в 192, точнее в любое значение, кратное 96. Оно работает точнее, чем реальная DPI, потому что гладиолус. Тут работает парадокс дизайнера:
- Если DPI кратна 96, лучше рендерятся шрифты в приложениях, работающих с текстом. Особенно в приложениях на Cairo.
- Если DPI равна настоящей DPI монитора, то масштаб 1:1 на экране будет иметь тот же размер, что и на бумаге.
Сохраняем, перезапускаем Иксы и ликуем. Или пьём горькую и ждём, когда Wayland доделают.
Настройка в KDE
Итак, наконец, настраиваем HiDPI в KDE правильно. В меню → System Settings → Display and Monitor в самом внизу есть большая кнопка Scale Display. По её нажатию вылезает окно с единственным слайдером Scale. Теперь внимание! Если вам так и не удалось настроить DPI в иксах, закрывайте эту статью, ставьте значение ползунка по вкусу, и радуйтесь тому, что работает. А что не работает — смиритесь (Это обычно Хром, Скайп, QtCreator, Yakuake, GTK).
Если же DPI в Иксах у вас правильная — то не трогайте этот ползунок! В идеале, даже, не крутите его туда-сюда, потому что, кажется, он где-то что-то пишет при этом. Закрывайте это окно нафиг. Согласно статье в блоге создателя этого ползунка (соль в комментах) он переопределяет системную DPI и ставит ещё несколько переменных. Проблема в том, что это переопределение видят не все программы, и получается каша. Поэтому мы не будет трогать ползунок, а всё настроим вручную.
Закрывайте окно Fonts. Вообще, сейчас самое время перезагрузить Иксы и посмотреть, что получилось. Должны работать и иметь удобный размер KDE, все его настройки и приложения. Панель плазмы, кстати, сама не вырастет. Но она векторная, и её всегда можно растянуть — кликните бутерброд слева и появятся кнопки. Так же размер в Долфине надо поставить вручную. Если же где-то ещё в KDE-приложениях кнопки и панели слишком мелкие, надо пошаманить размеры иконок в System Settings → Icons.
Настраиваем другие приложения
Chrome, Atom и другие
Эти приложения читают DPI напрямую из откуда получится и следуют ей как рыцарь кодексу. Если они читают что-то не то, то и выглядеть будут как-то не так. Обычно они игнорируют настройки в System Settings и следуют той DPI, которую возвращает xdpyinfo. Если там 96, то для Хрома можно использовать аргумент --force-device-scale-factor=2 , для Атома есть кривой плагин hidpi в официальной репе, для других программ свои костыли.
QtCreator, Yakuake, и другие приложения на Qt5
Вообще, они должны работать. Но у QtCreator бывает не масштабируется полоса инструментов, а у Yakuake полоса с табами. Причина в баге и в переменной окружения QT_AUTO_SCREEN_SCALE_FACTOR . Когда она равна 1 , Qt5 пытается сам найти значение DPI, а когда 0 — ждёт, что это значение ему дадут в других переменных. Баг в том, что KDE передаёт фигню.
Не забудьте, что переменная QT_DEVICE_PIXEL_RATIO устарела. Если вы её где-то ставили, то надо убрать.
Приложения на Qt4
Эти приложения, в общем, плохо умеют HiDPI. Но не всё потеряно. Qt4 создаёт очень гибкий интерфейс. Запускайте qtconfig-qt4 . Сначала смотрите шрифт и выставляйте удобный размер. Затем на вкладке Interface найдите костыль под названием «Global strut» (в переводе — глобальный костыль. ) Эта настройка означает, что инстансы QWidget и его потомков не могут быть меньше этого размера в пикселях, что бы с ними не делали. C помощью Minimum Width можно задать ширину скроллбаров, а с помощью Minimum Height — высоту панелей инструментов.
Приложения на GTK3
Здесь всё просто. Нужно установить в .xprofile две переменные:
GDK_SCALE=2 Командует GTK увеличить всё в 2 раза. Значение должно быть целым. GDK_DPI_SCALE регулирует увеличение шрифтов. Если после GDK_SCALE шрифты получились огромные, надо поставить GDK_DPI_SCALE=0.5
Приложения на GTK2
Здесь всё сложно. GTK2 вообще никак не умеет HiDPI. Но есть хак. Софтина под названием Oomox является генератором тем (скинов) для GTK. В том числе, с её помощью можно собрать такую тему под GTK2, которая будет имитировать HiDPI. Или найти такую тему готовую.
Приложения на Qt3, Gtk1, Motif
Здесь всё совсем сложно. Есть два возможных хака. Во-первых, можно воспользоваться способностью Kwin увеличивать весь экран. System Settings → Desktop Effects → Desktop Effects → Zoom. Средняя кнопка слева — это настройки, в том числе клавиши для включения и выключения. Второй способ — это запустить приложение в сервере удалённого рабочего стола и локально к нему подключиться. Я просто вставлю ссылку на скрипт, потому что настраивать это — вопрос отдельной статьи.
Установил сейчас Debian Stretch и Plasma 5 на новый ноут. На ноуте диагональ 13.3", разрешение 1920х1080. DPI, соответственно, равен 166.
Подскажите, пожалуйста, как лучше/правильнее поступить - выставить DPI или просто увеличить шрифты до нормального размера? Попробовал, и так и так непривычно.
Самое правильное в конфиге иксов у секции монитора указать физические размеры сторон экрана в милиметрах. Тогда dpi должон корректно посчитаться сам, и не факт что он будет квадратным. И вот тут всё будет зависеть от шрифтов.
Вообще правильно начинать так - сначала геометрия, если корявит - руками dpi, а потом уже шрифты. Просто dpi и геометрия это не только лишь шрифты, это ещё и масштабирование векторной графики и т.п.
Лично я так и не нашёл нормально выглядящих шрифтов для dpi отличных от квадратных 96, так что всюду с ним и живу. IMHO проблема в том, что винда в реальную геометрию полученную с монитора, калькуляцию dpi, неквадратные dpi и проч. не умеет до сих пор и тупо юзает фиксированное 96 всюду. Поэтому никто и не заморачивается под что то другое.
Jameson ★★★★ ( 29.12.16 00:28:12 )Последнее исправление: Jameson 29.12.16 00:30:50 (всего исправлений: 1)
У меня такой же монитор и разрешение экрана. Я в plasma5 просто подогнал размеры шрифтов, а dpi оставил 96. Но тут только личные предпочтения и степень нежелания сношаться с конфигами. Меня, например, при dpi 96 устраивает увеличевшееся пространство на экране без масштабирования. Но если со зрением проблемы, то конечно, всё выглядит мелковато.
Проблема в том, что даже если иксы нормально просчитают dpi (при условии, что драйвер видеокарты сможет достать нужные параметры EDID и эти параметры есть в ЖК-панели) - не факт, что всякие тулкиты и оконные менеджеры скушают этот параметр, даже если его укажешь вручную. Соответственно во все поля возникает проблема с подгонкой всего и вся к единому виду в плане масштаба, т.к. тот же gtk в окружении плазмы начинает выглядеть как г-вно, аналогично и наоборот. А если учитывать, что есть ещё всякие tk и т.д., то извращённость секса с этим добром превосходит все ожидания. Тут немалые драмы возникают по единому оформлению в плане цветов и темы, а масштабирование, оказывается, тоже по-разному устроено в кишках каждого тулкита.
Дисплеи с высоким разрешением становятся нормой, но, несмотря на это, в Linux есть ненадежные и запутанные настройки масштабирования DPI. Вот почему в этой статье мы решили обрисовать, как настроить масштабирование HiDPI в окружениях рабочего стола Linux, которые его поддерживают.
Инструкции Gnome
Gnome имеет довольно хорошую поддержку HiDpi, и с каждым выпуском она становится немного лучше, хотя он не применяет эти настройки автоматически на дисплее с высоким разрешением. Чтобы изменить масштабирование таким образом, чтобы оно было более удобным для такого рода дисплеев в среде рабочего стола Gnome, откройте терминал.
Настройка масштабирования через терминал стала возможной благодаря прямому взаимодействию с gsettings. Для пользователей дисплеев Apple Retina и других дисплеев с высоким разрешением этой команды должно быть достаточно:
Не фанат масштабного коэффициента 2? Хотите чего-то выше или ниже? Измените «2» на что-нибудь другое. Однако имейте в виду, что инструмент масштабного коэффициента принимает только целые числа.
Инструкции с корицей
Тем, кто хочет использовать дисплей HiDPi со средой рабочего стола Cinnamon, к счастью, не нужно изменять какие-либо настройки масштабирования для соответствия большим разрешениям. Это связано с тем, что разработчики, работающие над Cinnamon, очень стараются сделать так, чтобы все работало отлично, как есть. Фактически, когда вы входите в систему, рабочий стол выполняет вычисления, чтобы определить правильное масштабирование для всего. Тем не менее, если вы хотите настроить коэффициенты масштабирования вручную, вот как это сделать:
Проверь это - Как установить пакет тем StarLabs Gnome в LinuxОткройте меню «Корица» и найдите «настройки». В области настроек найдите «Общие» и щелкните по нему. Отсюда найдите «Масштабирование пользовательского интерфейса» и измените его с «Авто» на любой другой вариант.
KDE Plasma Инструкции
Это откроет центр управления, который позволит пользователю изменять масштаб отображения в KDE Plasma. Возьмите ползунок и перетащите его в нужное место. Затем нажмите «ОК», затем «Применить».
После применения настроек перезагрузите компьютер.
Budgie Инструкции
Включение этого в Budgie работает точно так же, как Gnome, хотя из-за отсутствия официальной поддержки вам придется делать это на свой страх и риск. Если все выглядит не совсем правильно, не вините никого. Чтобы включить масштабирование, откройте окно терминала и выполните следующую команду:
Как и в Gnome, настройте коэффициент масштабирования Budgie, изменив «2» на другое целое число.
Инструкции Unity
Среда рабочего стола Unity в Ubuntu, вероятно, одна из лучших для дисплеев HiDPI. Фактически, это один из немногих рабочих столов, который не полагается только на использование целых чисел для масштабирования. В результате все выглядит намного естественнее. Фактически, на большинстве дисплеев с высоким разрешением пользователям, вероятно, не потребуется изменять какие-либо настройки масштабирования. Тем не менее, если вы хотите настроить вещи вручную, откройте панель Unity, найдите «display» и нажмите клавишу ввода.
Отсюда выберите экран и найдите возможность «масштабировать» на основе меню и заголовков. Перетащите ползунок вверх или вниз, чтобы настроить DPI.
Проверь это - Как найти и удалить битые символические ссылки в LinuxИнструкции по просветлению
Несмотря на то, что просвещение выглядит несколько устаревшим (по сравнению с другими средами рабочего стола Linux, ему все еще удается иметь довольно хорошие настройки DPI., Пользователи могут легко настроить масштабирование пользовательского интерфейса и общий опыт с легкостью. Для этого щелкните правой кнопкой мыши на рабочем столе и наведите указатель мыши на «настройки». В области настроек контекстного меню выберите «Панель настроек».
На панели настроек щелкните раздел «Просмотр», затем выберите «Масштабирование». При масштабировании пользователь может легко настроить масштаб рабочего стола. Установите масштаб на 1,2 или около этого числа, так как он лучше всего смотрится на экранах высокого класса.
Рабочие столы, не упомянутые
Некоторые среды рабочего стола, такие как XFCE4, MATE и LXDE / LXQt, не имеют инструкций в этом списке. Это связано с тем, что разработчики этих рабочих столов Linux либо полностью игнорировали дисплеи с высоким разрешением, либо в настоящее время разрабатывают способ его поддержки в своих средах рабочего стола.
В результате практически нет настроек, о которых можно было бы говорить в этой статье, чтобы помочь масштабировать пользовательский интерфейс. Если вы используете Macbook Pro или другой компьютер с высококачественным дисплеем в Linux, лучше вместо этого использовать среды рабочего стола, перечисленные выше.
Читайте также: