Linux has really come a long way. I used to arrive at the podium and hook up my (Linux) laptop with the resigned expectation that there would be some tweaking involved to get it to speak to the projector. However the support for video hardware has evolved massive and nowadays I don’t ever think about this: it just works.
Until it doesn’t.
This week I was speaking at a conference where the video setup was extremely pernickety. It required a resolution of 1280 by 720 at a frequency of 50 Hz. Try and setup that up using the desktop display configuration tools in Ubuntu… it just doesn’t seem to be possible.
Enter xrandr
, which allows you to be very specific about display modes.
What is xrandr
?
Before answering that question, let’s ask another one: what is RandR? This is the “resize and rotate” extension to X11, providing the ability to resize, rotate and reflect displays on Linux.
xrandr
is a command line tool to interact with RandR. It makes it possible to reconfigure X11 dynamically (without restarting). It also provides automatic mode discovery.
Mode Discovery
Simply running xranrd
on the command line will generate a list of all available display modes.
For example, with my home setup (laptop screen and large external DELL monitor) this is what I get:
$ xrandr
Screen 0: minimum 320 x 200, current 2560 x 2520, maximum 8192 x 8192
eDP-1 connected primary 1920x1080+264+1440 (normal left inverted right x axis y axis) 344mm x 193mm
1920x1080 60.10*+ 60.01 59.97 59.96 59.93 40.06
1680x1050 59.95 59.88
1600x1024 60.17
1400x1050 59.98
1600x900 59.99 59.94 59.95 59.82
1280x1024 60.02
1440x900 59.89
1400x900 59.96 59.88
1280x960 60.00
1440x810 60.00 59.97
1368x768 59.88 59.85
1360x768 59.80 59.96
1280x800 59.99 59.97 59.81 59.91
1152x864 60.00
1280x720 60.00 59.99 59.86 59.74
1024x768 60.04 60.00
960x720 60.00
928x696 60.05
896x672 60.01
1024x576 59.95 59.96 59.90 59.82
960x600 59.93 60.00
960x540 59.96 59.99 59.63 59.82
800x600 60.00 60.32 56.25
840x525 60.01 59.88
864x486 59.92 59.57
800x512 60.17
700x525 59.98
800x450 59.95 59.82
640x512 60.02
720x450 59.89
700x450 59.96 59.88
640x480 60.00 59.94
720x405 59.51 58.99
684x384 59.88 59.85
680x384 59.80 59.96
640x400 59.88 59.98
576x432 60.06
640x360 59.86 59.83 59.84 59.32
512x384 60.00
512x288 60.00 59.92
480x270 59.63 59.82
400x300 60.32 56.34
432x243 59.92 59.57
320x240 60.05
360x202 59.51 59.13
320x180 59.84 59.32
HDMI-1 connected 2560x1440+0+0 (normal left inverted right x axis y axis) 597mm x 336mm
2560x1440 59.95*+
1920x1080 60.00 50.00 59.94 24.00 23.98
1920x1080i 60.00 50.00 59.94
1600x1200 60.00
1680x1050 59.88
1280x1024 75.02 60.02
1280x800 59.91
1152x864 75.00
1280x720 60.00 50.00 59.94
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x576i 50.00
720x480 60.00 59.94
720x480i 60.00 59.94
640x480 75.00 60.00 59.94
720x400 70.08
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
There are two distinct sections: eDP-1
(laptop screen) and HDMI-1
(external screen connected via HDMI).
Within each section the records display the resolution (mode) followed by a list of possible frequencies. The currently selected settings are indicated by an asterisk (*
), while the preferred settings are indicated by a +
. For example, my laptop screen is 1920x1080 at 60.10 Hz and the external monitor is 2560x1440 at 59.95 Hz. Effectively both are operating at 60 Hz.
Changing Mode
I don’t have access to one of those pernickety projectors right now, but this is the command which I used to specify the required mode:
$ xrandr --output HDMI-1 --mode 1280x720 --rate 50
That tells X11 to select a resolution 1280x720 and frequency 50 Hz for the device connected on HDMI-1.
You can be more specific about the placement of the external device too.
$ xrandr --output HDMI-1 --mode 1280x720 --rate 50 --right-of eDP-1
The options are --right-of
, --left-of
, --above
and --below
.
If this doesn’t work then you can always revert to the default mode.
$ xrandr --output HDMI-1 --auto
Note: The changes made with xrandr
are not persistent and will only endure for the session.