Возможно ли иметь разные конфигурации DPI для двух разных экранов?

123

Я использую Ubuntu 12.04.3 с драйверами NVidia (319) для моей графической карты Quadro K2100M, и когда я переключаю свой основной экран ноутбука 3200x1800 в режим 1920x1080 (используя nvidia-settings), дисплей становится размытым ...

Я использую два экрана:

  • Мой основной экран - это ЖК-дисплей с максимальным разрешением 1920x1200.
  • Мой экран ноутбука (оригинальное разрешение 3200x1800) находится справа от этого.

Основная проблема в том, что в Ubuntu шрифт слишком мал на экране моего ноутбука. Из-за этого я хотел изменить разрешение своего ноутбука на 1920x1080.

Читая ответ Галгалеша , я попытался вычислить свой DPI, и вот конфигурация DPI, которую я должен иметь:

  • 94x94 для моего основного ЖК-экрана 1920x1200
  • 235x236 для экрана моего ноутбука 3200x1800

Есть ли способ иметь двойное разрешение DPI с расширенным рабочим столом?

Энтони О.
источник
3
Что ж, управление любым ЖК-экраном с не родным разрешением будет выглядеть размытым. Это связано с тем, что пиксели расположены фиксированным образом, а сигнал не соответствует этому. Что именно вы ожидаете? Возможно, отключить масштабирование? Но тогда он отображается только в середине экрана, а не во весь экран. Для оптимального отображения всегда держите его на собственном разрешении экрана. Я не думаю, что это как-то связано с Ubuntu.
gertvdijk
2
@gertvdijk: Так есть ли у вас способ сохранить оба монитора в их родном разрешении экрана? Я думаю, это то, что спрашивает Энтони.
Белдаз
2
@beldaz Мой ответ был на пересмотр 1 вопроса . Там не упоминалось ничего, связанного с настройкой двойного экрана в то время. Поскольку вопрос был значительно изменен, это вызывает удивление у всех постов, измененных после этой даты. Это в основном лишает законной силы все, что способствует, и действительно снижает мою мотивацию помочь. Пользователи должны задать новый вопрос вместо этого, по моему мнению.
gertvdijk
@gertvdijk Извините, теперь имеет смысл.
Белдаз
Интересно, облегчает ли это возможность использования Wayland в новейшей Ubuntu?
mkataja

Ответы:

120

Кажется, что люди все еще пытаются работать с несколькими мониторами и дисплеями HiDPI. Хороший обходной путь описан в архивной вики https://wiki.archlinux.org/index.php/HiDPI#Multiple_displays . Так что я:

  • ноутбук asus ln303ux: 3200x1800,
  • внешний монитор: 1920x1200

Сейчас я использую Ubuntu 14.10 и GNOME Shell 3.12.2, которая имеет довольно полезную поддержку HiDPI. Поэтому я просто использую встроенную поддержку HiDPI - коэффициент масштабирования равен 2 (его можно настроить через графический интерфейс). Это означает, что на внешнем мониторе я получаю все в два раза больше, чем приемлемо. Таким образом, я использую xrandr; но вместо уменьшения размера экрана ноутбука я увеличиваю масштаб экрана внешнего монитора:

xrandr --output HDMI1 --scale 2x2 --mode 1920x1200 --fb 3840x4200 --pos 0x0
xrandr --output eDP1 --scale 1x1 --pos 320x2400

Итак, один за другим:

  1. --output HDMI1в моем случае это внешний экран, eDP1это экран ноутбука.
  2. --scale 2x2 - сделать все на внешнем экране в два раза меньше
  3. --mode XxY - явно установить разрешение экрана (не обязательно, если оно уже установлено)
  4. --fb XxY- установить размер виртуального экрана (framebuffer) ( важно без этого, вы сможете использовать только четвертую часть экрана). В моем случае один экран был поверх другого, поэтому я добавил эффективные высоты 2400 + 1800 = 4200. Также обратите внимание, что максимальный размер кадрового буфера может быть указан в xorg.conf - тогда вы не можете его превысить (он записан в первой строке xrandr -qвывода).
  5. --pos XxY- в моем случае я установил абсолютное расположение экранов, чтобы экран моего ноутбука находился прямо в нижней части внешнего экрана. Значение Y здесь удваивает высоту внешнего монитора.

И это все! Все так свежо, как могло бы быть.

К вашему сведению: чтобы узнать названия экранов и доступные разрешения, можно запустить xrandr --current. Дополнительную информацию о настройке разрешения можно найти здесь: https://wiki.ubuntu.com/X/Config/Resolution .

ОБНОВЛЕНИЕ - ВАРИАНТ 2: еще один интересный обходной путь для приложений, поддерживающих GTK3. Если я обычно использую только одно приложение на большом экране (например, некоторые IDE, например, leksah), я не изменяю размер экрана, но запускаю приложение, масштабированное до его исходного размера

env GDK_SCALE=0.5 GDK_DPI_SCALE=0.5 CLUTTER_SCALE=0.5 appname
артем
источник
7
получил error of failed request: BadValue (integer parameter out of range for operation):-(
Juh_
4
Эта --fbопция, кажется, не активирует более четверти 2x2экрана (курсор мыши нельзя перемещать за верхний левый квадрант)
EoghanM
2
Масштабирование работает, но вы не потеряете HiDPI? Все выглядит масштабно и размыто.
Энди
8
Для установки рядом с внешним монитором 1920x1080, сидящим слева от моего ноутбука с высоким разрешением 3200x1800 hiDPI:xrandr --output eDP1 --scale 1x1 --pos 3840x0 ; xrandr --output HDMI1 --scale 2x2 --mode 1920x1080 --fb 7680x2160 --pos 0x0
Дэниел Бауэр
2
Параметр --fb равен 2 * внешний монитор + экран ноутбука
Брайан С.
10

Почему это размыто?

Ваш экран всегда отображает 3200x1800 пикселей. Если вы уменьшите разрешение экрана на вашем компьютере, это просто означает, что ваш экран должен масштабировать изображение в соответствии с вашим экраном. В зависимости от соотношения между вашим собственным разрешением и текущим разрешением, при таком масштабировании изображение будет размытым.

Вы можете найти больше информации о масштабировании и собственном разрешении здесь: https://en.wikipedia.org/wiki/Native_resolution

Как я могу сделать текст больше?

Если текст слишком маленький, у вас есть два варианта:

1. Измените размер шрифта в Ubuntu

Как изменить шрифты и настроить их размер?

2. Измените DPI (увеличит весь интерфейс, а не только текст)

Как найти и изменить экран DPI? (ответ от @whtyger)

Galgalesh
источник
1
Так же, как примечание об увеличении размеров шрифта. Скорее увеличьте DPI, чтобы масштабировать весь пользовательский интерфейс. Это должно быть правильно распознано автоматически (чтение EDID с вашего дисплея), но если это не удается: как найти и изменить DPI экрана?
gertvdijk
23
На самом деле это не ответ на мой вопрос. Я использую два разных экрана с разными разрешениями . Я сделал вычисления: мой левый главный ЖК-экран должен иметь разрешение 94x94 DPI, тогда как мой правый экран ноутбука должен иметь 235x235 DPI ... И я не могу найти никакого способа установить два разных разрешения DPI, кроме как настроить nvidia для запуска 2 отделил X, и тогда я не могу пропустить одно окно слева направо ... Windows намного лучше справится с этой проблемой :(
Энтони О.
9
-1 за полное игнорирование сути вопроса
Мартин Конечни
8
@AnthonyO. Пожалуйста, не меняйте свой вопрос после публикации ответа, который вам не нравится. На момент публикации этого ответа вы не упомянули ничего о настройке двух экранов (см. Редакцию 1 ). Изменение вашего вопроса лишает законной силы все, что уже опубликовано, и вы не должны этого делать. Вместо этого отмените редактирование вопроса и опубликуйте новый вопрос.
gertvdijk
5
@MartinKonecny ​​Исходный вопросник существенно отредактировал свой вопрос, этот ответ действительно отвечает на его первоначальный вопрос, проверьте исправления.
Джейми Китсон
7

Я использовал решение artmem, но столкнулся с проблемой мыши, упомянутой EoghanM. Обходной путь, который я нашел в старом сообщении об ошибке, с которым он связан, связан с --panning.

Я снимаю для: - DP1-2 3840x2160 в родном DIP. - eDP1 1366x768, масштабированный, чтобы выглядеть разумно справа от DP1-2.

Я получаю это, имея кадровый буфер, подобный DP1-2 + (2x eDP1), а затем масштабирую все, что происходит в eDP1, на 1/2.

Это должно быть просто, но xrandr немного сложнее.

Здесь --scale используется для уменьшения всего, что собирается в eDP1, на 1/2. --Panning совпадает с eDP1 в ​​исходном буфере кадров с позицией (+ 3840 + 0) справа от DP1-2. + 0 + 2160 будет ниже.

xrandr -d :0 --fb 6572x3696 --output DP1-2 --mode 3840x2160 --scale 1x1 --rate 60 --pos 0x0 --primary

# sometimes panning get applied incorrectly when switching from some other mode, running it twice is a work around
xrandr -d :0 --output eDP1 --off
xrandr -d :0 --fb 6572x3696 --output eDP1  --mode 1366x768  --scale 2x2 --panning 2732x1536+3840+0
xrandr -d :0 --fb 6572x3696 --output eDP1  --mode 1366x768  --scale 2x2 --panning 2732x1536+3840+0

Я также установил Xft.dpi на 185

$ cat ~/.Xresources
Xft.dpi: 185

Когда я отключаюсь от внешнего монитора, я запускаю:

xrandr -d :0 --output DP1-2 --off
xrandr -d :0 --fb 2732x1536 --output eDP1  --mode 1366x768  --scale 2x2 --panning 2732x1536+0+0 --pos 0x0 --primary

Это выглядит не очень хорошо, но я не далеко от своего стола. Вы можете обойти это, изменив Xft.dpi и перезапустив все свои программы на рабочем столе. Я не знаю, как изменить Xft.dpi, а затем заставить клиентов использовать его без перезапуска.

Брайан С.
источник
Панорамирование было последней частью головоломки - оно решило проблему с курсором, который застрял на четверти проблемы с экраном. Спасибо, Брайан!
rtindru
2
"запустить его дважды" ???? Святой пиксель, это работает (я уже применял панорамирование, но это правильно применяется, только если я запускаю одну и ту же команду дважды).
Риккардо Галли
Да, я заметил, что это работает примерно каждый раз, когда я запускал его, поэтому я подумал, что попробую это дважды, и вот мы здесь.
Брайан С.
Хорошо, так что это не работает с ядром 4.5.2. Я установил именно это ядро ​​для решения проблемы, связанной с докером, в 4.5.1, и теперь приведенный выше скрипт оставляет меня с черным экраном. Чтобы исправить это на 4.5.2, я сначала выполняю команды eDP1 без --off, а затем - команду DP1-2.
Брайан С.
1
Наконец то с панорамированием поработали! У меня все еще есть глючная мышь и экран (так как я начал использовать xrandr). Любая идея?
18:18
4

Я смог решить эту проблему (с проблемами), используя детали, изложенные в следующем обсуждении github: https://github.com/linuxmint/Cinnamon/issues/3606

Внешний монитор QHD (2560X1440), внутренний монитор ноутбука 3200x1800

xrandr --output eDP-1 --scale 1x1 --pos 0x2880
xrandr --output DP-1 --mode 2560x1440 --scale 2x2 --fb 5120x4680

ИЛИ ЖЕ

Внешний монитор FHD (1920x1080), внутренний монитор ноутбука 3200x1800

xrandr --output eDP-1 --scale 1x1 --pos 0x2160
xrandr --output DP-1 --mode 1920x1080 --scale 2x2 --fb 3840x3960

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

В Linux / Gnome 2017 года необходимо решение для смешанного масштабирования с несколькими мониторами. И в Windows 10, и в OS X эта проблема решена без необходимости прибегать к исправлениям, которые частично работают в командной строке (эта проблема не подходит для игр)

Jeets
источник
1
Это новый ответ или вы пытаетесь сообщить об ошибке?
user68186
Это уточнение существующего ответа, с большим количеством вариантов, которые можно использовать. Ответ, предоставленный @artem выше, объясняет, как работают эти настройки. Я просто попытался предоставить 2 варианта, которые можно использовать как есть для тех, у кого есть внешний монитор QHD или FHD и основной монитор 4K / монитор ноутбука. Ошибка в разрыве, который вы видите с этим решением. Это присуще этому подходу.
Джитс
2
С распространением 4k и множественным разрешением я согласен с последним пунктом, который требует разрешения. Раньше было не так уж и плохо, но теперь, когда у меня есть 4K, это просто разрушает мою установку на одном мониторе. Надеюсь, в Ubuntu 18 LTS это исправят.
нейросеть
3
Это 2018 год ... все тот же дерьмо :)
Стефанос Каланцис
Уэйленд отлично подходит для этого. За исключением того, что только для этого ... Получил хороший опыт с Wayland + KDE, лучше, чем Gnome + Wayland. Я вернулся к X из-за отсутствия поддержки некоторых программ, которые работают только на X, и из-за проблем со стабильностью. 2018 ...
Виктор
4

Эти ответы все отлично, и помогли мне ранее, но недавно

sudo apt-get upgrade 

удалил мой randr-config! Пытаясь восстановить мои настройки, я обнаружил, что больше не могу вывести мышь за верхний 1/4-й сектор второго экрана, независимо от ввода --fb. Из https://wiki.archlinux.org/index.php/HiDPI#Side_display я в конце концов обнаружил, что добавление панорамирования сработало. Кроме того, использование «--right-of» или «--left-of» проще, чем «--pos».

«Обычно, если ваш HiDPI-монитор (ноутбук) имеет пиксели AxB, а ваш обычный монитор (внешний) имеет CxD, и вы масштабируете с помощью [ExF], командная строка для права:»

xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning [C*E]x[D*F]+[A]+0 --scale [E]x[F] --right-of eDP-1
ONECore
источник
Это интересно, и определенно кажется, что это может быть кому-то полезно, хотя я точно не уверен, что это ответ на этот вопрос. Может быть, вы должны открыть, а затем ответить на свой вопрос? Не совсем уверен.
Хи Джин,
1
@ Эмили: я думаю, что этот ответ принадлежит здесь. Сегодня я использовал ответ Артема, и у меня была точная проблема, заявленная ONECore (мышью можно было использовать только верхний левый квадрант экрана). К счастью, я увидел этот ответ, и панорамирование сработало мгновенно.
BrainCore
Да, извините, я хотел, чтобы это был ответ на ответ @ artem, но Stackexchange супер клевый и не даст мне ответить, пока я не получу 50 очков брауни.
ONECore
Также обратите внимание, что это не кажется постоянным, поэтому, если вы не добавите его в xorg.conf, он исчезнет при каждом перезапуске. Но затем, если вы добавите его туда, он заставит эту настройку, несмотря ни на что (иногда я не подключаю монитор). Поэтому мне очень легко просто создать оболочку и выполнить ее, когда захочу. Просто добавьте приведенный выше код в текстовый файл, заканчивающийся на .sh (например, resolution.sh), а затем сделайте его исполняемым с помощью «chmod 0700 resolution.sh» в терминале.
ONECore
Большое спасибо за то, что поделились своим опытом @BrainCore!
Хи Джин,
1

У меня устаревший монитор 1024x768, подключенный к (менее устаревшему) ноутбуку.
Окна отображаются в совершенно разных размерах, намного больше на внешнем мониторе (который имеет более старый, больший шаг точек).
Я нашел команду для масштабирования монитора:

xrandr --output VGA-1 --scale 1.5x1.5

VGA-1 - это внутреннее имя монитора, которое можно найти, выполнив следующую команду:

xrandr --current | grep connected

Эффект заключается в том, что теперь старый монитор отображает его содержимое практически в том же размере, что и ноутбук.

Как ни странно, работает масштабирование 1,5, а не 1,45, дисплей (в моем случае) становится черным.

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

Я запустил программу:

arandr &

установить относительные положения экрана, чтобы исправить это.
Он работает как Настройки> Устройства> Настройки дисплеев .

Я установил его с:

sudo apt-get install arandr

Спасибо @LuisAlvarado и другим за то, что поделились своими знаниями!

Хуан Ланус
источник
Это работает для меня временно, но не прилипает, если я перезагружаюсь. Я думаю, что мне нужно найти сценарий, чтобы делать то arandr, что здесь делается, а затем поместить все это в мой bashrc или что-то еще. Спасибо!
Макс фон Хиппель
arandr может экспортировать файл конфигурации. Я установил файл на своем рабочем столе и передавал его в arandr при каждой перезагрузке. Я не разработал сценарий, и теперь у меня есть монитор, и я больше не использую arandr.
Хуан Ланус
0

Fist run $xrandrдля отображения всех выходов

Screen 0: minimum 320 x 200, current 7680 x 2160, maximum 8192 x 8192
eDP-1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
   3840x2160     60.00*+  59.98    59.97  
   3200x1800     59.96    59.94  
   2880x1620     59.96    59.97   
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 connected 3840x2160+3840+0 (normal left inverted right x axis y axis) 521mm x 294mm
   1920x1080     60.00*+  50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
   1680x1050     59.88  
   1280x1024     75.02    60.02

Как вы можете видеть, в этом случае подключен второй монитор. DP-3 Затем вы можете перепродать дисплей: $xrandr --output DP-3 --auto --scale 2x2

Abdelhak
источник