i3 tiling window manager 是一个运行在 GNU/Linux 和 BSD 系统上的平铺式窗口管理器。官方主页上给出 i3 开发的目标是:
本文主要参考自 Alex Booker 上传于 yutube 的视频系列:i3wm。由于作者设定许可为《标准 YouTube 许可》,故不在此提供转载。国内用户请自行科学上网观看。
考虑到读者可能具有的英语水平,此文尽量按照视频流程叙述。在保持叙述流畅的前提下尽可能做到对视频的吻合。
在此给出原 po 所著的视频大纲的翻译
i3 是一个窗口管理器。窗口管理器是控制窗口位置和外形的工具。
i3 特别在它是一个平铺式的窗口管理器。i3 中打开的窗口能自动最大化填充屏幕。当多个窗口同时打开时,i3 能将窗口水平 / 垂直平铺在屏幕上。(笔者注:类似于 Windows 左右停靠的功能,只是更加强大)
虽然 i3 是一个平铺式窗口管理器,他也支持层叠,标签式的窗口。对于对话框式的窗口(全屏显示是很荒谬的), i3 也支持浮动式的布局。
i3 基本上支持所有 GNU/Linux 发行版。Ubuntu 官方 repository 中自带 i3。 也可以选择从官网下载。
安装之后重新登入即可选择 i3 桌面环境。 第一次进入 i3 会弹出窗口引导首次配置。首先会询问是否生成配置文件。i3 的所有特性,如按键绑定,外观等都可以在配置文件中完全设置。如不生成将使用默认配置。
下一步选择 mod 按键。两个选项分别为 Windows 键和 Alt 键。mod 按键的作用是与其他键组成各种快捷键。
完成后就能进入 i3 桌面了。目前 i3 看起来很简陋。但是它是可以高度自定义的。Alex 的视频第一集主要演示 i3 的功能。外观配置将在随后的视频内演示。
按 mod+Enter 组合键打开终端
按 mod+shift+q (quit) 组合键关闭一个窗口
按 mod+d (dmenu) 组合键打开 dmenu 导航,dmenu 显示在屏幕上端。输入软件名可搜索应用程序,方向键选择列表,回车键启动。
i3 默认水平平铺新打开的窗口。新打开的窗口会水平平铺在当前窗口右方。当前窗口边缘默认有一条蓝色高亮表示新打开的窗口将要插入的位置。
按 mod+v (vertical) 切换为垂直平铺。蓝色高亮将会反应这一更改。新打开的窗口会垂直平铺在当前窗口下方。
使用 mod+ 方向键更改当前聚焦的窗口。
同时可以选择使用进阶的 mod+j/k/l/; 组合键切换窗口焦点。
使用这组组合键可以保持双手不离开键盘而完全操作桌面。在其他用到方向键的地方也可以使用 j/k/l/; 代替
按 mod+s (stack) 键层叠窗口。 按 mod+↑/↓ 切换窗口。
按 mod+w 键标签式地排列窗口。按 mod+←/→ 切换标签。
按 mod+e 键返回平铺模式。
按 mod+r (resize) 键进入 resize 模式。此时屏幕下方显示红色 resize 提示。按 esc 键退出。
在 resize 模式下按方向键调整窗口大小。右键增大左键缩小。注意此处并不是意味着按右键使窗口边界向右移。
在一般模式下按 mod+shift+ 方向键调整窗口位置。
i3 的 workspace 相似于 Windows 10 任务视图中的虚拟桌面。每一个 workspace 上都可以放置窗口从而使得单个 workspace 上的窗口不至于太密集。
i3 中并没有窗口全屏的功能。一个屏幕的空间被这个屏幕上的窗口平铺填充。所以一个等价的操作就是移动需要全屏的窗口到另一个 workspace。
按 mod+shift+ 数字键 (主键盘数字键) 将当前窗口移动至对应的 workspace。当一个 workspace 有至少一个窗口时, workspace 显示在屏幕左下角。当一个 workspace 的最后一个窗口被 关闭 / 移出 时,该 workspace 会自动消失。
推荐将浏览器置于一个 workspace 全屏显示,终端 / 编辑器 等多个窗口置于一个 workspace 平铺。
可在 i3 配置文件中设置某窗口自动打开于某一特定 workspace 而非当前 workspace。
按 mod+shift+e (exit) 登出。为了防止误操作,i3 默认需要用鼠标单击确认。
在终端中输入 i3lock 锁屏。在锁屏中键入密码重新登入桌面。
在初次进入 i3 桌面环境时,初始配置引导会询问是否生成默认配置文件。该文件生成于 ~/.i3/config
。(笔者注:个别系统会生成于 ~/.config/.i3/config
)。
如果初始配置引导时没有选择生成配置文件,在命令行中运行 i3-config-wizard。如果已经生成过配置文件,再次运行 i3-config-wizard 会提示文件已存在。
config
文件是纯文本格式。可用 gedit / vim 等文本编辑器编辑。
之前介绍过如何通过在终端中输入 i3lock 锁屏。作为另一种选择,我们可以在配置文件中设置按键绑定。在任意一行插入 bindsym $mod+shift+x exec i3lock
。此句意为绑定组合键 mod+shift+x 到执行命令 exec i3lock
。通过类似的方法可以设置诸如快捷键执行命令行命令等动作。
保存配置文件后需要按组合键 mod+shift+r (restart) 重启 i3。当 i3 启动时会读入配置文件使之生效。
i3 中的所有默认设置都生成于初始配置文件中。这意味着通过修改该文件,用户可以修改 i3 的任何默认配置。另外也可以将默认配置文件作为按键绑定的参考手册。
假如用户意外重复设置了同一组按键的绑定,当 i3 读入配置文件时会在屏幕上方显示错误。单击该错误以显示详细冲突。
Documentation for i3 可以从官方网站获取。该教程中的所有内容都可以在此文档中找到。
媒体,音量,触控板,屏幕亮度等按键默认没有设置。关于这个问题的解决方法在 i3 的 faq 论坛上有。这里为了方便不方便上外网的读者,引用如下 4:
# Pulse Audio controls
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound
# Sreen brightness controls
bindsym XF86MonBrightnessUp exec xbacklight -inc 20 # increase screen brightness
bindsym XF86MonBrightnessDown exec xbacklight -dec 20 # decrease screen brightness
# Touchpad controls
bindsym XF86TouchpadToggle exec /some/path/toggletouchpad.sh # toggle touchpad
# Media player controls
bindsym XF86AudioPlay exec playerctl play
bindsym XF86AudioPause exec playerctl pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
... prompt'''
其中,脚本 toggletouchpad.sh
如下:
#!/bin/bash
if synclient -l | grep "TouchpadOff .*=.*0" ; then
synclient TouchpadOff=1 ;
else
synclient TouchpadOff=0 ;
fi
注意这里使用 pactl 控制音量。Ubuntu 自带 pactl,其他发行版可能需要自行下载。
控制媒体使用的是 playerctl。大部分 Linux 发行版官方软件源都不包含 playerctl。需要从 playerctl 的 GitHub 主页 下载 deb 包或者源码自行编译。
要使应用程序,如 rhythmbox,随 i3 自动启动,在配置文件中加入 exec rhythmbox
。exec 只会在登入 i3 桌面环境时生效。若要使应用在每次重启 i3 时启动,使用 exec_always
。
如要设置壁纸,下载类似于 feh 的软件包。作为例子,这里使用 feh。
在终端中运行 feh --big-scale wallpaper.jpg
其中 wallpaper.jpg
是到图片的相对或绝对路径。
将此命令加入 i3 配置文件,如 exec_always feh --big-scale /home/
注意这里一定要使用绝对路径。
部分 Linux 发行版没有带图形化界面的显示屏设置软件。这里推荐安装 arandr。 通过 dmenu 启动 arandr。设置完毕后点击 另存为
将配置写入 sh 脚本文件。这个文件是运行 xrandr 程序的脚本。使用 arandr 的图形化配置界面可以方便地生成 xrandr 的运行参数。在终端中输入 cat ~/.screenlayout/foo.sh
显示脚本内容,其形如:
xrandr --output Virtual3 -- off --output Virtual2 --off --output Virtual1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --
将如下内容复制粘贴至配置文件,前面加上 exec_always
即可在每次启动 i3 时自动执行。
i3 默认支持多至十个 workspace。在配置文件中,有形如 bindsym <组合键> workspace <工作区名称>
(进入工作区) 以及 bindsym <组合键> move container to <工作区名称>
(移动窗口至工作区) 这样的语句。通过修改 <工作区名称> 可以自定义当某一工作区开启时右下角的显示标识。
注意,两个语句的 <工作区名称> 最好保持一致。
在定义 workspace 名称时,推荐前缀数字编号方便排序。
在修改 <工作区名称> 时,为了方便修改以及避免笔误造成的不一致,可以使用变量。在配置文件中的任意位置定义变量即可在定义下方使用它。语法形如 set &<变量名> "<变量值>"
随后通过 $<变量名>,如 bindsym $mod+1 workspace $workspace
使用变量。
在定义 workspace 名称下方的任意位置(主要是考虑到变量只能在其定义后才能使用的问题)输入形如 assign [<属性>="<值>"] <工作区名称>
可以自动将符合条件的窗口打开在某一特定 workspace。
要获取某一窗口的属性,推荐使用 xprob。在命令行中输入 xprob
运行后,注意鼠标指针的改变。单击任意窗口显示其属性。以 rythmbox 为例,我们找到如下一行: WM_CLASS(STRING) = "rhythmbox", "Rhythmbox"
, 将第二项写入 assign
命令,即 assign [class="Rhythmbox"] <工作区名称>
,即可将 rhythmbox 默认开启于指定工作区。
在定义 workspace 名称时可以使用图标字体。这里以 Font Awesome 为例。
下载并解压后将 .ttf 格式字体复制到 ~/.fonts 目录下即可使用。于 Font Awesome Cheat Sheet 搜索想要的图标,复制粘贴至配置文件中定义 workspace 名称的部分。重启 i3 即可生效。
注意在文本编辑器中图标可能会有显示问题。但是这并不会影响使用。
下载并解压 ttf 格式的字体,如同之前使用 Font Awesome 一样,将 .ttf 字体复制到 ~/.fonts
目录下。
在 i3 配置文件中,找到由 font
开头的一行。更改之使其如 font pango:<字体名称> <字号>
。如要使用 X11 字体,也可以选择使用例如 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
这样的 XLFD 命令。XLFD 可以使用 xfontsel
查看。
你可以根据喜好选择字体,Alex 的视频中使用的是 Yosemite San Francisco Font 做示范。
对于中文偏好的用户,这里推荐使用文泉驿 的《文泉驿等宽正黑》字体。该字体一个汉字宽度是西文宽度的两倍,适用于控制台及桌面环境。本文写作时官方主页下载页面无响应,若遇到相同问题请前往 sourceforge 下载。
使用 lxappearance 可以修改 GTK 字体。所有使用 GTK 的窗口的默认字体都可以通过 lxappearance 修改。
在某些未知情况下,新安装的字体无法在 lxappearance 选单中找到。绕过这个问题的方法如下:当更改 lxappearance 默认设置时,新配置会写入文件。手动编辑该文件中 gtk-font-name
字段即可。
大部分情况下,该配置文件生成于 ~/.gtkrc-2.0
或 / 和 ~/.config/gtk-3.0/settings.ini
。 若两个文件都有生成,需要同时更改。
更改可以在 lxappearance 中确认到。
详细请参考 BETTER FONT RENDERING IN LINUX WITH INFINALITY
接下来的配置部分使用的语句均来自 Alex@GitHub/dotfiles。本文将对各项设置做出解释。正确地复制粘贴这些语句(或直接使用 repo 中的文件)即可达到视频演示的效果。
以下语句设定窗口边框,背景,文本,标题栏颜色。
set $bg-color #2f343f
set $inactive-bg-color #2f343f
set $text-color #f3f4f5
set $inactive-text-color #676E7D
set $urgent-bg-color #E53935
# window colors
# border background text indicator
client.focused $bg-color $bg-color $text-color #00ff00
client.unfocused $inactive-bg-color $inactive-bg-color $inactive-text-color #00ff00
client.focused_inactive $inactive-bg-color $inactive-bg-color $inactive-text-color #00ff00
client.urgent $urgent-bg-color $urgent-bg-color $text-color #00ff00
一般而言,设置窗口外观的语法如下:
其中
可以为以及 其余各项属性可以在 官方文档 4.18. Changing colors 找到。
在配置文件中对颜色的设置使用的是 HTML 16 进制颜色值。原视频给出了 colorpicker 取色器网站。这里给出 w3schools 的取色器 作为更好的替代。
接下来定义的是底部横幅的颜色。将如下语句取代原先的 bar {...}
部分。
# bar
bar {
status_command i3blocks -c
colors {
background $bg-color
separator #757575
# border background text
focused_workspace $bg-color $bg-color $text-color
inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
urgent_workspace $urgent-bg-color $urgent-bg-color $text-color
}
}
其中
根据情况替换成 i3blocks 配置文件路径。详情见 自定义 i3bar blocks
一节。
施工中