2009-05-16 11:32:36 -04:00
|
|
|
|
i3 User’s Guide
|
|
|
|
|
===============
|
|
|
|
|
Michael Stapelberg <michael+i3@stapelberg.de>
|
2010-03-02 07:35:43 -05:00
|
|
|
|
March 2010
|
2009-05-16 11:32:36 -04:00
|
|
|
|
|
2009-05-26 11:37:56 -04:00
|
|
|
|
This document contains all information you need to configuring and using the i3
|
|
|
|
|
window manager. If it does not, please contact me on IRC, Jabber or E-Mail and
|
|
|
|
|
I’ll help you out.
|
2009-05-16 11:32:36 -04:00
|
|
|
|
|
2010-03-07 15:12:59 -05:00
|
|
|
|
== Default keybindings
|
|
|
|
|
|
|
|
|
|
For the "too long; didn’t read" people, here comes an overview of the default
|
|
|
|
|
keybindings (click to see the full size image):
|
|
|
|
|
|
|
|
|
|
*Keys to use with Mod1 (alt):*
|
|
|
|
|
|
|
|
|
|
image:keyboard-layer1.png["Keys to use with Mod1 (alt)",width=600,link="keyboard-layer1.png"]
|
|
|
|
|
|
|
|
|
|
*Keys to use with Shift+Mod1:*
|
|
|
|
|
|
|
|
|
|
image:keyboard-layer2.png["Keys to use with Shift+Mod1",width=600,link="keyboard-layer2.png"]
|
|
|
|
|
|
|
|
|
|
As i3 uses keycodes in the default configuration, it does not mapper which
|
|
|
|
|
layout you actually use. The key positions are what matters (of course you can
|
|
|
|
|
also use keysymbols, see below).
|
|
|
|
|
|
|
|
|
|
The red keys are the modifiers you need to press (by default, you may have
|
|
|
|
|
changed which keys are which modifier), the blue keys are your homerow.
|
2009-06-13 14:10:49 -04:00
|
|
|
|
|
2009-06-01 08:59:25 -04:00
|
|
|
|
== Using i3
|
|
|
|
|
|
|
|
|
|
=== Creating terminals and moving around
|
|
|
|
|
|
|
|
|
|
A very basic operation is to create a new terminal. By default, the keybinding
|
|
|
|
|
for that is Mod1+Enter, that is Alt+Enter in the default configuration. By
|
|
|
|
|
pressing Mod1+Enter, a new terminal will be created and it will fill the whole
|
|
|
|
|
space which is available on your screen.
|
|
|
|
|
|
|
|
|
|
image:single_terminal.png[Single terminal]
|
|
|
|
|
|
|
|
|
|
It is important to keep in mind that i3 uses a table to manage your windows. At
|
|
|
|
|
the moment, you have exactly one column and one row which leaves you with one
|
|
|
|
|
cell. In this cell, there is a container in which your newly opened terminal is.
|
|
|
|
|
|
|
|
|
|
If you now open another terminal, you still have only one cell. However, the
|
2009-06-24 13:49:07 -04:00
|
|
|
|
container has both of your terminals. So, a container is just a group of clients
|
|
|
|
|
with a specific layout. You can resize containers as they directly resemble
|
|
|
|
|
columns/rows of the layout table.
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
|
|
|
|
image:two_terminals.png[Two terminals]
|
|
|
|
|
|
|
|
|
|
To move the focus between the two terminals, you use the direction keys which
|
|
|
|
|
you may know from the editor +vi+. However, in i3, your homerow is used for
|
|
|
|
|
these keys (in +vi+, the keys are shifted to the left by one for compatibility
|
|
|
|
|
with most keyboard layouts). Therefore, +Mod1+J+ is left, +Mod1+K+ is down, +Mod1+L+
|
|
|
|
|
is up and `Mod1+;` is right. So, to switch between the terminals, use +Mod1+K+ or
|
|
|
|
|
+Mod1+L+.
|
|
|
|
|
|
|
|
|
|
To create a new row/column, you can simply move a terminal (or any other window)
|
|
|
|
|
to the direction you want to expand your table. So, let’s expand the table to
|
|
|
|
|
the right by pressing `Mod1+Shift+;`.
|
|
|
|
|
|
|
|
|
|
image:two_columns.png[Two columns]
|
|
|
|
|
|
|
|
|
|
=== Changing mode of containers
|
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
A container can be in different modes:
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
default::
|
|
|
|
|
Windows are sized so that every window gets an equal amount of space of the
|
|
|
|
|
container.
|
|
|
|
|
stacking::
|
|
|
|
|
Only the focused client of the container is displayed and you get a list of
|
|
|
|
|
windows at the top of the container.
|
|
|
|
|
tabbed::
|
|
|
|
|
The same principle as +stacking+, but the list of windows at the top is only
|
|
|
|
|
a single line which will be vertically split.
|
|
|
|
|
|
|
|
|
|
To switch the mode, press +Mod1+e+ for default, +Mod1+h+ for stacking and
|
|
|
|
|
+Mod1+w+ for tabbed.
|
|
|
|
|
|
|
|
|
|
image:modes.png[Container modes]
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
|
|
|
|
=== Toggling fullscreen mode for a window
|
|
|
|
|
|
|
|
|
|
To display a window fullscreen or to go out of fullscreen mode again, press
|
|
|
|
|
+Mod1+f+.
|
|
|
|
|
|
2010-03-07 20:02:35 -05:00
|
|
|
|
There is also a global fullscreen mode in i3 in which the client will use all
|
|
|
|
|
available outputs. To use it, or to get out of it again, press +Mod1+Shift+f+.
|
|
|
|
|
|
2009-06-01 08:59:25 -04:00
|
|
|
|
=== Opening other applications
|
|
|
|
|
|
|
|
|
|
Aside from opening applicatios from a terminal, you can also use the handy
|
|
|
|
|
+dmenu+ which is opened by pressing +Mod1+v+ by default. Just type the name
|
|
|
|
|
(or a part of it) of the application which you want to open. It has to be in
|
|
|
|
|
your +$PATH+ for that to work.
|
|
|
|
|
|
|
|
|
|
Furthermore, if you have applications you open very frequently, you can also
|
|
|
|
|
create a keybinding for it. See the section "Configuring i3" for details.
|
|
|
|
|
|
|
|
|
|
=== Closing windows
|
|
|
|
|
|
|
|
|
|
If an application does not provide a mechanism to close (most applications
|
|
|
|
|
provide a menu, the escape key or a shortcut like +Control+W+ to close), you
|
|
|
|
|
can press +Mod1+Shift+q+ to kill a window. For applications which support
|
|
|
|
|
the WM_DELETE protocol, this will correctly close the application (saving
|
|
|
|
|
any modifications or doing other cleanup). If the application doesn’t support
|
|
|
|
|
it, your X server will kill the window and the behaviour depends on the
|
|
|
|
|
application.
|
|
|
|
|
|
|
|
|
|
=== Using workspaces
|
|
|
|
|
|
|
|
|
|
Workspaces are an easy way to group a set of windows. By default, you are on
|
|
|
|
|
the first workspace, as the bar on the bottom left indicates. To switch to
|
|
|
|
|
another workspace, press +Mod1+num+ where +num+ is the number of the workspace
|
|
|
|
|
you want to use. If the workspace does not exist yet, it will be created.
|
|
|
|
|
|
|
|
|
|
A common paradigm is to put the web browser on one workspace, communication
|
|
|
|
|
applications (+mutt+, +irssi+, ...) on another one and the ones with which you
|
|
|
|
|
work on the third one. Of course, there is no need to follow this approach.
|
|
|
|
|
|
|
|
|
|
If you have multiple screens, a workspace will be created on each screen. If
|
|
|
|
|
you open a new workspace, it will be bound to the screen you created it on.
|
|
|
|
|
When you switch to a workspace on another screen, i3 will set focus to this
|
|
|
|
|
screen.
|
|
|
|
|
|
|
|
|
|
=== Moving windows to workspaces
|
|
|
|
|
|
|
|
|
|
To move a window to another workspace, simply press +Mod1+Shift+num+ where
|
|
|
|
|
+num+ is (like when switching workspaces) the number of the target workspace.
|
|
|
|
|
Similarly to switching workspaces, the target workspace will be created if
|
|
|
|
|
it does not yet exist.
|
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
=== Resizing columns/rows
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
To resize columns or rows just grab the border between the two columns/rows
|
|
|
|
|
and move it to the wanted size. Please keep in mind that each cell of the table
|
|
|
|
|
holds a +container+ and thus you cannot horizontally resize single windows.
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
See <<resizingconfig>> for how to configure i3 to be able to resize
|
|
|
|
|
columns/rows with your keyboard.
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
|
|
|
|
=== Restarting i3 inplace
|
|
|
|
|
|
|
|
|
|
To restart i3 inplace (and thus get it into a clean state if it has a bug, to
|
|
|
|
|
reload your configuration or even to upgrade to a newer version of i3) you
|
|
|
|
|
can use +Mod1+Shift+r+. Be aware, though, that this kills your current layout
|
|
|
|
|
and all the windows you have opened will be put in a default container in only
|
2009-06-13 19:10:17 -04:00
|
|
|
|
one cell. Saving the layout will be implemented in a later version.
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
|
|
|
|
=== Exiting i3
|
|
|
|
|
|
|
|
|
|
To cleanly exit i3 without killing your X server, you can use +Mod1+Shift+e+.
|
|
|
|
|
|
|
|
|
|
=== Snapping
|
|
|
|
|
|
|
|
|
|
Snapping is a mechanism to increase/decrease the colspan/rowspan of a container.
|
|
|
|
|
Colspan/rowspan is the amount of columns/rows a specific cell of the table
|
|
|
|
|
consumes. This is easier explained by giving an example, so take the following
|
|
|
|
|
layout:
|
|
|
|
|
|
|
|
|
|
image:snapping.png[Snapping example]
|
|
|
|
|
|
|
|
|
|
To use the full size of your screen, you can now snap container 3 downwards
|
2009-06-13 19:10:17 -04:00
|
|
|
|
by pressing +Mod1+Control+k+ (or snap container 2 rightwards).
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
|
|
|
|
=== Floating
|
|
|
|
|
|
|
|
|
|
Floating is the opposite of tiling mode. The position and size of a window
|
|
|
|
|
are then not managed by i3, but by you. Using this mode violates the tiling
|
|
|
|
|
paradigm but can be useful for some corner cases like "Save as" dialog
|
|
|
|
|
windows or toolbar windows (GIMP or similar).
|
|
|
|
|
|
|
|
|
|
You can enable floating for a window by pressing +Mod1+Shift+Space+. By
|
|
|
|
|
dragging the window’s titlebar with your mouse, you can move the window
|
|
|
|
|
around. By grabbing the borders and moving them you can resize the window.
|
|
|
|
|
|
|
|
|
|
Bindings for doing this with your keyboard will follow.
|
|
|
|
|
|
|
|
|
|
Floating clients are always on top of tiling clients.
|
|
|
|
|
|
2009-05-16 11:32:36 -04:00
|
|
|
|
== Configuring i3
|
|
|
|
|
|
2009-06-01 08:59:25 -04:00
|
|
|
|
This is where the real fun begins ;-). Most things are very dependant on your
|
|
|
|
|
ideal working environment, so we can’t make reasonable defaults for them.
|
|
|
|
|
|
|
|
|
|
While not using a programming language for the configuration, i3 stays
|
|
|
|
|
quite flexible regarding to the things you usually want your window manager
|
|
|
|
|
to do.
|
|
|
|
|
|
|
|
|
|
For example, you can configure bindings to jump to specific windows,
|
|
|
|
|
you can set specific applications to start on a specific workspace, you can
|
|
|
|
|
automatically start applications, you can change the colors of i3 or bind
|
|
|
|
|
your keys to do useful stuff.
|
|
|
|
|
|
2010-03-06 18:00:04 -05:00
|
|
|
|
To change the configuration of i3, copy +/etc/i3/config+ to +\~/.i3/config+
|
|
|
|
|
(or +~/.config/i3/config+ if you like the XDG directory scheme) and edit it
|
|
|
|
|
with a text editor.
|
2009-10-11 08:43:56 -04:00
|
|
|
|
|
2010-03-06 18:00:04 -05:00
|
|
|
|
=== Comments
|
2009-10-11 08:43:56 -04:00
|
|
|
|
|
2010-03-06 18:00:04 -05:00
|
|
|
|
It is possible and recommended to use comments in your configuration file to
|
|
|
|
|
properly document your setup for later reference. Comments are started with
|
|
|
|
|
a # and can only be used at the beginning of a line, like this:
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
-------------------
|
|
|
|
|
# This is a comment
|
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
|
|
=== Fonts
|
|
|
|
|
|
|
|
|
|
i3 uses X core fonts (not Xft) for rendering window titles and the internal
|
|
|
|
|
workspace bar. You can use +xfontsel(1)+ to generate such a font description.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
------------------------------
|
|
|
|
|
font <X core font description>
|
|
|
|
|
------------------------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
--------------------------------------------------------------
|
|
|
|
|
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
|
|
|
|
|
--------------------------------------------------------------
|
2009-05-16 11:32:36 -04:00
|
|
|
|
|
|
|
|
|
=== Keyboard bindings
|
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
A keyboard binding makes i3 execute a command (see below) upon pressing a
|
|
|
|
|
specific key. i3 allows you to bind either on keycodes or on keysyms (you can
|
|
|
|
|
also mix your bindings, though i3 will not protect you from overlapping ones).
|
|
|
|
|
|
|
|
|
|
* A keysym (key symbol) is a description for a specific symbol, like "a" or "b",
|
|
|
|
|
but also more strange ones like "underscore" instead of "_". These are the ones
|
|
|
|
|
you also use in Xmodmap to remap your keys. To get the current mapping of your
|
|
|
|
|
keys, use +xmodmap -pke+.
|
|
|
|
|
|
|
|
|
|
* Keycodes however do not need to have a symbol assigned (handy for some hotkeys
|
|
|
|
|
on some notebooks) and they will not change their meaning as you switch to a
|
|
|
|
|
different keyboard layout.
|
|
|
|
|
|
|
|
|
|
My recommendation is: If you often switch keyboard layouts because you try to
|
|
|
|
|
learn a different one, but you want to keep your bindings at the same place,
|
|
|
|
|
use keycodes. If you don’t switch layouts and like a clean and simple config
|
|
|
|
|
file, use keysyms.
|
2009-05-16 11:32:36 -04:00
|
|
|
|
|
|
|
|
|
*Syntax*:
|
2009-08-19 06:59:13 -04:00
|
|
|
|
----------------------------------
|
|
|
|
|
bindsym [Modifiers+]keysym command
|
2009-05-16 11:32:36 -04:00
|
|
|
|
bind [Modifiers+]keycode command
|
2009-08-19 06:59:13 -04:00
|
|
|
|
----------------------------------
|
2009-05-16 11:32:36 -04:00
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
--------------------------------
|
|
|
|
|
# Fullscreen
|
2009-08-19 06:59:13 -04:00
|
|
|
|
bind Mod1+f f
|
2009-05-16 11:32:36 -04:00
|
|
|
|
|
|
|
|
|
# Restart
|
2009-08-19 06:59:13 -04:00
|
|
|
|
bind Mod1+Shift+r restart
|
|
|
|
|
|
|
|
|
|
# Notebook-specific hotkeys
|
|
|
|
|
bind 214 exec /home/michael/toggle_beamer.sh
|
2009-05-16 11:32:36 -04:00
|
|
|
|
--------------------------------
|
|
|
|
|
|
2009-05-26 11:37:56 -04:00
|
|
|
|
Available Modifiers:
|
|
|
|
|
|
|
|
|
|
Mod1-Mod5, Shift, Control::
|
|
|
|
|
Standard modifiers, see +xmodmap(1)+
|
|
|
|
|
|
|
|
|
|
Mode_switch::
|
|
|
|
|
Unlike other window managers, i3 can use Mode_switch as a modifier. This allows
|
|
|
|
|
you to remap capslock (for example) to Mode_switch and use it for both: typing
|
|
|
|
|
umlauts or special characters 'and' having some comfortably reachable key
|
|
|
|
|
bindings. For example, when typing, capslock+1 or capslock+2 for switching
|
|
|
|
|
workspaces is totally convenient. Try it :-).
|
|
|
|
|
|
2009-06-24 14:31:00 -04:00
|
|
|
|
=== The floating modifier
|
|
|
|
|
|
|
|
|
|
To move floating windows with your mouse, you can either grab their titlebar
|
|
|
|
|
or configure the so called floating modifier which you can then press and
|
|
|
|
|
click anywhere in the window itself. The most common setup is to configure
|
|
|
|
|
it as the same one you use for managing windows (Mod1 for example). Afterwards,
|
|
|
|
|
you can press Mod1, click into a window using your left mouse button and drag
|
|
|
|
|
it to the position you want it at.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
--------------------------------
|
|
|
|
|
floating_modifier <Modifiers>
|
|
|
|
|
--------------------------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
--------------------------------
|
|
|
|
|
floating_modifier Mod1
|
|
|
|
|
--------------------------------
|
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
=== Layout mode for new containers
|
|
|
|
|
|
|
|
|
|
This option is only available when using the new lexer/parser (pass +-l+ to i3
|
|
|
|
|
when starting). It determines in which mode new containers will start. See also
|
|
|
|
|
<<stack-limit>>.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
---------------------------------------------
|
|
|
|
|
new_container <default|stacking|tabbed>
|
|
|
|
|
new_container stack-limit <cols|rows> <value>
|
|
|
|
|
---------------------------------------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
---------------------
|
|
|
|
|
new_container tabbed
|
2009-11-08 06:45:05 -05:00
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
|
|
=== Border style for new windows
|
|
|
|
|
|
|
|
|
|
This option is only available when using the new lexer/parser (pass +-l+ to i3
|
|
|
|
|
when starting). It determines which border new windows will have.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
---------------------------------------------
|
|
|
|
|
new_window <bp|bn|bb>
|
|
|
|
|
---------------------------------------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
---------------------
|
|
|
|
|
new_window bp
|
2009-10-23 13:53:36 -04:00
|
|
|
|
---------------------
|
2009-06-24 14:31:00 -04:00
|
|
|
|
|
2009-06-13 14:10:49 -04:00
|
|
|
|
=== Variables
|
|
|
|
|
|
|
|
|
|
As you learned in the previous section about keyboard bindings, you will have
|
|
|
|
|
to configure lots of bindings containing modifier keys. If you want to save
|
|
|
|
|
yourself some typing and have the possibility to change the modifier you want
|
|
|
|
|
to use later, variables can be handy.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
--------------
|
|
|
|
|
set name value
|
|
|
|
|
--------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
------------------------
|
|
|
|
|
set $m Mod1
|
2009-08-19 06:59:13 -04:00
|
|
|
|
bindsym $m+Shift+r restart
|
2009-06-13 14:10:49 -04:00
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
|
|
Variables are directly replaced in the file when parsing, there is no fancy
|
|
|
|
|
handling and there are absolutely no plans to change this. If you need a more
|
|
|
|
|
dynamic configuration, you should create a little script, like when configuring
|
|
|
|
|
wmii.
|
|
|
|
|
|
2009-05-16 11:32:36 -04:00
|
|
|
|
=== Automatically putting clients on specific workspaces
|
|
|
|
|
|
2009-12-07 04:25:12 -05:00
|
|
|
|
[[assign_workspace]]
|
|
|
|
|
|
2009-05-26 11:37:56 -04:00
|
|
|
|
It is recommended that you match on window classes whereever possible because
|
|
|
|
|
some applications first create their window and then care about setting the
|
|
|
|
|
correct title. Firefox with Vimperator comes to mind, as the window starts up
|
|
|
|
|
being named Firefox and only when Vimperator is loaded, the title changes. As
|
|
|
|
|
i3 will get the title as soon as the application maps the window (mapping means
|
|
|
|
|
actually displaying it on the screen), you’d need to have to match on Firefox
|
|
|
|
|
in this case.
|
2009-05-16 11:32:36 -04:00
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
You can prefix or suffix workspaces with a `~` to specify that matching clients
|
|
|
|
|
should be put into floating mode. If you specify only a `~`, the client will
|
2009-07-21 10:43:20 -04:00
|
|
|
|
not be put onto any workspace, but will be set floating on the current one.
|
2009-06-19 14:20:00 -04:00
|
|
|
|
|
2009-05-16 11:32:36 -04:00
|
|
|
|
*Syntax*:
|
2009-07-21 10:43:20 -04:00
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
assign ["]window class[/window title]["] [→] [~ | workspace]
|
|
|
|
|
------------------------------------------------------------
|
2009-05-16 11:32:36 -04:00
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
----------------------
|
|
|
|
|
assign urxvt 2
|
|
|
|
|
assign urxvt → 2
|
|
|
|
|
assign "urxvt" → 2
|
|
|
|
|
assign "urxvt/VIM" → 3
|
2009-07-21 10:43:20 -04:00
|
|
|
|
assign "gecko" → ~4
|
|
|
|
|
assign "xv/MPlayer" → ~
|
2009-05-16 11:32:36 -04:00
|
|
|
|
----------------------
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
|
|
|
|
=== Automatically starting applications on startup
|
|
|
|
|
|
|
|
|
|
By using the +exec+ keyword outside a keybinding, you can configure which
|
|
|
|
|
commands will be performed by i3 on the first start (not when reloading inplace
|
|
|
|
|
however). The commands will be run in order.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
------------
|
|
|
|
|
exec command
|
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
--------------------------------
|
|
|
|
|
exec sudo i3status | dzen2 -dock
|
|
|
|
|
--------------------------------
|
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
=== Automatically putting workspaces on specific screens
|
|
|
|
|
|
2009-12-07 04:25:12 -05:00
|
|
|
|
[[workspace_screen]]
|
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
If you use the assigning of clients to workspaces and start some clients
|
|
|
|
|
automatically, it might be handy to put the workspaces on specific screens.
|
|
|
|
|
Also, the assignment of workspaces to screens will determine the workspace
|
|
|
|
|
which i3 uses for a new screen when adding screens or when starting (e.g., by
|
|
|
|
|
default it will use 1 for the first screen, 2 for the second screen and so on).
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
----------------------------------
|
2010-03-02 07:35:43 -05:00
|
|
|
|
workspace <number> output <output>
|
2009-08-19 06:59:13 -04:00
|
|
|
|
----------------------------------
|
|
|
|
|
|
2010-03-02 07:35:43 -05:00
|
|
|
|
The output is the name of the RandR output you attach your screen to. On a
|
|
|
|
|
laptop, you might have VGA1 and LVDS1 as output names. You can see the
|
|
|
|
|
available outputs by running +xrandr --current+.
|
2009-08-19 06:59:13 -04:00
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
---------------------------
|
2010-03-02 07:35:43 -05:00
|
|
|
|
workspace 1 output LVDS1
|
|
|
|
|
workspace 5 output VGA1
|
2009-08-19 06:59:13 -04:00
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
|
|
=== Named workspaces
|
|
|
|
|
|
|
|
|
|
If you always have a certain arrangement of workspaces, you might want to give
|
|
|
|
|
them names (of course UTF-8 is supported):
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
---------------------------------------
|
|
|
|
|
workspace <number> <name>
|
2010-03-02 07:35:43 -05:00
|
|
|
|
workspace <number> output <output> name
|
2009-08-19 06:59:13 -04:00
|
|
|
|
---------------------------------------
|
|
|
|
|
|
2010-03-02 07:35:43 -05:00
|
|
|
|
For more details about the output-part of this command, see above.
|
2009-08-19 06:59:13 -04:00
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
--------------------------
|
|
|
|
|
workspace 1 www
|
|
|
|
|
workspace 2 work
|
|
|
|
|
workspace 3 i ♥ workspaces
|
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
=== Changing colors
|
|
|
|
|
|
|
|
|
|
You can change all colors which i3 uses to draw the window decorations and the
|
|
|
|
|
bottom bar.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
--------------------------------------------
|
|
|
|
|
colorclass border background text
|
|
|
|
|
--------------------------------------------
|
|
|
|
|
|
|
|
|
|
Where colorclass can be one of:
|
|
|
|
|
|
|
|
|
|
client.focused::
|
|
|
|
|
A client which currently has the focus.
|
|
|
|
|
client.focused_inactive::
|
|
|
|
|
A client which is the focused one of its container, but it does not have
|
|
|
|
|
the focus at the moment.
|
|
|
|
|
client.unfocused::
|
|
|
|
|
A client which is not the focused one of its container.
|
2009-09-06 16:40:11 -04:00
|
|
|
|
client.urgent::
|
|
|
|
|
A client which has its urgency hint activated.
|
2009-08-19 06:59:13 -04:00
|
|
|
|
bar.focused::
|
|
|
|
|
The current workspace in the bottom bar.
|
|
|
|
|
bar.unfocused::
|
|
|
|
|
All other workspaces in the bottom bar.
|
2009-09-06 16:40:11 -04:00
|
|
|
|
bar.urgent::
|
|
|
|
|
A workspace which has at least one client with an activated urgency hint.
|
2009-08-19 06:59:13 -04:00
|
|
|
|
|
|
|
|
|
Colors are in HTML hex format, see below.
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
--------------------------------------
|
|
|
|
|
# class border backgr. text
|
|
|
|
|
client.focused #2F343A #900000 #FFFFFF
|
|
|
|
|
--------------------------------------
|
|
|
|
|
|
2009-12-15 13:11:01 -05:00
|
|
|
|
Note that for the window decorations the color around the child window is the
|
|
|
|
|
background color and the border color is only the two thin lines at the top of
|
|
|
|
|
the window.
|
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
=== Interprocess communication
|
|
|
|
|
|
|
|
|
|
i3 uses unix sockets to provide an IPC interface. At the moment, this interface
|
|
|
|
|
is only useful for sending commands. To enable it, you have to configure a path
|
|
|
|
|
where the unix socket will be stored. The default path is +/tmp/i3-ipc.sock+.
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
----------------------------
|
|
|
|
|
ipc-socket /tmp/i3-ipc.sock
|
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
|
|
You can then use the i3-msg command to perform any command listed in the next
|
|
|
|
|
section.
|
|
|
|
|
|
2010-01-29 15:58:28 -05:00
|
|
|
|
=== Disable focus follows mouse
|
|
|
|
|
|
|
|
|
|
If you have a setup where your mouse usually is in your way (like a touchpad
|
|
|
|
|
on your laptop which you do not want to disable completely), you might want
|
|
|
|
|
to disable focus follows mouse and control focus only by using your keyboard.
|
|
|
|
|
The mouse will still be useful inside the currently active window (for example
|
|
|
|
|
to click on links in your browser window).
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
----------------------------
|
|
|
|
|
focus_follows_mouse <yes|no>
|
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
----------------------
|
|
|
|
|
focus_follows_mouse no
|
|
|
|
|
----------------------
|
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
== List of commands
|
|
|
|
|
|
|
|
|
|
=== Manipulating layout
|
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
To change the layout of the current container to stacking, use +s+, for default
|
|
|
|
|
use +d+ and for tabbed, use +T+. To make the current client (!) fullscreen,
|
2010-03-07 20:02:35 -05:00
|
|
|
|
use +f+, to make it spanning all outputs, use +fg+, to make it floating (or
|
|
|
|
|
tiling again) use +t+:
|
2009-08-19 06:59:13 -04:00
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
--------------
|
2009-10-23 13:53:36 -04:00
|
|
|
|
bindsym Mod1+s s
|
|
|
|
|
bindsym Mod1+l d
|
|
|
|
|
bindsym Mod1+w T
|
2009-08-19 06:59:13 -04:00
|
|
|
|
|
|
|
|
|
# Toggle fullscreen
|
2009-10-23 13:53:36 -04:00
|
|
|
|
bindsym Mod1+f f
|
2009-08-19 06:59:13 -04:00
|
|
|
|
|
2010-03-07 20:02:35 -05:00
|
|
|
|
# Toggle global fullscreen
|
|
|
|
|
bindsym Mod1+Shift+f fg
|
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
# Toggle floating/tiling
|
2009-10-23 13:53:36 -04:00
|
|
|
|
bindsym Mod1+t t
|
2009-08-19 06:59:13 -04:00
|
|
|
|
--------------
|
|
|
|
|
|
|
|
|
|
=== Focussing/Moving/Snapping clients/containers/screens
|
|
|
|
|
|
|
|
|
|
To change the focus, use one of the +h+, +j+, +k+ and +l+ commands, meaning
|
|
|
|
|
respectively left, down, up, right. To focus a container, prefix it with +wc+,
|
|
|
|
|
to focus a screen, prefix it with +ws+.
|
|
|
|
|
|
|
|
|
|
The same principle applies for moving and snapping, just prefix the command
|
|
|
|
|
with +m+ when moving and with +s+ when snapping:
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
----------------------
|
|
|
|
|
# Focus clients on the left, bottom, top, right:
|
|
|
|
|
bindsym Mod1+j h
|
|
|
|
|
bindsym Mod1+k j
|
|
|
|
|
bindsym Mod1+j k
|
|
|
|
|
bindsym Mod1+semicolon l
|
|
|
|
|
|
|
|
|
|
# Move client to the left, bottom, top, right:
|
|
|
|
|
bindsym Mod1+j mh
|
|
|
|
|
bindsym Mod1+k mj
|
|
|
|
|
bindsym Mod1+j mk
|
|
|
|
|
bindsym Mod1+semicolon ml
|
|
|
|
|
|
|
|
|
|
# Snap client to the left, bottom, top, right:
|
|
|
|
|
bindsym Mod1+j sh
|
|
|
|
|
bindsym Mod1+k sj
|
|
|
|
|
bindsym Mod1+j sk
|
|
|
|
|
bindsym Mod1+semicolon sl
|
|
|
|
|
|
|
|
|
|
# Focus container on the left, bottom, top, right:
|
|
|
|
|
bindsym Mod3+j wch
|
|
|
|
|
…
|
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
|
|
=== Changing workspaces/moving clients to workspaces
|
|
|
|
|
|
|
|
|
|
To change to a specific workspace, the command is just the number of the
|
|
|
|
|
workspace, e.g. +1+ or +3+. To move the current client to a specific workspace,
|
|
|
|
|
prefix the number with an +m+.
|
|
|
|
|
|
|
|
|
|
Furthermore, you can switch to the next and previous workspace with the
|
|
|
|
|
commands +nw+ and +pw+, which is handy for example if you have workspace
|
|
|
|
|
1, 3, 4 and 9 and you want to cycle through them with a single key combination.
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
-------------------------
|
|
|
|
|
bindsym Mod1+1 1
|
|
|
|
|
bindsym Mod1+2 2
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
bindsym Mod1+Shift+1 m1
|
|
|
|
|
bindsym Mod1+Shift+2 m2
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
bindsym Mod1+o nw
|
|
|
|
|
bindsym Mod1+p pw
|
|
|
|
|
-------------------------
|
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
[[resizingconfig]]
|
|
|
|
|
|
|
|
|
|
=== Resizing columns/rows
|
|
|
|
|
|
|
|
|
|
If you want to resize columns/rows using your keyboard, you can use the
|
2010-01-26 16:48:12 -05:00
|
|
|
|
+resize+ command, I recommend using it inside a so called +mode+ (you need to
|
|
|
|
|
use the new lexer/parser for that, so pass +-l+ to i3 when starting):
|
2009-10-23 13:53:36 -04:00
|
|
|
|
|
|
|
|
|
.Example: Configuration file, defining a mode for resizing
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
mode "resize" {
|
|
|
|
|
# These bindings trigger as soon as you enter the resize mode
|
|
|
|
|
|
|
|
|
|
# They resize the border in the direction you pressed, e.g.
|
|
|
|
|
# when pressing left, the window is resized so that it has
|
|
|
|
|
# more space on its left
|
|
|
|
|
|
|
|
|
|
bindsym n resize left -10
|
|
|
|
|
bindsym Shift+n resize left +10
|
|
|
|
|
|
|
|
|
|
bindsym r resize bottom +10
|
|
|
|
|
bindsym Shift+r resize bottom -10
|
|
|
|
|
|
|
|
|
|
bindsym t resize top -10
|
|
|
|
|
bindsym Shift+t resize top +10
|
|
|
|
|
|
|
|
|
|
bindsym d resize right +10
|
|
|
|
|
bindsym Shift+d resize right -10
|
|
|
|
|
|
|
|
|
|
bind 36 mode default
|
|
|
|
|
}
|
2010-01-26 16:48:12 -05:00
|
|
|
|
|
|
|
|
|
# Enter resize mode
|
|
|
|
|
bindsym Mod1+r mode resize
|
2009-10-23 13:53:36 -04:00
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
2009-06-01 08:59:25 -04:00
|
|
|
|
=== Jumping to specific windows
|
|
|
|
|
|
|
|
|
|
Especially when in a multi-monitor environment, you want to quickly jump to a specific
|
|
|
|
|
window, for example while currently working on workspace 3 you may want to jump to
|
|
|
|
|
your mailclient to mail your boss that you’ve achieved some important goal. Instead
|
|
|
|
|
of figuring out how to navigate to your mailclient, it would be more convenient to
|
|
|
|
|
have a shortcut.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
----------------------------------------------------
|
|
|
|
|
jump ["]window class[/window title]["]
|
|
|
|
|
jump workspace [ column row ]
|
|
|
|
|
----------------------------------------------------
|
|
|
|
|
|
|
|
|
|
You can either use the same matching algorithm as in the +assign+ command (see above)
|
|
|
|
|
or you can specify the position of the client if you always use the same layout.
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
--------------------------------------
|
|
|
|
|
# Get me to the next open VIM instance
|
2009-08-19 07:15:14 -04:00
|
|
|
|
bindsym Mod1+a jump "urxvt/VIM"
|
2009-06-01 08:59:25 -04:00
|
|
|
|
--------------------------------------
|
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
=== VIM-like marks (mark/goto)
|
|
|
|
|
|
2009-12-07 04:25:12 -05:00
|
|
|
|
[[vim_like_marks]]
|
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
This feature is like the jump feature: It allows you to directly jump to a
|
|
|
|
|
specific window (this means switching to the appropriate workspace and setting
|
|
|
|
|
focus to the windows). However, you can directly mark a specific window with
|
|
|
|
|
an arbitrary label and use it afterwards, that is, you do not need to ensure
|
|
|
|
|
that your windows have unique classes or titles and you do not need to change
|
|
|
|
|
your configuration file.
|
|
|
|
|
|
|
|
|
|
As the command needs to include the label with which you want to mark the
|
|
|
|
|
window, you cannot simply bind it to a key (or, you could bind it to a key and
|
|
|
|
|
only use the set of labels for which you created bindings). +i3-input+ is a
|
|
|
|
|
tool created for this purpose: It lets you input a command and sends the
|
|
|
|
|
command to i3. It can also prefix this command and display a custom prompt for
|
|
|
|
|
the input dialog.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
-----------------
|
|
|
|
|
mark <identifier>
|
|
|
|
|
goto <identifier>
|
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
---------------------------------------
|
|
|
|
|
# Read 1 character and mark the current window with this character
|
|
|
|
|
bindsym Mod1+m exec i3-input -p 'mark ' -l 1 -P 'Mark: '
|
|
|
|
|
|
|
|
|
|
# Read 1 character and go to the window with the character
|
|
|
|
|
bindsym Mod1+g exec i3-input -p 'goto ' -l 1 -P 'Goto: '
|
|
|
|
|
---------------------------------------
|
|
|
|
|
|
2009-06-01 08:59:25 -04:00
|
|
|
|
=== Traveling the focus stack
|
|
|
|
|
|
|
|
|
|
This mechanism can be thought of as the opposite of the +jump+ command. It travels
|
|
|
|
|
the focus stack and jumps to the window you focused before.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
--------------
|
2009-06-21 10:14:15 -04:00
|
|
|
|
focus [number] | floating | tilling | ft
|
2009-06-01 08:59:25 -04:00
|
|
|
|
--------------
|
|
|
|
|
|
|
|
|
|
Where +number+ by default is 1 meaning that the next client in the focus stack will
|
|
|
|
|
be selected.
|
|
|
|
|
|
2009-06-21 10:14:15 -04:00
|
|
|
|
The special values have the following meaning:
|
|
|
|
|
|
|
|
|
|
floating::
|
|
|
|
|
The next floating window is selected.
|
|
|
|
|
tiling::
|
|
|
|
|
The next tiling window is selected.
|
|
|
|
|
ft::
|
|
|
|
|
If the current window is floating, the next tiling window will be selected
|
|
|
|
|
and vice-versa.
|
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
=== Changing border style
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
To change the border of the current client, you can use +bn+ to use the normal
|
|
|
|
|
border (including window title), +bp+ to use a 1-pixel border (no window title)
|
2009-10-23 13:53:36 -04:00
|
|
|
|
and +bb+ to make the client borderless. There also is +bt+ which will toggle
|
|
|
|
|
the different border styles.
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
*Examples*:
|
|
|
|
|
------------------
|
|
|
|
|
bindsym Mod1+t bn
|
|
|
|
|
bindsym Mod1+y bp
|
|
|
|
|
bindsym Mod1+u bb
|
|
|
|
|
------------------
|
|
|
|
|
|
2009-10-23 13:53:36 -04:00
|
|
|
|
[[stack-limit]]
|
|
|
|
|
|
|
|
|
|
=== Changing the stack-limit of a container
|
|
|
|
|
|
|
|
|
|
If you have a single container with a lot of windows inside (say, more than
|
|
|
|
|
10), the default layout of a stacking container can get a little unhandy.
|
|
|
|
|
Depending on your screen’s size, you might end up only using half of the
|
|
|
|
|
titlebars of each window in the container.
|
|
|
|
|
|
|
|
|
|
Using the +stack-limit+ command, you can limit the amount of rows or columns
|
|
|
|
|
in a stacking container. i3 will create columns or rows (depending on what
|
|
|
|
|
you limited) automatically as needed.
|
|
|
|
|
|
|
|
|
|
*Syntax*:
|
|
|
|
|
--------------------------------
|
|
|
|
|
stack-limit <cols|rows> <value>
|
|
|
|
|
--------------------------------
|
|
|
|
|
|
|
|
|
|
*Examples*:
|
|
|
|
|
-------------------
|
|
|
|
|
# I always want to have two window titles in one line
|
|
|
|
|
stack-limit cols 2
|
|
|
|
|
|
|
|
|
|
# Not more than 5 rows in this stacking container
|
|
|
|
|
stack-limit rows 5
|
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
|
|
image:stacklimit.png[Container limited to two columns]
|
|
|
|
|
|
2009-08-19 06:59:13 -04:00
|
|
|
|
=== Reloading/Restarting/Exiting
|
|
|
|
|
|
|
|
|
|
You can make i3 reload its configuration file with +reload+. You can also
|
|
|
|
|
restart i3 inplace with the +restart+ command to get it out of some weird state
|
|
|
|
|
(if that should ever happen) or to perform an upgrade without having to restart
|
|
|
|
|
your X session. However, your layout is not preserved at the moment, meaning
|
|
|
|
|
that all open windows will be in a single container in default layout. To exit
|
|
|
|
|
i3 properly, you can use the +exit+ command, however you don’t need to (e.g.,
|
|
|
|
|
simply killing your X session is fine aswell).
|
2009-06-01 08:59:25 -04:00
|
|
|
|
|
|
|
|
|
*Examples*:
|
2009-08-19 06:59:13 -04:00
|
|
|
|
----------------------------
|
|
|
|
|
bindsym Mod1+Shift+r restart
|
|
|
|
|
bindsym Mod1+Shift+w reload
|
|
|
|
|
bindsym Mod1+Shift+e exit
|
|
|
|
|
----------------------------
|
2009-12-07 04:25:12 -05:00
|
|
|
|
|
|
|
|
|
== Multiple monitors
|
|
|
|
|
|
|
|
|
|
[[multi_monitor]]
|
|
|
|
|
|
|
|
|
|
As you can read in the goal list on its website, i3 was specifically developed
|
|
|
|
|
with Xinerama (support for multiple monitors) in mind. This section will
|
|
|
|
|
explain how to handle multiple monitors.
|
|
|
|
|
|
|
|
|
|
When you have only one monitor, things are simple. You usually start with
|
|
|
|
|
workspace 1 on your monitor and open new ones as you need them.
|
|
|
|
|
|
|
|
|
|
When you have more than one monitor, each monitor will get an initial
|
|
|
|
|
workspace, say the first gets 1, the second gets 2 and a possible third would
|
|
|
|
|
get 3. When you switch to a workspace on a different screen, i3 will switch
|
|
|
|
|
to that screen and then switch to the workspace. This way, you don’t need
|
|
|
|
|
shortcuts to switch to a specific screen and remember where you put which
|
|
|
|
|
workspace. New workspaces will be opened on the screen you currently are on.
|
|
|
|
|
There is no possiblity to have a screen without workspaces.
|
|
|
|
|
|
|
|
|
|
The idea to make workspaces global is due to the observation that most users
|
|
|
|
|
have a very limited set of workspaces on their additional monitors, often
|
|
|
|
|
using them for a specific task (browser, shell) or for monitoring several
|
|
|
|
|
things (mail, IRC, syslog, …). Thus, using one workspace on one monitor and
|
|
|
|
|
"the rest" on the other monitors often makes sense. However, as you can
|
|
|
|
|
create unlimited workspaces in i3 and tie them to specific screens, you can
|
|
|
|
|
have the "traditional" approach of having X workspaces per screen by
|
|
|
|
|
changing your configuration (using modes, for example).
|
|
|
|
|
|
|
|
|
|
=== Configuring your monitors
|
|
|
|
|
|
|
|
|
|
To help you get going if you never did multiple monitors before, here comes a
|
|
|
|
|
short overview of the xrandr options which are probably of interest for you.
|
|
|
|
|
It is always useful to get an overview of the current screen configuration, so
|
|
|
|
|
just run "xrandr" and you will get an output like the following:
|
|
|
|
|
--------------------------------------------------------------------------------------
|
|
|
|
|
$ xrandr
|
|
|
|
|
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
|
|
|
|
|
VGA1 disconnected (normal left inverted right x axis y axis)
|
|
|
|
|
LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 261mm x 163mm
|
|
|
|
|
1280x800 60.0*+ 50.0
|
|
|
|
|
1024x768 85.0 75.0 70.1 60.0
|
|
|
|
|
832x624 74.6
|
|
|
|
|
800x600 85.1 72.2 75.0 60.3 56.2
|
|
|
|
|
640x480 85.0 72.8 75.0 59.9
|
|
|
|
|
720x400 85.0
|
|
|
|
|
640x400 85.1
|
|
|
|
|
640x350 85.1
|
|
|
|
|
--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Several things are important here: You can see that +LVDS1+ is connected (of
|
|
|
|
|
course, it is the internal flat panel) but +VGA1+ is not. If you have connected
|
|
|
|
|
a monitor to one of the ports but xrandr still says "disconnected", you should
|
|
|
|
|
check your cable, monitor or graphics driver.
|
|
|
|
|
|
|
|
|
|
Furthermore, the maximum resolution you can see at the end of the first line
|
|
|
|
|
is the maximum combined resolution of your monitors. By default, it is usually
|
|
|
|
|
too low and has to be increased by editing +/etc/X11/xorg.conf+.
|
|
|
|
|
|
|
|
|
|
So, say you connected VGA1 and want to use it as an additional screen:
|
|
|
|
|
-------------------------------------------
|
|
|
|
|
xrandr --output VGA1 --auto --left-of LVDS1
|
|
|
|
|
-------------------------------------------
|
|
|
|
|
This command lets xrandr try to find out the native resolution of the device
|
|
|
|
|
connected to +VGA1+ and configures it to the left of your internal flat panel.
|
|
|
|
|
When running "xrandr" again, the output looks like this:
|
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
|
|
|
$ xrandr
|
|
|
|
|
Screen 0: minimum 320 x 200, current 2560 x 1024, maximum 8192 x 8192
|
|
|
|
|
VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
|
|
|
|
|
1280x1024 60.0*+ 75.0
|
|
|
|
|
1280x960 60.0
|
|
|
|
|
1152x864 75.0
|
|
|
|
|
1024x768 75.1 70.1 60.0
|
|
|
|
|
832x624 74.6
|
|
|
|
|
800x600 72.2 75.0 60.3 56.2
|
|
|
|
|
640x480 72.8 75.0 66.7 60.0
|
|
|
|
|
720x400 70.1
|
|
|
|
|
LVDS1 connected 1280x800+1280+0 (normal left inverted right x axis y axis) 261mm x 163mm
|
|
|
|
|
1280x800 60.0*+ 50.0
|
|
|
|
|
1024x768 85.0 75.0 70.1 60.0
|
|
|
|
|
832x624 74.6
|
|
|
|
|
800x600 85.1 72.2 75.0 60.3 56.2
|
|
|
|
|
640x480 85.0 72.8 75.0 59.9
|
|
|
|
|
720x400 85.0
|
|
|
|
|
640x400 85.1
|
|
|
|
|
640x350 85.1
|
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
|
|
|
Please note that i3 uses exactly the same API as xrandr does, so it will see
|
|
|
|
|
only what you can see in xrandr.
|
|
|
|
|
|
|
|
|
|
See also <<presentations>> for more examples of multi-monitor setups.
|
|
|
|
|
|
|
|
|
|
=== Interesting configuration for multi-monitor environments
|
|
|
|
|
|
|
|
|
|
There are several things to configure in i3 which may be interesting if you
|
|
|
|
|
have more than one monitor:
|
|
|
|
|
|
|
|
|
|
1. You can specify which workspace should be put on which screen. This will
|
|
|
|
|
allow you to have a different set of workspaces when starting than just
|
|
|
|
|
1 for the first monitor, 2 for the second and so on. See
|
|
|
|
|
<<workspace_screen>>.
|
|
|
|
|
2. If you want some applications to generally open on the bigger screen
|
|
|
|
|
(MPlayer, Firefox, …), you can assign them to a specific workspace, see
|
|
|
|
|
<<assign_workspace>>.
|
|
|
|
|
3. If you have many workspaces on many monitors, it might get hard to keep
|
|
|
|
|
track of which window you put where. Thus, you can use vim-like marks to
|
|
|
|
|
quickly switch between windows. See <<vim_like_marks>>.
|
|
|
|
|
|
|
|
|
|
== i3 and the rest of your software world
|
|
|
|
|
|
|
|
|
|
=== Displaying a status line
|
|
|
|
|
|
|
|
|
|
A very common thing amongst users of exotic window managers is a status line at
|
|
|
|
|
some corner of the screen. It is an often superior replacement of the widget
|
|
|
|
|
approach you have in the task bar of a traditional desktop environment.
|
|
|
|
|
|
|
|
|
|
If you don’t already have your favorite way of generating such a status line
|
|
|
|
|
(self-written scripts, conky, …), then i3status is the recommended tool for
|
|
|
|
|
this task. It was written in C with the goal to have as little syscalls as
|
|
|
|
|
possible to reduce the time your CPU is waken up from sleep states.
|
|
|
|
|
|
|
|
|
|
Regardless of which application you use to generate the status line, you
|
|
|
|
|
want to make sure that the application does one of the following things:
|
|
|
|
|
|
|
|
|
|
1. Register as a dock window using EWMH hints. This will make i3 position the
|
|
|
|
|
window above the workspace bar but below every other client. This is the
|
|
|
|
|
recommended way, but for example in case of dzen2 you need to check out
|
|
|
|
|
the source of dzen2 from subversion, because the -dock option is not present
|
|
|
|
|
in the released versions.
|
|
|
|
|
2. Overlay the internal workspace bar. This method will not waste any space
|
|
|
|
|
in the workspace bar. However, it is a rather hackish way. Just configure
|
|
|
|
|
the output window to be over your workspace bar (say -x 200 and -y 780 if
|
|
|
|
|
your screen is 800 px height).
|
|
|
|
|
|
|
|
|
|
The planned solution for this problem is to make the workspace bar optional
|
|
|
|
|
and switch to dzen2 (for example) completely (it will contain the workspaces
|
|
|
|
|
then).
|
|
|
|
|
|
|
|
|
|
=== Giving presentations (multi-monitor)
|
|
|
|
|
|
|
|
|
|
When giving a presentation, you typically want the audience to see what you see
|
|
|
|
|
on your screen and then go through a series of slides (if the presentation is
|
|
|
|
|
simple). For more complex presentations, you might want to have some notes
|
|
|
|
|
which only you can see on your screen, while the audience can only see the
|
|
|
|
|
slides.
|
|
|
|
|
|
|
|
|
|
[[presentations]]
|
|
|
|
|
==== Case 1: everybody gets the same output
|
|
|
|
|
This is the rather easy case. You connect your computer to the video projector,
|
|
|
|
|
turn on both (computer and video projector) and configure your X server to
|
|
|
|
|
clone the internal flat panel of your computer to the video output:
|
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
xrandr --output VGA1 --mode 1024x768 --same-as LVDS1
|
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
i3 will then use the lowest common subset of screen resolutions, the rest of
|
|
|
|
|
your screen will be left untouched (so it will show the X background). So, in
|
|
|
|
|
our example, this would be 1024x768 (my notebook has 1280x800).
|
|
|
|
|
|
|
|
|
|
==== Case 2: you can see more than your audience
|
|
|
|
|
This case is a bit harder. First of all, you should configure the VGA output
|
|
|
|
|
somewhere near your internal flat panel, say right of it:
|
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
xrandr --output VGA1 --mode 1024x768 --right-of LVDS1
|
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
Now, i3 will put a new workspace (depending on your settings) on the new screen
|
|
|
|
|
and you are in multi-monitor mode (see <<multi_monitor>>).
|
|
|
|
|
|
|
|
|
|
Because i3 is not a compositing window manager, there is no possibility to
|
|
|
|
|
display a window on two screens at the same time. Instead, you presentation
|
|
|
|
|
software needs to do this job (that is, open a window on each screen with the
|
|
|
|
|
same contents).
|