i3

历程

  • 最先用的是 Ubuntu 16.04 自带的 Unity 。
  • 更新 Ubuntu 后用的 Ubuntu 18.04 自带的 Gnome 。
  • 用了 Gnome 后学会了折腾,各种配置堆上。
  • 后来发现 Gnome 太卡太吃内存,并且才知道系统可以换桌面, 于是在 master 安利下换上 xfce 。
  • xfce 很稳定很流畅,但是太丑,可玩性太低,于是换上高大上的 KDE 。
  • 中途还换过 enlightenment ,但是 enlightenment 的稳定性实在不敢恭维。
  • 最后用上了 i3 ,原因不详。

WARNING:
既然你打算尝试 i3 ,本文假设你有一定的动手能力(说白了就是能折腾)。

安装

sudo aptitude install i3-wm 后注销重进选择 i3 即可。

然后你会发现弹出个窗口,接下来黑屏,没有动静。
WTF ?
其实 i3 已经开了,只是没背景而已,按 win+Enter 打开终端。

配置

弹出一个菜单给你设置?想多了,要配置就写 ~/.config/i3/config 去吧。

$mod 是 i3 的灵魂,每一个快捷键最好都以 $mod 开头,
一般 $mod 被设置成 Mod4 ,也就是 Win 键。
bindsym 是绑定快捷键,注释很详细,自己看,下面列出一些重要的配置。

方向

i3 默认把 jkl; 做方向键,也许你会更喜欢 hjkl ,自己替换掉就是了。
另外分号不是 ; 而是 semicolon 。

壁纸

i3 默认没有壁纸,因为它是个平铺式的窗口管理器。
但壁纸是第一生产力啊,不要壁纸怎么行。

下载 feh: sudo aptitude install feh.
feh --bg-fill (YOUR_IMG) 就可以设置壁纸了,至于实现原理,你不会想知道的。

锁屏

i3 默认没有锁屏,为了防机惨,锁屏还是很有必要的。

下载 i3lock: sudo aptitude install i3lock.
直接 i3lcok 就可以锁屏,i3lock -i (YOUR_PNG) 还可以设置锁屏壁纸。
需要快捷键锁屏的话,加上一句配置就行了:

1
bindsym $mod+Tab exec i3lock # Win+Tab 锁屏

工作区

i3 对工作区的数量没有限制,工作区的名字甚至可以有字母。
i3 默认配置里只提供了切换到 1 至 10 的快捷键,
但是有时候“切换到下一个工作区”和“切换到上一个工作区”可能更方便。
加上两句:

1
2
bindsym $mod+comma workspace prev # Win+逗号
bindsym $mod+period workspace next # Win+句号

另外,默认配置里,把一个窗口移动到某工作区的时候仍会停留在原工作区,
想改变这点, 把 move container to workspace x 后面加上 ; workspace x 即可。

i3bar

个人超喜欢 i3bar ,因为它可以接受任何一个程序的输出。
这意味着你可以完全自由地定制 i3bar 。

找到 bar { 这行。
bar 的模式有三种:

1
2
3
mode hide # Auto display
mode invisible # Never display
mode dock # Alway display

位置有两种:

1
2
position top
position bottom

重点来了,定义处理程序这一项:

1
status_command i3status

可以看到默认使用 i3status 作为处理,i3status 本身也可以配置,
但是如果想自由配置,你可以写个程序,输出一个 json ,接口比较复杂,
在此不赘述,你可以在 ~/.config/i3status/config 里加几行:

1
2
3
4
5
general {
output_format = "i3bar"
colors = true
interval = 5
}

再运行 i3status 依葫芦画瓢就是了。

i3-gaps

如果你希望窗口平铺之间会有间隙,i3-gaps 会满足你。
如果你用 Debian, Ubuntu , 去 github 上搜 i3-gaps-deb clone 下来后运行 i3-gaps-deb 就行了。
如果用 Arch ,软件包管理器里有,直接下。

透明

也许你给终端模拟器设置了透明度,很遗憾,在 i3 上没用。
解决方案是下载 compton ,运行 compton -b 即可。

接口

你可以很自由地向 i3 发送命令,i3-msg 提供了一系列接口,
足以帮助完成更复杂的定制。

使用 i3-input 可以直接向 i3 发送一条命令。