Возможно ли иметь разные конфигурации DPI для двух разных экранов?
Я использую Ubuntu 12.04.3 с драйверами NVidia (319) для моей графической карты Quadro K2100M, и когда я переключаю свой основной экран ноутбука 3200x1800 в режим 1920x1080 (используя nvidia-settings
), дисплей становится размытым...
Я использую два экрана:
- Мой основной экран - это ЖК-дисплей с максимальным разрешением 1920x1200.
- Мой экран ноутбука (оригинальное разрешение 3200x1800) находится справа от этого.
Основная проблема в том, что в Ubuntu шрифт слишком мал на экране моего ноутбука. Из-за этого я хотел изменить разрешение своего ноутбука на 1920x1080.
Читая ответ Галгалеша, я попытался вычислить свой DPI, и вот конфигурация DPI, которую я должен иметь:
- 94x94 для моего основного ЖК-экрана 1920x1200
- 235x236 для экрана моего ноутбука 3200x1800
Есть ли способ иметь двойное разрешение DPI с расширенным рабочим столом?
7 ответов
Кажется, что люди все еще пытаются работать с несколькими мониторами и дисплеями HiDPI. Хороший обходной путь описан в архивной вики https://wiki.archlinux.org/index.php/HiDPI. Так что я:
- ноутбук 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
Итак, один за другим:
--output HDMI1
в моем случае это внешний экран,eDP1
это экран ноутбука.--scale 2x2
- сделать все на внешнем экране в два раза меньше--mode XxY
- явно установить разрешение экрана (не обязательно, если оно уже установлено)--fb XxY
- установить размер виртуального экрана (framebuffer) (важно без этого, вы сможете использовать только четвертую часть экрана). В моем случае один экран был поверх другого, поэтому я добавил эффективные высоты 2400+1800=4200. Также обратите внимание, что максимальный размер кадрового буфера может быть указан в xorg.conf - тогда вы не можете его превысить (он записан в первой строкеxrandr -q
выход).--pos XxY
- в моем случае я установил абсолютное расположение экранов, чтобы экран моего ноутбука находился прямо в нижней части внешнего экрана.
И это все! Все так свежо, как могло бы быть.
К вашему сведению: чтобы узнать названия экранов и доступные разрешения, можно запустить 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
В Ubuntu 20.04 я нажимал
Fractional Scaling
опция внизу настроек дисплея решила все. Это позволит масштабировать каждый монитор отдельно.
Я использовал решение 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, а затем заставить клиентов использовать его без перезапуска.
Почему это размыто?
Ваш экран всегда отображает 3200x1800 пикселей. Если вы уменьшите разрешение экрана на вашем компьютере, это просто означает, что ваш экран должен масштабировать изображение в соответствии с вашим экраном. В зависимости от соотношения между вашим собственным разрешением и текущим разрешением, при таком масштабировании изображение будет размытым.
Вы можете найти больше информации о масштабировании и собственном разрешении здесь: https://en.wikipedia.org/wiki/Native_resolution
Как я могу сделать текст больше?
Если текст маленький, у вас есть два варианта:
1. Измените размер шрифта в Ubuntu
Как изменить шрифты и настроить их размер?
2. Измените DPI (увеличит весь интерфейс, а не только текст)
Как найти и изменить DPI экрана? (ответ от @whtyger)
Эти ответы все отлично, и помогли мне ранее, но недавно
sudo apt-get upgrade
удалил мой randr-config! Пытаясь восстановить мои настройки, я обнаружил, что больше не могу вывести мышь за верхний 1/4-й сектор второго экрана, независимо от ввода --fb. Из https://wiki.archlinux.org/index.php/HiDPI я в конце концов обнаружил, что добавление панорамирования сработало. Кроме того, использование "--right-of" или "--left-of" проще, чем "--pos".
"Обычно, если ваш HiDPI-монитор (ноутбук) имеет пиксели AxB, а ваш обычный монитор (внешний) имеет CxD, и вы масштабируете по [ExF], командная строка для right-of:"
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
У меня была похожая проблема, и я решил ее таким образом.
У меня есть внешний большой экран 24" 3840x2160 и ноутбук того же разрешения 3840x2160, но маленький экран 15,4"
Я хотел, чтобы экран ноутбука был увеличен, потому что масштабирование по умолчанию слишком мало..
Уменьшение с помощью xrandr, как мы обычно видим, приводит к размытому экрану, решение состоит в том, чтобы масштабировать все с помощью xrandr, а затем использовать коэффициент масштабирования gnome:
Вот как это сделать (внешний экран в верхней части экрана ноутбука, но вы можете изменить его, изменив параметры pos)
xrandr --output DP-0 --primary --mode 3840x2160 --pos 0x0 --scale 2x2 --rotate normal --output DP-2 --mode 3840x2160 --pos 0x4320 --scale 1x1 --rotate normal --output DP-1 --off
Пояснения:
--output : DP-1 is the external screen, DP-2 is the laptop screen (use xrandr -q to get your devices names)
--mode : both screen have same definitions 3840x2160
--scale 2x2 for external, 1x1 for laptop, this is "relative" to the primary which is external screen here..
--pos : external screen is at position 0x0, laptop screen is bellow at pos 0x(2160*2)=0x4320 because external screen is scalled by 2
затем
gsettings set org.gnome.desktop.interface scaling-factor 2
ИЛИ
gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gdk/WindowScalingFactor': <2>}"
Я смог решить эту проблему (с проблемами), используя детали, изложенные в следующем обсуждении 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 эта проблема решена без необходимости прибегать к исправлениям, которые частично работают в командной строке (эта проблема не подходит для игр)
Я трачу часы на решение этой проблемы. У меня ноутбук 4k и внешний монитор 1080p. Если я установил масштабирование на "200%", внешние мониторы будут отображать увеличенный текст значков и т. Д.
Я пробовал команды xrandr с "--scale", но они не дали ожидаемых результатов. Итак, у меня есть команда xrandr, которая отлично работает для меня. Я желаю, чтобы это помогло кому-то другому.
xrandr --output HDMI-1-1 --mode 1920x1080 --pos 0x0 --rate 60.00 --transform 2,0,0,0,2,0,0,0,1 --output eDP-1-1 --mode 3840x2160 --pos 0x2160 --primary --rate 60.00
Эта команда работает как внешний монитор с масштабированием до "100%" и встроенный экран с масштабированием до "200%". Эта команда помещает внешний монитор над встроенным. Имейте в виду, что вы, вероятно, измените имена --output на свои.
У меня устаревший монитор 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 и другим за то, что поделились своими знаниями!
Кулачный бег $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
Я сделал скрипт для автоматизации расчета в anwser Артема:
#!/usr/bin/env bash
# usage:
# ./script.sh 8 # to set scale 1.8
Y1=1440
X2=1680
Y2=1050
xrandr --output HDMI2 --scale 1.$1x1.$1 --fb $(($X2 * 1$1 / 10))x$(($Y1 + $Y2 * 1$1 / 10)) --pos 0x0
xrandr --output eDP1 --scale 1x1 --pos 0x$(($Y2 * 1$1 / 10))
Это уродливо, потому что bash не поддерживает операции с плавающими точками, но работает.
Я попробовал все вышеперечисленное, и, похоже, ничего не работает безупречно. В конце концов, я просто поместил две терминальные записи в свое меню Fluxbox. Один для дисплея с высоким разрешением и один для низкого разрешения.
[exec] (Terminal 9pt) { xterm -fa Hack:size=9 } <>
[exec] (Terminal 12pt) { xterm -fa Hack:size=12 } <>