contrib
debian
docs
GPN-2009-06-27
NoName-2009-03-12
slides-2012-01-25
slides-2012-03-16
Makefile
asciidoc-git.conf
bigpicture.png
bigpicture.xcf
debugging
docs.mk
hacking-howto
i3-pod2html
i3-sync-working.dia
i3-sync-working.png
i3-sync.dia
i3-sync.png
i3bar-protocol
ipc
keyboard-layer1.png
keyboard-layer1.svg
keyboard-layer2.png
keyboard-layer2.svg
layout-saving
layout-saving-1.png
logo-30.png
modes.png
multi-monitor
refcard.html
refcard_style.css
single_terminal.png
snapping.png
stacklimit.png
testsuite
tree-layout1.png
tree-layout2.png
tree-shot1.png
tree-shot2.png
tree-shot3.png
tree-shot4.png
two_columns.png
two_terminals.png
userguide
wsbar
wsbar.dia
wsbar.png
i3-config-wizard
i3-dump-log
i3-input
i3-msg
i3-nagbar
i3bar
include
libi3
man
parser-specs
src
testcases
.clang-format
.gitignore
.travis.yml
CONTRIBUTING.md
DEPENDS
LICENSE
Makefile
PACKAGE-MAINTAINER
RELEASE-NOTES-4.10.2
common.mk
generate-command-parser.pl
i3-dmenu-desktop
i3-migrate-config-to-v4
i3-save-tree
i3-sensible-editor
i3-sensible-pager
i3-sensible-terminal
i3-with-shmlog.xsession.desktop
i3.applications.desktop
i3.config
i3.config.keycodes
i3.xsession.desktop
logo.svg
pseudo-doc.doxygen
release.sh
68 lines
3.3 KiB
Plaintext
68 lines
3.3 KiB
Plaintext
The multi-monitor situation
|
||
===========================
|
||
Michael Stapelberg <michael@i3wm.org>
|
||
April 2013
|
||
|
||
Please upgrade your nVidia driver to version 302.17 or newer and i3 will just
|
||
work. This document is kept around for historic reasons only.
|
||
|
||
== The quick fix
|
||
|
||
If you are using the nVidia binary graphics driver (also known as 'blob')
|
||
before version 302.17, you need to use the +--force-xinerama+ flag (in your
|
||
.xsession) when starting i3, like so:
|
||
|
||
.Example:
|
||
----------------------------------------------
|
||
exec i3 --force-xinerama -V >>~/.i3/i3log 2>&1
|
||
----------------------------------------------
|
||
|
||
…or use +force_xinerama yes+ in your configuration file.
|
||
|
||
== The explanation
|
||
|
||
Starting with version 3.ε, i3 uses the RandR (Rotate and Resize) API instead
|
||
of Xinerama. The reason for this, is that RandR provides more information
|
||
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.
|
||
|
||
So RandR came along, as a more powerful alternative (RandR 1.2 to be specific).
|
||
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…).
|
||
|
||
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).
|
||
|
||
For this very reason, we decided to implement the following workaround: As
|
||
long as the nVidia driver does not support RandR, an option called
|
||
+--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+, …
|
||
|
||
== See also
|
||
|
||
For more information on how to use multi-monitor setups, see the i3 User’s
|
||
Guide.
|