[arch-general] xrandr with XPS 13" (3840x2160) HiDPI and 30" (2560x1600) LowDPI

Eric Blau eblau at eblau.com
Wed Aug 1 13:00:11 UTC 2018

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 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

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.


On Mon, Jul 30, 2018 at 11:18 PM Tyler <tylera at 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
> 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

More information about the arch-general mailing list