]> git.sur5r.net Git - i3/i3.github.io/blob - _docs/multi-monitor
docs/buildbot: add pbuilder pkg, use sudoers.d, add umask hint
[i3/i3.github.io] / _docs / multi-monitor
1 The multi-monitor situation
2 ===========================
3 Michael Stapelberg <michael@i3wm.org>
4 July 2012
5
6 …or: oh no, I have an nVidia graphics card!
7
8 == The quick fix
9
10 If you are using the nVidia binary graphics driver (also known as 'blob')
11 you need to upgrade to at least version 302.17 (released in June 2012).
12
13 In case you cannot update the driver to 302.17 or newer on your machine for
14 some reason, use the +--force-xinerama+ flag (in your .xsession) when starting
15 i3, like so:
16
17 .Example:
18 ----------------------------------------------
19 exec i3 --force-xinerama -V >>~/.i3/i3log 2>&1
20 ----------------------------------------------
21
22 …or use +force_xinerama yes+ in your configuration file.
23
24 == The explanation
25
26 Starting with version 3.ε (March 2010), i3 uses the RandR (Rotate and Resize)
27 API instead of Xinerama. The reason for this, is that RandR provides more
28 information about your outputs and connected screens than Xinerama does. To be
29 specific, the code which handled on-the-fly screen reconfiguration (meaning
30 without restarting the X server) was a very messy heuristic and most of the
31 time did not work correctly -- that is just not possible with the little
32 information Xinerama offers (just a list of screen resolutions, no identifiers
33 for the screens or any additional information). Xinerama simply was not
34 designed for dynamic configuration.
35
36 So RandR came along, as a more powerful alternative (RandR 1.2 to be specific).
37 It offers all of Xinerama’s possibilities and lots more. Using the RandR API
38 made our code much more robust and clean. Also, you can now reliably assign
39 workspaces to output names instead of some rather unreliable screen identifier
40 (position inside the list of screens, which could change, and so on…).
41
42 As RandR has been around for about three years as of this writing, it seemed
43 like a very good idea to us, and it still is a very good one. What we did not
44 expect, however, was the nVidia binary driver. It did not support RandR until
45 mid 2012, even though nVidia had announced that it will support RandR
46 previously. What does missing RandR support mean for you? First of all, you are
47 stuck with TwinView and cannot use +xrandr+. While this ruins the user
48 experience, the more grave problem is that the nVidia driver not only does not
49 support dynamic configuration using RandR, it also does not expose correct
50 multi-monitor information via the RandR API. So, in some setups, i3 will not
51 find any screens; in others, it will find one large screen which actually
52 contains both of your physical screens (but it will not know that these are two
53 screens).
54
55 For this very reason, we decided to implement the following workaround: As
56 long as the nVidia driver does not support RandR, an option called
57 +--force-xinerama+ is available in i3 (alternatively, you can use the
58 +force_xinerama+ configuration file directive). This option gets the list of
59 screens *once* when starting, and never updates it. As the nVidia driver cannot
60 do dynamic configuration anyways, this is not a big deal.
61
62 Also note that your output names are not descriptive (like +HDMI1+) when using
63 Xinerama, instead they are counted up, starting at 0: +xinerama-0+, +xinerama-1+, …
64
65 == See also
66
67 For more information on how to use multi-monitor setups, see the i3 User’s
68 Guide.