体验I3之美

  1. 1. i3WM
  2. 2. 配置细节
    1. 2.1. Workspaces
    2. 2.2. Application
    3. 2.3. i3blocks
    4. 2.4. compton
  3. 3. 易用性建议

enter description here
先晒张日常桌面图。Gnome3用了半年了一直被其蹩脚的交互和层出不穷的Bug所折磨。虽然Gnome3很漂亮,很简洁,但是毕竟漂亮不能当饭吃。套餐这种东西虽然简单省事,但是终究不是为你所量身定制的,总有其中一样不合你口味。因此,我决定再次抛弃“开箱即用”的DE(Desktop Environment),在WM(Window Manager)的基础上自己打造一套适合自己的桌面环境。

i3WM

i3是一个比较知名的平铺式的窗口管理器(TilingWM),它可以通过快捷键来管理程序窗口,使他们像截图那样平铺在显示屏幕,控制他们的大小和位置。十分高效也有几分Geek的味道。
i3的所有配置全部使用shell写成,甚至顶部panel的各种指示器,都由用户自己写的bash脚本获得并显示。十分简单暴力。虽然没有图形界面那么直观,但是有一种一切尽在自己掌控之下的感觉。这种感觉其实是十分十分不错的。
我的I3WM配置文件托管在了Github

配置细节

I3配置文件的语法其实跟shell差不多,熟悉Linux的用户应该都能完全看懂。我的配置文件分为几大模块:

Workspaces

工作区配置,我根据日常使用的程序类别一共设置了10个工作区(图标显示需要在本地电脑上安装Fontawesome字体):

1
2
3
4
5
6
7
8
9
10
set $ws1 "1: Browser"
set $ws2 "2: Code"
set $ws3 "3: Chat"
set $ws4 "4: File"
set $ws5 "5: Terminal"
set $ws6 "6: Video"
set $ws7 "7: Music"
set $ws8 "8: Graphic"
set $ws9 "9: Game"
set $ws0 "0: Fullscreen"

然后,把属于各自类别的程序绑定到对应的工作区,这样打开这些程序的时候他们就能自动出现在合适的工作区了:

1
2
3
4
5
6
7
assign [class="google-chrome-stable"] $ws1 # Browser
assign [class="vivaldi"] $ws1 # Browser
assign [class="firefox"] $ws1 # Browser
assign [class="(?i)code"] $ws2 # Code IDE
# ...
assign [class="dota2"] $ws0 # Fullscreen
assign [class="Minecraft 1.8.9"] $ws0 # Fullscreen

Application

在i3配置文件里面我们可以对常用的程序绑定快捷启动键:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bindsym F10 exec xfce4-appfinder
bindsym Print exec xfce4-screenshooter
# bindsym $mod+Return exec i3-sensible-terminal
bindsym $mod+Return exec pantheon-terminal
bindsym $mod+Control+t exec telegram-desktop
bindsym $mod+Control+g exec google-chrome-stable
bindsym $mod+Control+v exec vivaldi
bindsym $mod+Control+f exec nemo
bindsym $mod+Control+c exec code
bindsym $mod+Control+n exec nitrogen
bindsym $mod+Control+w exec electronic-wechat
bindsym $mod+Control+y exec youdao-dict

然后,对于特殊的不适合平铺的窗口,可以直接设置它们为浮动窗口:

1
2
3
4
5
6
for_window [class="Geany"] floating enable border normal
for_window [class="GParted"] floating enable border normal
for_window [class="Nitrogen"] floating enable border normal
for_window [class="(?i)virtualbox"] floating enable border normal
for_window [class="Youdao Dict"] floating enable border normal
# ...

PS:可以使用xprop|grep WM_CLASS来查看正在运行窗口的class名称。

i3blocks

i3blocks是I3顶部面板的一个可选组件。它使用ini格式的配置文件,支持多种终端脚本,还支持鼠标点击、滚动事件,十分强大。配置文件样本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
command=~/.config/i3/blocks/$BLOCK_NAME
align=center
color=#ffffff
separator=true
separator_block_width=13
markup=pango
[disk-home]
label=
command=~/.config/i3/blocks/disk $HOME
instance=/home/kevin
interval=30
color=#FFCC80
[weather]
instance=1808926 # hangzhou's city code
interval=60
color=#90CAF9
# ...

主要字段解释:

  • 首先前面无section的parameters属于默认配置项,为每个section的缺省配置。
  • 然后每个section都对应顶栏上面的一个指示器,称为block。
  • 每个block必须显示一定的数据,可以通过command配置项指定获取数据的命令,并使用interval来设置命令执行周期间隔。
  • instance为可以传递到command脚本中的环境变量。
  • color和label为颜色和标签,属于修饰性的配置项。

所有可用的block命令可以参考我的配置文件夹:blocks

compton

compton可以给i3带来透明和阴影效果的支持。如果只关心性能而不介意美观与否,你完全可以跳过此节。
compton默认是不给顶栏加透明效果的,需要加入如下配置:

1
2
3
4
5
6
7
wintypes:
{
dock =
{
opacity = 0.8;
};
};

同时,compton的阴影效果不适用于某些窗口,需要排除它们:

1
2
3
4
5
6
7
8
shadow-exclude = [
"name = 'Notification'",
"name *= 'compton'",
"class_g = 'Conky'",
"class_g = 'Firefox'",
"class_g *= 'fcitx'",
"class_g = 'Youdao Dict'"
];

易用性建议

i3WM只是一个地基,我们可以在这之上搭建一个适合自己的环境。每个人的口味都不一样,所以我简单的罗列一下我个人比较喜欢的应用和配置以供参考。

  • dmenu: WM下使用最广泛的应用启动器,可以自动根据用户输入的命令进行提示。
  • rofi: dmenu的替代品
  • quickswitch.py: 跨工作区窗口快速跳转工具,可以整合到dmenu中。
  • xfce4-appfinder: xfce4的应用程序列表。能够自动搜索文件系统中的desktop文件,并生成应用列表。非常实用的工具。
  • pantheon-terminal: elementaryOS的默认终端。小巧,依赖少,支持背景透明、多标签,很完美的终端模拟器。(需要使用dconf-editor来修改设置,位置:/org/pantheon/terminal/settings/
  • nemo: linuxmint的默认文件管理器,forks自nautilus,但是比nautilus好用得多。(使用之前需要使用dconf-editor设置/org/nemo/desktop/show-desktop-iconsfalse
  • nitrogen: 提供简单的图形界面来设置壁纸并在每次开机之后自动恢复。
  • clipit: 剪贴板支持
  • lightdm: 轻量级图形登录界面