Tweaking Linux for Pernickety Projectors

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 +. So, 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.