i3wm的使用说明

1. 默认键位

给那些“太长不看”的人,以下图片是默认热键。

与$mod(Alt)一起按:

i3wm的使用说明_第1张图片
Alt

与Shift+$mod一起按:

i3wm的使用说明_第2张图片
Alt+Shift

红色按键是你需要按的修饰键(默认配置),蓝色按键是盲打键位。

要注意的是,若是没有配置文件就启动i3,i3-config-wizard 会帮助你创建一个配置文件,键位位置会跟上图所示一样,不管你是什么键盘布局。
如果你喜欢上图的设置,可以拒绝 i3-config-wizard的引导,默认以 etc/i3/config 作为配置文件

2. 使用i3

贯穿整个使用文档,关键字$mod将当作已配置好的修饰键,修饰键默认为Alt键(Mod1),windows(Mod4)键也是一个受欢迎的替换方案

2.1 打开虚拟终端和移动位置

打开一个新的虚拟终端是非常简单的操作,默认情况下,这个操作的组合键是 $mod+Enter ,默认配置下是Alt+Enter。按下$mod+Enter,将会打开一个新的虚拟终端,它将占满你屏幕的所有空间。

i3wm的使用说明_第3张图片
termialFillTheScreen

如果你现在打开另一个虚拟终端,i3会把屏幕空间一分为二,各占一半。新创建的窗口会被i3放在已有窗口的旁边(宽屏)或者下面(竖屏)

i3wm的使用说明_第4张图片
newATerminal

要在两个终端之间移动焦点,你可以使用vi编辑器风格的方向键。然而,在i3里,盲打键位就是方向键(vi编辑器里的方向键为了兼容大多数键盘布局,都向左移动了一个键位)。因此,$mod+j是向左,$mod+k是向上,$mod+l是向下,$mod+;是向右。像上图的情况,用$mod+k$mod+l在两个终端之间切换。当然,你也可以使用箭头方向键。

现在,你的workspace是按特定方向(默认水平方向)划分(容器里包含两个终端)。你可把每个window都再分离一次(水平或者垂直),就像workspace一样。“window”指一个容器包含一个X11窗口(如一个浏览器或者一个终端),“split container”指的是容器包含一个或多个窗口。

TODO:picture of the tree

垂直分割窗口,在创建新窗口前按$mod+v,水平分割窗口,按$mod+h

2.2 改变容器布局

一个split container 可以设置成下面所列出的布局之一。

splith/splitv

容器里的每个窗口都获得等量大小的空间。splith 控制每个窗口在彼此的左右方。splitv 控制每个窗口在彼此的上下方。

stacking

容器里只显示一个正在活动的窗口。在容器上方得到一个窗口的列表。

tabbed

与stacking是一个原理,不过tabbed的窗口列表是单行显示的标签页。

切换模式:$mod+e打开splith/splitv,$mod+s打开stacking,$mod+w打开tabbed

i3wm的使用说明_第5张图片
layoutmode

2.3 把一个窗口切换到全屏模式

把一个窗口全屏显示或者退出全屏,按 $mod+f

在i3里还有全局全屏模式,那么这个窗口将占据所有的显示输出(多屏显示)(配置命令: fullscrren toggle global

2.4 打开其他应用程序

除了通过终端打开应用程序,你也可以使用dmenu来打开程序,默认情况下通过$mod+d调出。只需要输入你要打开的应用的名字(或者是名字的一部分),应用必须在$PATH中才能正常打开。

另外,如果你有一个需要经常打开的应用,你可以创建一个组合键来直接打开它,细节请看 配置 部分.

2.5 关闭窗口

如果一个程序未提供一个关闭的机制(很多程序都提供了一个关闭方案,Esc键或者一个快捷键,比如Ctrl+w),你可以按$mod+Shift+q 来杀掉这个窗口。对于支持 WM_DELETE 协议的应用程序,它将正确地关闭(保存任何修改或进行其他清理)。如果程序不支持 WM_DELETE 协议。X server 将杀掉这个程序并且之后的动作取决与此程序。

2.6 使用workspaces

使用工作空间是分组归类一堆窗口的好方法。默认情况下,你处在第一个workspace,就像i3bar左下角所指示的一样。要切换到其他workspace,按下$mod+数字键(你要切换到的workspace的数字)。如果工作空间不存在,它将被创建。

一个常见的例子是把网页浏览器放在第一workspace,聊天工具放在另一个workspace,还有另一个你运行的其他软件放在第三个workspace。当然,你可以不必照着做。

如果你拥有多个显示屏,在启动时将会在每个屏幕创建一个workspace。如果你打开一个新的workspace,他会绑定到你正在工作的显示屏。当你切换一个在其他 显示屏的workspace时,i3会把焦点设置到那个显示屏。

2.7 移动一个window到另一个workspace

移动一个窗口到另一个工作空间,按$mod+Shift+目标工作区数字。跟切换workspaces时一样的情况,如果目标工作空间不存在,它将被创建。

2.8 调整窗口大小

调整容器大小最简单的办法是用鼠标:拖拽边框到想要的大小。

你也可以定义快捷键来调整,可以看看这个例子,default config--由i3提供

2.9 重启i3

为了重启i3你可以使用$mod+Shift+r(例如当有一个bug时,恢复到正常状态,或者升级到一个新版本i3)。

2.10 退出i3

不关掉Xserver且利落地退出i3,你可以按$mod+shift+e。通常,会有一个对话向你确认是否退出。

2.11 浮动模式

浮动模式是相对于平铺模式的。窗口的位置和大小不是由i3自动管理的,而是由你手工调整。使用这个模式有违于平铺模式,但是他对一些案例如"Save as"对话窗口,或者toolbar窗口(GIMP或类似的)是有用的。这些窗口通常会设置恰当的提示和默认情况下被打开于浮动模式。

你可以通过按$mod+Shift+space来切换一个窗口的浮动模式。通过鼠标拖动标题栏,你可以移动这个窗口,通过拖动边框,你可以调整窗口大小。你也可以通过使用floating_modifier来操作。另一个调整浮动窗口大小的方法是鼠标右击标题栏并且拖拽。

关于用键盘来调整浮动窗口的大小,请看调整大小的绑定模式,由i3提供
default config

浮动窗口一直处于平铺窗口的上方

3 树

i3保存着所有关于 X11 output 的数据,workspace和窗口布局在里面是树形图的结构。根节点是X11根窗口,随后是X11 putputs,然后是 dock areas 和一个 content container,随后是workspace,最后是window本身。在旧版本的i3,每个workspace有多个list和table,这个方法的结果是难以使用(真的难),理解和实现。

3.1 树是由容器组成的

我们把树的组件叫做Containers。一个容器可以掌控一个窗口(意思是一个X11 window,你可以真正看到的,使用的,比如说一个浏览器)。另外,Containers可以再包含一个或者多个Containers。一个简单的workspace例子是:当你在单个显示器打开i3时,只有一个workspace,你这时打开了两个终端,你最后得到的树是:

i3wm的使用说明_第6张图片
Two terminals on standard workspace

i3wm的使用说明_第7张图片
tree

3.2 定位和Split Containers

当以树作为数据结构时,为了构建一个布局,使用所谓的 Split Containers 是很正常的。在i3里,每个容器都有属于自己的方位(水平,垂直,或者未指定),并且定位取决于上一级容器的布局(垂直的有splitev和stacking,水平的有splith和tabbed)。所以我们以一个workspace作为例子,workspace 容器的默认布局是splith(如今很多显示器是宽屏的)。如果你把布局切换成splitv(默认情况下按$mod+v)然后打开两个终端,i3会把你的窗口设置成这个样子:

i3wm的使用说明_第8张图片
vertical

从version 4开始,i3多了一个有趣的新特性,它能够分割任何东西:让我们假设你现在在workspace里打开了两个终端(以splith布局打开,也就是水平定位)焦点处于右边的终端,现在你想要要在当前终端下面打开另外一个终端。如果你直接打开新终端,它会被放在最右边而不是下面。解决办法是按$mod+v用splitv布局来分割容器(要打开Horizontal Split Container,用$mod+h)。现在你可以在当前终端下面打开一个新终端了:

i3wm的使用说明_第9张图片
Vertical Split Container

i3wm的使用说明_第10张图片
tree

你可能已经猜到了:它能够无限分割到下一层。

3.3 聚焦于父容器

$mod+a

我们继续以上图为例。我们在左边有一个终端,右边有两个垂直分布的终端,焦点处在右下角的终端。当你又打开一个新终端,他会被放在右下角终端的下面。

所以说,要怎么把新终端放到右边而不是下面呢,答案是使用focus parent,它会把焦点转移到当前容器的父容器。在这种情况下,你会把焦点放在水平方向的workspace里的vertical split Container。因此,新窗口会被打开在Vertical Split Container的右边:

i3wm的使用说明_第11张图片
Focus parent, then open new terminal

3.4 隐式容器

在一些情况下,i3需要隐式地创建一个容器来完成你的命令。

一个例子如下:你在单个显示器启用i3,在单个workspace打开3个终端。workspace节点在i3的layout tree里,这些终端窗口直属于workspace节点。默认workspace节点的方向设置是水平的。

现在你往下移动其中一个终端($mod+Shift+k by default)。那么workspace节点会被设置成垂直布局,你移动的这个终端就会出现在屏幕的下面并且直属于workspace。一个新的容器被创建,用于容纳另外两个终端。当你切换到tabbed模式,你会注意到这个情况。你最终会得到一个有标签页容器,里面有两个窗口(比如 "H[urxvt firefox]"),还有一个你刚才移动到下面的终端窗口。

4 配置i3

到这里,真正有趣的事情才刚刚开始;-)。很多东西都非常依赖于你样要的工作环境,所以我们无法提供一个默认的且合理的配置。

虽然没有使用编程语言来进行配置,i3在你希望让窗口管理器怎么做的方面依然保持着灵活的特性。

例如,你可以配置一个绑定用来跳到指定的窗口,可以设置打开指定的应用程序到指定的workspace,可以自动启动某个程序,可以改变i3的配色,还可以设置快捷键来做一些有用的事情。

要改变i3的配置,复制 /etc/i3/config~/.i3/config并且用一个文本编辑器来编辑它(或者是复制到~/.config/i3/config,如果你喜欢XDG目录方案)

第一次启动i3时,i3会引导你创建一个配置文件,你可以告诉向导程序在配置文件里设置Alt(Mod1)或windows(Mod4)键作为辅助按键。当然,创建的配置文件会使用你当前键盘布局的键盘符号。要启动向导程序,请在终端输入命令i3-config-wizard
请确认你当前并没有~/.i3/config/。否则向导程序将会退出。

4.1 备注

在配置文件里使用备注是可行的和推荐的,为了以后参考或修改,适当地记录你的配置。备注以#开始,而且只能用在每行的开头:

例子

# This is a comment

4.2 字体

i3支持以 X core字体和 FreeType 字体来渲染窗口标题

你可以使用xfontsel(1) 生成一个 X core字体类型。你需要使用一个支持ISO-10646编码的字体来显示特殊字符(Unicode)。

一个FreeType字体类型是由一个字体系列,风格,粗细,便提,伸延组成的,FreeType字体支持从右到左的渲染和往往比 X core字体支持更多的Unicode符号。

如果i3不能打开配置好的字体,i3会吧错误输出到日志文件,退回到可以工作的字体

语法:

font 
font pango: [