How do I set a custom resolution?

I tried to use xrandr to set 1680x1050 as a new mode to VGA output, but it says:

sudo xrandr --addmode VGA-0 1680
X Error of failed request:  BadMatch (invalid parameter attributes)
Major opcode of failed request:  140 (RANDR)
Minor opcode of failed request:  18 (RRAddOutputMode)
Serial number of failed request:  35
Current serial number in output stream:  36

Solution 1:

First generate a "modeline" by using cvt
Syntax is: cvt width height refreshrate

cvt 1680 1050 60

this gives you:

# 1680x1050 59.95 Hz (CVT 1.76MA) hsync: 65.29 kHz; pclk: 146.25 MHz
Modeline "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync

Now tell this to xrandr:

xrandr --newmode "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync

Then you can now add it to the table of possible resolutions of an output of your choice:

xrandr --addmode VGA-0 1680x1050_60.00

The changes are lost after reboot, to set up the resolution persistently, create the file ~/.xprofile with the content:

#!/bin/sh
xrandr --newmode "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync
xrandr --addmode VGA-0 1680x1050_60.00

Solution 2:

How to set a custom resolution previously specified. After executing the other steps defined to create the resolution, run:

xrandr -s 1680x1050

Solution 3:

How to set a custom resolution previously specified when running multiple monitors. After executing the other steps defined to create the resolution, run:

xrandr --output DVI-0 --mode 1680x1050

Replace DVI-0 with your device-id, e.g. VGA-0