[arch-general] xrandr with XPS 13" (3840x2160) HiDPI and 30" (2560x1600) LowDPI
Hi, I am using ArchLinux with i3 on my Dell XPS 13" 9370 @ 3840x2160) HiDPI and everything works great with: .Xresources: ! xft fonts !---------------------------------------------------------------------- Xft.dpi: 220 Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintfull Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb ! urxvt !--------------------------------------------------------------------- URxvt*font: xft:DejaVu Sans Mono for Powerline:size=12: \ minspace=False:antialias=true, \ xft:Segoe UI Emoji:size=12:minspace=False:antialias=true URxvt*boldFont: xft:DejaVu Sans Mono for Powerline:size=12: \ minspace=False:antialias=true, \ xft:Segoe UI Emoji:size=12:minspace=False:antialias=true URxvt.letterSpace: -1 and in /etc/profile.d/hidpi.sh export GDK_SCALE=2 export GDK_DPI_SCALE=0.5 export QT_AUTO_SCREEN_SCALE_FACTOR=0 export QT_SCREEN_SCALE_FACTORS=2 export QT_QPA_PLATFORMTHEME=qt5ct However recently I bought a Dell DA300 Mobile Adapter and decided I wanted to use my external Dell 30" 3000WFP (2560x1600) over DisplayPort. I found this blog article https://blog.summercat.com/configuring-mixed-dpi-monitors-with-xrandr.html which explains exactly what I am trying to do. The only difference is the placement of the external screen (mine is on the left of the laptop) and the screen size and resolution. In that article he uses his HiDPI on both screens and then scales down on the external screen, which is why he doubles the resolution of the external display. The reason he does that is so he doesn't have to touch .Xresources or fiddle with toolkit scaling options. Using this command I was able to get it working great with a single external monitor ie the Dell 30" 3000WFP @ (2560x1600) xrandr --dpi 220 --fb 5120x3200 \ --output eDP1 --off \ --output DP1 --scale 2x2 --panning 5120x3200 With the dual-monitor setup I'm struggling to understand the panning option. I have looked at https://wiki.archlinux.org/index.php/xrandr and the man file and still couldn't figure that track x track y part out. It's not very easy to understand. So far for the external monitor I have this: xrandr --dpi 220 --fb 8960x5360 \ --output eDP1 --mode 3840x2160 \ --output DP1 --scale 2x2 --pos -2560x0 --panning 5120x3200+2560+0 What I want is to be able to access the whole area of both screens. In his example he has a laptop at 3200x1800 and an external monitor at 1920x1080
Dual monitors
When I want to use both monitors, this is the command I run:
xrandr --dpi 276 --fb 7040x3960 \ --output eDP-1 --mode 3200x1800 \ --output DP-1-2 --scale 2x2 --pos 3200x0 --panning 3840x2160+3200+0
Here's an explanation of the options:
Global options: --dpi 276 sets the DPI to 276. --fb 7040x3960 creates one screen with resolution 7040x3960. This is the combined resolution of the two monitors. The high DPI monitor has 3200x1800 resolution. The lower DPI monitor has 1920x1080 resolution, but I double it as I scale it by 2 (see below). Combine these like so: 3200+1920*2 x 1800+1080*2 = 7040x3960. Both monitors share this screen. High DPI monitor options (--output eDP-1): --mode 3200x1800 says to use resolution 3200x1800. This is the default, but specifying it is necessary if the monitor is disabled (as it is when using the external monitor by itself) as it enables the monitor. Lower DPI monitor options (--output DP-1-2): --scale 2x2 is similar to zooming out. This is necessary as we set the DPI globally to that of the high DPI monitor. --pos positions it to the right of the laptop monitor. --panning allows our pointer to access the whole area.
Any help or tips would be much appreciated! -- Tyler
Hi Tyler,
With the dual-monitor setup I'm struggling to understand the panning option. I have looked at https://wiki.archlinux.org/index.php/xrandr and the man file and still couldn't figure that track x track y part out. It's not very easy to understand.
Have a look at the RRSetPanning protocol request in https://www.x.org/releases/X11R7.5/doc/randrproto/randrproto.txt and see if that helps. -- Cheers, Ralph. https://plus.google.com/+RalphCorderoy
Am 31.07.2018 um 05:17 schrieb Tyler:
With the dual-monitor setup I'm struggling to understand the panning option. I have looked at https://wiki.archlinux.org/index.php/xrandr and the man file and still couldn't figure that track x track y part out. It's not very easy to understand.
The panning option might be there as a workaround for a bug in xorg. Since xorg 1.20 the patch to resolve that should be included, so you can try your configuration without panning. https://wiki.archlinux.org/index.php/HiDPI#Side_display
The panning option might be there as a workaround for a bug in xorg. Since xorg 1.20 the patch to resolve that should be included, so you can try your configuration without panning. https://wiki.archlinux.org/index.php/HiDPI#Side_display The closest I have been able to get was with
xrandr --output eDP1 --auto --output DP1 --auto --scale 2x2 --right-of eDP1 Now everything appears correctly except my laptop screen is on the wrong side. https://i.imgur.com/EEJuNij.jpg When I tried the reverse xrandr --output eDP1 --auto --output DP1 --auto --scale 2x2 --left-of eDP1 I didn't just get a flipped result, I got my browser showing over the middle https://i.imgur.com/QW0IHYw.jpg also the black space in the first screenshot is supposed to be there, that's where there is no screen space as my laptop has a higher resolution than my external monitor. It should look like screenshot 1 except that workspace 1 should be on the opposite side. I also noticed a problem where applications opened on my laptop screen don't have correct scaling on my external monitor which is another thing he spoke of in that blog article.
Second, switching back and forth between dual monitors to one monitor lead to interesting behaviour. For example, I kept losing the scale setting on the lower DPI monitor. exactly that, although it didn't seem to effect GTK3 applications, only Qt5 ones.
Thankfully things in Wayland seem a lot simpler! In Sway it's as simple as https://github.com/swaywm/sway/wiki#display-configuration Have to wait for firefox and thunderbird to have Wayland patches before I switch as the fonts were all blurry. For some reason https://aur.archlinux.org/packages/firefox-wayland/ is really out of date. This has been a major pain for me. -- Tyler
Am 01.08.2018 um 04:20 schrieb Tyler:
When I tried the reverse
xrandr --output eDP1 --auto --output DP1 --auto --scale 2x2 --left-of eDP1
I didn't just get a flipped result, I got my browser showing over the middle https://i.imgur.com/QW0IHYw.jpg
I guess --right-of/--left-of don't take the scale into account. Try to position your monitors absolutely with --pos, probably 0x0 for DP1 and 5120x0 for eDP1.
I guess --right-of/--left-of don't take the scale into account. Try to position your monitors absolutely with --pos, probably 0x0 for DP1 and 5120x0 for eDP1.
xrandr --dpi 220 --output eDP1 --pos 5120x0 --auto \ --output DP1 --pos 0x0 --auto --scale 2x2 https://i.imgur.com/pwcGct2.jpg success! now I guess the only thing to do is to find a solution for Qt5. Windows on my LowDPI screen don't change scale according to what screen they are on eg everything is really small, on the laptop screen the scaling is what it should be. GTK3 works fine though. i think that is why he didn't use auto https://blog.summercat.com/configuring-mixed-dpi-monitors-with-xrandr.html says:
Second, switching back and forth between dual monitors to one monitor lead to interesting behaviour. For example, I kept losing the scale setting on the lower DPI monitor.
that's not exactly what is happening to me - because GTK2/3 works fine. Maybe there are some more Qt vars I can play with besides export QT_AUTO_SCREEN_SCALE_FACTOR=0 #export QT_SCALE_FACTOR=2 export QT_SCREEN_SCALE_FACTORS=2 export QT_QPA_PLATFORMTHEME=qt5ct -- Tyler
Le 01/08/2018 à 12:00, Tyler a écrit :
Second, switching back and forth between dual monitors to one monitor lead to interesting behaviour. For example, I kept losing the scale setting on the lower DPI monitor. that's not exactly what is happening to me - because GTK2/3 works fine.
Maybe there are some more Qt vars I can play with besides
export QT_AUTO_SCREEN_SCALE_FACTOR=0 #export QT_SCALE_FACTOR=2 export QT_SCREEN_SCALE_FACTORS=2
Try setting the QT_SCREEN_SCALE_FACTORS per display like this for instance: QT_SCREEN_SCALE_FACTORS=eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1;
Try setting the QT_SCREEN_SCALE_FACTORS per display like this for instance: QT_SCREEN_SCALE_FACTORS=eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1;
I didn't even know that was possible. I tried with: QT_SCREEN_SCALE_FACTORS=eDP1=2,DP1=1 to test but I am noticing it seems to be truncating to when I look at: env | grep QT_SCREEN_SCALE_FACTOR QT_SCREEN_SCALE_FACTORS=eDP1=2 Thanks for the tip though! -- Tyler
Tyler, On Wed, Aug 1, 2018 at 1:58 PM, Tyler <tylera@privatedemail.net> wrote:
Try setting the QT_SCREEN_SCALE_FACTORS per display like this for instance: QT_SCREEN_SCALE_FACTORS=eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1;
I didn't even know that was possible.
I tried with: QT_SCREEN_SCALE_FACTORS=eDP1=2,DP1=1 to test but I am noticing it seems to be truncating to when I look at:
env | grep QT_SCREEN_SCALE_FACTOR QT_SCREEN_SCALE_FACTORS=eDP1=2
Thanks for the tip though!
use semicolon ";" not comma "," to separate. Cheers Bastian
-- Tyler
On Wed, Aug 1, 2018 at 1:58 PM, Tyler <tylera at privatedemail.net> wrote:
Try setting the QT_SCREEN_SCALE_FACTORS per display like this for instance: QT_SCREEN_SCALE_FACTORS=eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1;
I didn't even know that was possible.
I tried with: QT_SCREEN_SCALE_FACTORS=eDP1=2,DP1=1 to test but I am noticing it seems to be truncating to when I look at:
env | grep QT_SCREEN_SCALE_FACTOR QT_SCREEN_SCALE_FACTORS=eDP1=2
Thanks for the tip though!
use semicolon ";" not comma "," to separate.
oops i copy pasted the wrong example. tya99@host:~ $ export QT_SCREEN_SCALE_FACTORS=eDP1=2;DP1=1 tya99@host:~ $ env |grep QT_SCREEN_SCALE_FACTOR QT_SCREEN_SCALE_FACTORS=eDP1=2 seems DP1=1 lost it's setting. I have noticed when using xf86-intel-video displays are eDP1 and DP1 and when using modesetting they're eDP-1 and DP-1. -- Tyler
Le 01/08/2018 à 14:11, Tyler a écrit :
On Wed, Aug 1, 2018 at 1:58 PM, Tyler <tylera at privatedemail.net> wrote:
Try setting the QT_SCREEN_SCALE_FACTORS per display like this for instance: QT_SCREEN_SCALE_FACTORS=eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1; I didn't even know that was possible.
I tried with: QT_SCREEN_SCALE_FACTORS=eDP1=2,DP1=1 to test but I am noticing it seems to be truncating to when I look at:
env | grep QT_SCREEN_SCALE_FACTOR QT_SCREEN_SCALE_FACTORS=eDP1=2
Thanks for the tip though!
use semicolon ";" not comma "," to separate. oops i copy pasted the wrong example.
tya99@host:~ $ export QT_SCREEN_SCALE_FACTORS=eDP1=2;DP1=1 tya99@host:~ $ env |grep QT_SCREEN_SCALE_FACTOR QT_SCREEN_SCALE_FACTORS=eDP1=2
seems DP1=1 lost it's setting.
Try quoting then. ;)
I have noticed when using xf86-intel-video displays are eDP1 and DP1 and when using modesetting they're eDP-1 and DP-1.
Ah that might be correct.
Hi Tyler,
$ export QT_SCREEN_SCALE_FACTORS=eDP1=2;DP1=1 $ env |grep QT_SCREEN_SCALE_FACTOR QT_SCREEN_SCALE_FACTORS=eDP1=2
seems DP1=1 lost it's setting.
Others have pointed out the flaw, but to investigate next time, `set -x' is useful. $ set -x $ export QT_SCREEN_SCALE_FACTORS=eDP1=2;DP1=1 + export QT_SCREEN_SCALE_FACTORS=eDP1=2 + QT_SCREEN_SCALE_FACTORS=eDP1=2 + DP1=1 $ set +x $ -- Cheers, Ralph. https://plus.google.com/+RalphCorderoy
Le 01/08/2018 à 13:58, Tyler a écrit :
Try setting the QT_SCREEN_SCALE_FACTORS per display like this for instance: QT_SCREEN_SCALE_FACTORS=eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1; I didn't even know that was possible.
I tried with: QT_SCREEN_SCALE_FACTORS=eDP1=2,DP1=1 to test but I am noticing it seems to be truncating to when I look at:
env | grep QT_SCREEN_SCALE_FACTOR QT_SCREEN_SCALE_FACTORS=eDP1=2
Thanks for the tip though!
The separator is a ; not a comma. ;) And it is likely {E,}DP-1, not {E,}DP1. And you probably have to use quotes around the whole value, like this: QT_SCREEN_SCALE_FACTORS="eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1;"
The separator is a ; not a comma. ;) And it is likely {E,}DP-1, not {E,}DP1. And you probably have to use quotes around the whole value, like this:
QT_SCREEN_SCALE_FACTORS="eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1;"
Hmm sadly, it doesn't seem to help. $ env |grep QT QT_SCREEN_SCALE_FACTORS=eDP1=2;DP1=1;HDMI1=1;DP2=1;HDMI2=1; QT_QPA_PLATFORMTHEME=qt5ct QT_AUTO_SCREEN_SCALE_FACTOR=0 I rebooted and set: xrandr --output eDP1 --pos 5120x0 --auto \ --output DP1 --pos 0x0 --auto --scale 2x2 and applications Qt apps like wireshark and virtualbox are still rendering with 2x scaling on both screens. (which looks normal on the hidpi one, and small on the lowdpi one). -- Tyler
Le 01/08/2018 à 14:27, Tyler a écrit :
The separator is a ; not a comma. ;) And it is likely {E,}DP-1, not {E,}DP1. And you probably have to use quotes around the whole value, like this:
QT_SCREEN_SCALE_FACTORS="eDP-1=2;DP-1=1;HDMI-1=1;DP-2=1;HDMI-2=1;" Hmm sadly, it doesn't seem to help.
$ env |grep QT QT_SCREEN_SCALE_FACTORS=eDP1=2;DP1=1;HDMI1=1;DP2=1;HDMI2=1; QT_QPA_PLATFORMTHEME=qt5ct QT_AUTO_SCREEN_SCALE_FACTOR=0
I rebooted and set:
xrandr --output eDP1 --pos 5120x0 --auto \ --output DP1 --pos 0x0 --auto --scale 2x2
and applications Qt apps like wireshark and virtualbox are still rendering with 2x scaling on both screens. (which looks normal on the hidpi one, and small on the lowdpi one).
OK, then maybe you’ve just stumbled upon one of the numerous HiDPI Qt bugs…
graesslin.Apr 21 2018, 7:01 PM I also cannot imagine this to work due to the fact how X11 works. There is just no mapping from window to screen. No window can know on which screen it is. Not even KWin knows that as the window manager (screen is not a constant property, but evaluated every time it is accessed, it's based on the distance to closest screen). Especially for overlapping windows it's very difficult to try to get to which screen it belongs. It gets even more complicated when things like panning and overlapping screens get into it. So I wouldn't trust this thing in Qt to work due to the pain we have in KWin especially with these problems.
I wonder if it's possible? -- Tyler
I also tried doing xrandr --dpi 220 --output eDP1 --auto --output DP1 --auto --scale 2x2 --right-of DP1 but it resulted in: xrandr: loop in relative position specifications what I am trying to achieve (produced in gimp): https://i.imgur.com/J83Fplt.jpg As for moving to sway, doesn't look like this problem will be solved soon :( https://github.com/swaywm/sway/issues/1047 -- Tyler
Hi Tyler, I did a lot of experimenting a while back to find something that works well for me. I have a MacBook Pro with a HiDPI screen connected to two 1080p external monitors via ThunderBolt-to-DisplayPort adapters. I place my MacBook Pro to the right of the two external monitors. I also run i3. Here's what I found worked for me: .Xresources contains: Xft.dpi: 220 .xinitrc contains: xrdb -merge ~/.Xresources export QT_AUTO_SCREEN_SCALE_FACTOR=1 export GDK_SCALE=1.5 export GDK_DPI_SCALE=0.75 exec i3 xrandr command for external monitors: xrandr --output DP1 --scale 1.5x1.5 --auto --pos 0x0 --primary --output DP2 --scale 1.5x1.5 --auto --pos 2880x0 --output eDP1 --mode 1920x1200 --pos 5760x0 xrandr command for switching back to internal laptop screen: xrandr --output eDP1 --auto --primary --output DP1 --off --output DP2 --off I tried playing with panning but I found it easier to just set similar resolutions using whatever mode I want on the monitors and the proper scale option and then specifying the absolute positions with --pos. When external monitors are enabled, I reduce the resolution of my laptop screen because the laptop is on a stand further away from me so I need the text a bit larger. Good luck. Let us know how it goes. Thanks, Eric On Mon, Jul 30, 2018 at 11:18 PM Tyler <tylera@privatedemail.net> wrote:
Hi,
I am using ArchLinux with i3 on my Dell XPS 13" 9370 @ 3840x2160) HiDPI and everything works great with:
.Xresources:
! xft fonts !---------------------------------------------------------------------- Xft.dpi: 220 Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintfull Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb
! urxvt !--------------------------------------------------------------------- URxvt*font: xft:DejaVu Sans Mono for Powerline:size=12: \ minspace=False:antialias=true, \ xft:Segoe UI Emoji:size=12:minspace=False:antialias=true
URxvt*boldFont: xft:DejaVu Sans Mono for Powerline:size=12: \ minspace=False:antialias=true, \ xft:Segoe UI Emoji:size=12:minspace=False:antialias=true
URxvt.letterSpace: -1
and in /etc/profile.d/hidpi.sh
export GDK_SCALE=2 export GDK_DPI_SCALE=0.5 export QT_AUTO_SCREEN_SCALE_FACTOR=0 export QT_SCREEN_SCALE_FACTORS=2 export QT_QPA_PLATFORMTHEME=qt5ct
However recently I bought a Dell DA300 Mobile Adapter and decided I wanted to use my external Dell 30" 3000WFP (2560x1600) over DisplayPort.
I found this blog article https://blog.summercat.com/configuring-mixed-dpi-monitors-with-xrandr.html which explains exactly what I am trying to do. The only difference is the placement of the external screen (mine is on the left of the laptop) and the screen size and resolution.
In that article he uses his HiDPI on both screens and then scales down on the external screen, which is why he doubles the resolution of the external display. The reason he does that is so he doesn't have to touch .Xresources or fiddle with toolkit scaling options.
Using this command I was able to get it working great with a single external monitor ie the Dell 30" 3000WFP @ (2560x1600)
xrandr --dpi 220 --fb 5120x3200 \ --output eDP1 --off \ --output DP1 --scale 2x2 --panning 5120x3200
With the dual-monitor setup I'm struggling to understand the panning option. I have looked at https://wiki.archlinux.org/index.php/xrandr and the man file and still couldn't figure that track x track y part out. It's not very easy to understand.
So far for the external monitor I have this:
xrandr --dpi 220 --fb 8960x5360 \ --output eDP1 --mode 3840x2160 \ --output DP1 --scale 2x2 --pos -2560x0 --panning 5120x3200+2560+0
What I want is to be able to access the whole area of both screens. In his example he has a laptop at 3200x1800 and an external monitor at 1920x1080
Dual monitors
When I want to use both monitors, this is the command I run:
xrandr --dpi 276 --fb 7040x3960 \ --output eDP-1 --mode 3200x1800 \ --output DP-1-2 --scale 2x2 --pos 3200x0 --panning 3840x2160+3200+0
Here's an explanation of the options:
Global options: --dpi 276 sets the DPI to 276. --fb 7040x3960 creates one screen with resolution 7040x3960. This is the combined resolution of the two monitors. The high DPI monitor has 3200x1800 resolution. The lower DPI monitor has 1920x1080 resolution, but I double it as I scale it by 2 (see below). Combine these like so: 3200+1920*2 x 1800+1080*2 = 7040x3960. Both monitors share this screen. High DPI monitor options (--output eDP-1): --mode 3200x1800 says to use resolution 3200x1800. This is the default, but specifying it is necessary if the monitor is disabled (as it is when using the external monitor by itself) as it enables the monitor. Lower DPI monitor options (--output DP-1-2): --scale 2x2 is similar to zooming out. This is necessary as we set the DPI globally to that of the high DPI monitor. --pos positions it to the right of the laptop monitor. --panning allows our pointer to access the whole area.
Any help or tips would be much appreciated!
-- Tyler
graesslin.Apr 21 2018, 7:01 PM I also cannot imagine this to work due to the fact how X11 works. There is just no mapping from window to screen. No window can know on which screen it is. Not even KWin knows that as the window manager (screen is not a constant property, but evaluated every time it is accessed, it's based on the distance to closest screen). Especially for overlapping windows it's very difficult to try to get to which screen it belongs. It gets even more complicated when things like panning and overlapping screens get into it. So I wouldn't trust this thing in Qt to work due to the pain we have in KWin especially with these problems.
On 01/08/18 12:33, Bruno Pagani wrote:
OK, then maybe you’ve just stumbled upon one of the numerous HiDPI Qt bugs…
Which brings me back to the original post. If I could figure out how to do it this way, https://blog.summercat.com/configuring-mixed-dpi-monitors-with-xrandr.html because that sounds like it would avoid this problem.
The tricky parts
There were two aspects I found problematic:
First, the fact that the two monitors have differing DPI means each monitor needs different settings to account for that. xrandr allows setting the DPI via --dpi, but this applies globally to all monitors. I dealt with this by setting the global DPI to that of the highest DPI monitor, and then used --scale to adjust the lower DPI monitor.
Second, switching back and forth between dual monitors to one monitor lead to interesting behaviour. For example, I kept losing the scale setting on the lower DPI monitor.
Previously on the list ProgAndy said:
The panning option might be there as a workaround for a bug in xorg. Since xorg 1.20 the patch to resolve that should be included, so you can try your configuration without panning.
I feel he might be right based on the results I had with xrandr --output eDP1 --pos 5120x0 --auto \ --output DP1 --pos 0x0 --auto --scale 2x2
I had a semi-working setup with little trouble, but it involved restarting X when I wanted to switch between dual and single monitors. This worked, but obviously was inconvenient. I wanted a solution that would work without restarts.
I do think he might be right. It does seem like it might be also a workaround for this Qt5 issue.
From that blog post:
Single monitor (external)
If I want to use only the lower DPI monitor, then I run this command:
xrandr --dpi 276 --fb 3840x2160 \ --output eDP-1 --off \ --output DP-1-2 --scale 2x2 --panning 3840x2160
Most of these options are similar to the first command's. The main difference is disabling the laptop monitor with --output eDP-1 --off.
Note 3840x2160 comes from 1920*2 x 1080*2.
You might wonder why I set high DPI and scale the lower DPI monitor here. Wouldn't it be simpler to set a lower DPI and use the monitor's native resolution? That's possible, but since I've configured other things (such as my X terminal fonts) to a size suitable for a high DPI screen, I'd have to adjust settings elsewhere. Keeping the DPI the same and continuing to scale allows me to avoid that. Since I'm scaling, I need to configure a large screen and set panning for the same reasons as before.
I was able to get that working using my numbers for the Dell 30" 3008WFP xrandr --dpi 220 --fb 8960x5360 \ --output eDP1 --mode 3840x2160 --pos 5120x0 \ --output DP1 --scale 2x2 --pos 0x0 --panning 5120x3200+3840+0 However with the Dual Monitors not so much;
Dual monitors
When I want to use both monitors, this is the command I run:
xrandr --dpi 276 --fb 7040x3960 \ --output eDP-1 --mode 3200x1800 \ --output DP-1-2 --scale 2x2 --pos 3200x0 --panning 3840x2160+3200+0
Here's an explanation of the options:
Global options: --dpi 276 sets the DPI to 276. --fb 7040x3960 creates one screen with resolution 7040x3960. This is the combined resolution of the two monitors. The high DPI monitor has 3200x1800 resolution. The lower DPI monitor has 1920x1080 resolution, but I double it as I scale it by 2 (see below). Combine these like so: 3200+1920*2 x 1800+1080*2 = 7040x3960. Both monitors share this screen. High DPI monitor options (--output eDP-1): --mode 3200x1800 says to use resolution 3200x1800. This is the default, but specifying it is necessary if the monitor is disabled (as it is when using the external monitor by itself) as it enables the monitor. Lower DPI monitor options (--output DP-1-2): --scale 2x2 is similar to zooming out. This is necessary as we set the DPI globally to that of the high DPI monitor. --pos positions it to the right of the laptop monitor. --panning allows our pointer to access the whole area.
Using the numbers I calculated: eDP1 (30" @ 2560x1600) DP1 (13.3" @ 3840x2160) 3840+2560*2=8960 2160+1600*2=5360 xrandr --dpi 220 --fb 8960x5360 \ --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0 \ --output DP1 --scale 2x2 --pos 0x0 --panning 5120x3200+3200+0 using that I am seeing https://i.imgur.com/gTAsRUe.jpg which is a bit strange but getting closer. I think i am messing up the last part of panning the +3200+0 bit. Eric.. You have a very similar setup, to me. I shall give that a try soon. -- Tyler
I was able to get that working using my numbers for the Dell 30" 3008WFP
xrandr --dpi 220 --fb 8960x5360 \ --output eDP1 --mode 3840x2160 --pos 5120x0 \ --output DP1 --scale 2x2 --pos 0x0 --panning 5120x3200+3840+0
I made a mistake there that should have been: xrandr --dpi 276 --fb 5120x3200 \ --output DP1 --scale 2x2 --mode 2560x1600 --panning 5120x3200 \ --output eDP1 --off -- Tyler
So, Using: Xft.dpi: 220 GDK_SCALE=2 GDK_DPI_SCALE=0.5 QT_AUTO_SCREEN_SCALE_FACTOR=1 xrandr --output DP1 --scale 2x2 --auto --pos 0x0 --primary \ --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0 I noticed that Qt5 apps look now fine on my external screen (Low DPI) but now super huge on my laptop screen HiDPI. I think the reason I avoided using QT_AUTO_SCREEN_SCALE_FACTOR and set that to 0 was because it was being scaled twice (hence the super hugeness on my laptop) as apparently it looks at the DPI in xrdb, but I need that for rxvt, i3 etc. Without doing what you've done and dropping the resolution on my HiDPI screen. I found this, using: GDK_SCALE=2 GDK_DPI_SCALE=0.5 QT_AUTO_SCREEN_SCALE_FACTOR=0 QT_SCREEN_SCALE_FACTORS=2 Single Screen Laptop: xrandr --output eDP1 --scale 1x1 --mode 3840x2160 \ --output DP1 --off All good. Single Screen External: xrandr --output eDP1 --off \ --output DP1 --scale 2x2 --mode 2560x1600 All good. Both screens! xrandr --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0 --primary \ --output DP1 --scale 2x2 --mode 2560x1600 --pos 0x0 Small fonts on external screen with Qt5. xrandr --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0 \ --output DP1 --scale 2x2 --mode 2560x1600 --pos 0x0 --primary Small fonts on laptop using Qt5. So it seems tied to Primary switch as to which screen it scales for. Fortunately when using dual monitors I basically never use virtualbox, wireshark or nvim-qt on the laptop screen. Incidentally if no primary switch is used the eDP1 becomes primary. -- Tyler
Le 02/08/2018 à 10:10, Tyler a écrit :
So,
Using:
Xft.dpi: 220 GDK_SCALE=2 GDK_DPI_SCALE=0.5 QT_AUTO_SCREEN_SCALE_FACTOR=1
xrandr --output DP1 --scale 2x2 --auto --pos 0x0 --primary \ --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0
I noticed that Qt5 apps look now fine on my external screen (Low DPI) but now super huge on my laptop screen HiDPI.
I think the reason I avoided using QT_AUTO_SCREEN_SCALE_FACTOR and set that to 0 was because it was being scaled twice (hence the super hugeness on my laptop) as apparently it looks at the DPI in xrdb, but I need that for rxvt, i3 etc.
Without doing what you've done and dropping the resolution on my HiDPI screen. I found this, using:
GDK_SCALE=2 GDK_DPI_SCALE=0.5
QT_AUTO_SCREEN_SCALE_FACTOR=0 QT_SCREEN_SCALE_FACTORS=2
Single Screen Laptop:
xrandr --output eDP1 --scale 1x1 --mode 3840x2160 \ --output DP1 --off
All good.
Single Screen External:
xrandr --output eDP1 --off \ --output DP1 --scale 2x2 --mode 2560x1600
All good.
Both screens!
xrandr --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0 --primary \ --output DP1 --scale 2x2 --mode 2560x1600 --pos 0x0
Small fonts on external screen with Qt5.
xrandr --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0 \ --output DP1 --scale 2x2 --mode 2560x1600 --pos 0x0 --primary
Small fonts on laptop using Qt5. So it seems tied to Primary switch as to which screen it scales for. Fortunately when using dual monitors I basically never use virtualbox, wireshark or nvim-qt on the laptop screen.
Ah, small fonts is something different: https://bugreports.qt.io/browse/QTBUG-67928
Am 02.08.2018 um 10:10 schrieb Tyler:
Small fonts on external screen with Qt5.
xrandr --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0 \ --output DP1 --scale 2x2 --mode 2560x1600 --pos 0x0 --primary
Small fonts on laptop using Qt5. So it seems tied to Primary switch as to which screen it scales for. Fortunately when using dual monitors I basically never use virtualbox, wireshark or nvim-qt on the laptop screen.
Incidentally if no primary switch is used the eDP1 becomes primary.
As far as I understand, QT_SCREEN_SCALE_FACTORS needs an entry for each screen. The primary screen will get the first factor, then second screen the second factor, so you can try this: QT_AUTO_SCREEN_SCALE_FACTOR=0 QT_SCREEN_SCALE_FACTORS="2;2"
As far as I understand, QT_SCREEN_SCALE_FACTORS needs an entry for each screen. The primary screen will get the first factor, then second screen the second factor, so you can try this:
QT_AUTO_SCREEN_SCALE_FACTOR=0 QT_SCREEN_SCALE_FACTORS="2;2"
SUCCESS! SUCCESS! SUCCESS!! Now the font for Qt apps is correct on both screens using: xrandr --output eDP1 --scale 1x1 --mode 3840x2160 --pos 5120x0 \ --output DP1 --scale 2x2 --mode 2560x1600 --pos 0x0 https://i.imgur.com/KB5UNxy.jpg I have made a revision to the wiki to make that clear. https://wiki.archlinux.org/index.php?title=HiDPI&type=revision&diff=532206&oldid=529558 Thanks all who have helped! -- Tyler
participants (6)
-
Bastian Beischer
-
Bruno Pagani
-
Eric Blau
-
ProgAndy
-
Ralph Corderoy
-
Tyler