Note
Nowadays (as of 2026), display servers using Wayland is common and so is its fractional scaling support. This tool should continue to work as it is, but is only required for systems still using X11.
Extend a HIDPI screen to a normal DPI external display. This command line tool implements various solutions described in the HIDPI Arch Linux wiki page.
- Free software: GNU General Public License v3
Installation
pip install xrandr-extend --user
or alternatively use pipx:
pipx install xrandr-extend
Configuration
If the installation was made using pip, run:
python -m xrandr_extend.config
Alternatively, if you did use pipx, run:
pipx run --spec xrandr-extend python -m xrandr_extend.config
instead.
For both case, this creates the config file ~/.config/xrandr-extend.cfg which looks like this:
[provider:modesetting] primary = eDP-1 hdmi = HDMI-1 vga = DP-1 [provider:intel] primary = eDP1 hdmi = HDMI1 vga = DP1 [resolutions] primary = 3200, 1800 hdmi = 1920, 1080 vga = 1920, 1200 # [scaling] # primary = 1.0 # hdmi = 2.0 # vga = 2.0 # [rotation] # hdmi = left # vga = right
The first few sections have the name in the format [provider:display_driver].
Run xrandr --listproviders to find what your system has. The values in this
section should be given as profile = monitor_name, as in the output of
xrandr --listmonitors command. You may even remove existing sections and
add more sections for your display driver.
Each line in the [resolutions] section signifies a resolution profile in
the format profile = [width_in_pixels, height_in_pixels]. The profile
primary should contain the resolution of your built-in display. You may edit
or remove the remaining values hdmi and vga.
The [scaling] section contains the scale factors, which if uncommented,
overrides the scale factor computed from the resolutions.
The [rotation] section specifies the directions to rotate the output contents
similarly to xrandr --rotate.
Quick reference
usage: xrandr-extend [-h] [-p PRI_RES PRI_RES] [-e EXT_RES EXT_RES] [-x EXT_SCALE] [-m] [-n] [-o] [-s] [-d] profile Extend a HIDPI screen to a normal DPI external display positional arguments: profile Use preset external resolution profiles (available: ['hdmi', 'vga']). optional arguments: -h, --help show this help message and exit -p PRI_RES PRI_RES, --pri-res PRI_RES PRI_RES Modify preset resolution of primary display (default: 1920, 1080) -e EXT_RES EXT_RES, --ext-res EXT_RES EXT_RES Modify preset resolution of external display (default based on profile) -x EXT_SCALE, --ext-scale EXT_SCALE Sets the scale factor of external display (DPI of primary display / DPI of external display), overriding scale factor estimation from resolutions -r {normal,left,right,inverted,same}, --rotate {normal,left,right,inverted,same} Rotation can be one of the above strings. This causes the output contents of external display to be rotated in the specified direction. For example 'right' specifies a clockwise rotation, 'normal' orients it horizontally and 'same'preserves the current orientation. -m, --mirror Mirror the external display -n, --pan Pan the position of external display -o, --only Extend and use only external display -s, --pos Set the position of external display explicitly -d, --dry-run Preview command without executing it Examples -------- # Built-in options or user-configured options are used when only the display # profile is mentioned $ xrandr-extend --dry-run vga $ xrandr-extend vga $ xrandr-extend hdmi # Other options to extend the display $ xrandr-extend --pan hdmi $ xrandr-extend --only hdmi $ xrandr-extend -e 1024 768 -n vga # Pan with custom external resolution $ xrandr-extend -x 2.0 hdmi # Custom scale factor $ xrandr-extend -r left hdmi # Custom direction to rotate
Credits
This package was created with Cookiecutter and the ashwinvis/cookiecutter-pypackage project template.