2010-03-15 18:04:32 -04:00
|
|
|
|
The multi-monitor situation
|
|
|
|
|
===========================
|
|
|
|
|
Michael Stapelberg <michael+i3@stapelberg.de>
|
2011-09-19 18:21:38 -04:00
|
|
|
|
September 2011
|
2010-03-15 18:04:32 -04:00
|
|
|
|
|
2010-03-20 20:50:10 -04:00
|
|
|
|
…or: oh no, I have an nVidia graphics card!
|
2010-03-15 18:04:32 -04:00
|
|
|
|
|
|
|
|
|
== The quick fix
|
|
|
|
|
|
2010-03-20 20:50:10 -04:00
|
|
|
|
If you are using the nVidia binary graphics driver (also known as 'blob')
|
|
|
|
|
you need to use the +--force-xinerama+ flag (in your .xsession) when starting
|
|
|
|
|
i3, like so:
|
2010-03-15 18:04:32 -04:00
|
|
|
|
|
|
|
|
|
.Example:
|
|
|
|
|
----------------------------------------------
|
2010-03-20 20:50:10 -04:00
|
|
|
|
exec i3 --force-xinerama -V >>~/.i3/i3log 2>&1
|
2010-03-15 18:04:32 -04:00
|
|
|
|
----------------------------------------------
|
|
|
|
|
|
2011-09-19 18:21:38 -04:00
|
|
|
|
…or use +force_xinerama yes+ in your configuration file.
|
|
|
|
|
|
2010-03-15 18:04:32 -04:00
|
|
|
|
== The explanation
|
|
|
|
|
|
|
|
|
|
Starting with version 3.ε, i3 uses the RandR (Rotate and Resize) API instead
|
2010-03-20 20:50:10 -04:00
|
|
|
|
of Xinerama. The reason for this, is that RandR provides more information
|
2010-03-15 18:04:32 -04:00
|
|
|
|
about your outputs and connected screens than Xinerama does. To be specific,
|
|
|
|
|
the code which handled on-the-fly screen reconfiguration (meaning without
|
|
|
|
|
restarting the X server) was a very messy heuristic and most of the time did
|
|
|
|
|
not work correctly -- that is just not possible with the little information
|
|
|
|
|
Xinerama offers (just a list of screen resolutions, no identifiers for the
|
|
|
|
|
screens or any additional information). Xinerama simply was not designed
|
|
|
|
|
for dynamic configuration.
|
|
|
|
|
|
2010-03-20 20:50:10 -04:00
|
|
|
|
So RandR came along, as a more powerful alternative (RandR 1.2 to be specific).
|
2010-03-15 18:04:32 -04:00
|
|
|
|
It offers all of Xinerama’s possibilities and lots more. Using the RandR API
|
|
|
|
|
made our code much more robust and clean. Also, you can now reliably assign
|
|
|
|
|
workspaces to output names instead of some rather unreliable screen identifier
|
|
|
|
|
(position inside the list of screens, which could change, and so on…).
|
|
|
|
|
|
2010-03-20 20:50:10 -04:00
|
|
|
|
As RandR has been around for about three years as of this writing, it seemed
|
|
|
|
|
like a very good idea to us, and it still is a very good one. What we did not
|
|
|
|
|
expect, however, was the nVidia binary driver. It still does not support RandR
|
|
|
|
|
(as of March 2010), even though nVidia has announced that it will support RandR
|
|
|
|
|
eventually. What does this mean for you, if you are stuck with the binary
|
|
|
|
|
driver for some reason (say the free drivers don’t work with your card)? First
|
|
|
|
|
of all, you are stuck with TwinView and cannot use +xrandr+. While this ruins
|
|
|
|
|
the user experience, the more grave problem is that the nVidia driver not only
|
|
|
|
|
does not support dynamic configuration using RandR, it also does not expose
|
|
|
|
|
correct multi-monitor information via the RandR API. So, in some setups, i3
|
|
|
|
|
will not find any screens; in others, it will find one large screen which
|
|
|
|
|
actually contains both of your physical screens (but it will not know that
|
|
|
|
|
these are two screens).
|
2010-03-15 18:04:32 -04:00
|
|
|
|
|
|
|
|
|
For this very reason, we decided to implement the following workaround: As
|
|
|
|
|
long as the nVidia driver does not support RandR, an option called
|
2011-09-19 18:21:38 -04:00
|
|
|
|
+--force-xinerama+ is available in i3 (alternatively, you can use the
|
|
|
|
|
+force_xinerama+ configuration file directive). This option gets the list of
|
|
|
|
|
screens *once* when starting, and never updates it. As the nVidia driver cannot
|
|
|
|
|
do dynamic configuration anyways, this is not a big deal.
|
|
|
|
|
|
|
|
|
|
Also note that your output names are not descriptive (like +HDMI1+) when using
|
|
|
|
|
Xinerama, instead they are counted up, starting at 0: +xinerama-0+, +xinerama-1+, …
|
2010-03-15 18:04:32 -04:00
|
|
|
|
|
|
|
|
|
== See also
|
|
|
|
|
|
|
|
|
|
For more information on how to use multi-monitor setups, see the i3 User’s
|
|
|
|
|
Guide.
|