I3 (简体中文)

From ArchWiki
Jump to: navigation, search
翻译状态: 本文是英文页面 i3翻译,最后翻译时间:2014-05-11,点击这里可以查看翻译后英文页面的改动。

i3 是一套动态平铺式窗口管理器,灵感来自针对开发者与资深用户的 wmii

i3的既定目标包括清晰可读的文档,多显示器支持,多窗口的树形数据结构,和多种的模式,例如 vim 模式。

安装

安装 i3 软件包,其中包含了 i3lock, i3statusi3-wm 程序包。i3-wm 是一套独立的桌面管理器,i3status 则是用于通过 stdout 向 i3bar 写入一条状态行,i3lock 则专于锁屏。

Arch User Repository 中还提供了不少附加程序包。例子可参考#补丁章节。

显示管理器

i3-wm 软件包包括了作为Xsessioni3.desktop,用于启动窗口管理器。 i3-with-shmlog.desktop 启用了日志(对于调试很有用)。i3-gnomeAUR 软件包在 GNOME 中集成了 i3-wm

xinitrc

编辑 Xinitrc ,添加:

exec i3

如果您想记录 i3 所有的输日志,则添加:

exec i3 -V >> ~/i3log-$(date +'%F-%k-%M-%S') 2>&1

使用

可在 official documentation 获取更多细节 i3 User’s Guide.

键盘映射

在 i3 里,一切命令均以「修饰键」开头,即 $mod. 默认上来说是 Alt 键 alt(Mod1),但开始键 Super(Mod4) 也更为广泛接受。Super 键往往带有 Windows 图标,在苹果键盘上则是 Command 键。

i3 偏好Using i3 以获取默认映射表。见 Keyboard 绑定 以获取添加新快捷键的说明。

非Qwerty键盘布局的用户可能会希望跳过 以下所说的“配置助手”。

容器

i3 以树形结构的方式管理窗口,容器是最小的单位。这种结构可以被水平或竖式分割。容器默认是平铺的,但可以设置为标签式或栈式布局,同样也可以设置为浮动式(适用于对话窗口)。浮动的窗口总是显示在顶部。

程序启动器

i3 使用 dmenu 作为首席程序启动器,键绑定默认为 $Mod+d.

i3-wm 包含了 i3-dmenu-desktop ——— 一个 "dmenu" 的Perl 包装器,它通过现成的所有程序 .desktop 文件,生成名单。 不或者 j4-dmenu-desktop-gitAUR 软件包也是一个不错的选择。

设置

Configuring i3 以获取更多细节。此文章余下部分假设 i3 的配置文件位于 ~/.config 目录。

配置助手和可选键盘布局

当 i3 首次启动时,它会启动配置助手 i3-config-wizard。此工具会通过重写位于 /etc/i3/config.keycodes 的模板配置文件来创建 ~/.config/i3/config。他会对默认模板造成两次修改。

  1. 它会询问用户以选择默认的修饰建。它会在模板文件中添加一行,类似于 set $mod Mod1; 然后
  2. 它会用用户设置的键盘布局相应的 bindsyn 行替换所有 bindcode 行。

第二步是设计用于确保 Qwerty 键盘上的四个导航键 jkl 和 "分号" on a Qwerty keyboard会被映射在拥有相同位置的按键上,举例说,Dvorak 键盘上的 htns。这个小戏法的副作用是 最多十五个按键会被以一种破话位置记忆的方式被映射 - 所以,对于 Dvorak 用户, “重启”被绑定于 $mod1+p 而不是 $mod1+r,“竖直分割”被绑定于 $mod1+d 而不是 $mod1+h,类似的还有更多。

因此,其他键盘布局的用户若是想要直截了当的,符合教程中给出的按键绑定的键盘绑定,可能更倾向于不去使用 "config wizard" 。这可以拷贝 /etc/i3/config~/.config/i3/config (或 ~/.i3/config),然后编辑此文件。

注意,用户也可以建立一份以键码为基础的配置。例如,对于那些经常切换键盘布局,但是想要 i3 的键盘绑定保持相同的用户。

颜色主题

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:I3 (简体中文)#)

The configuration file allows for customization of window decoration colors, but the syntax makes it impractical to create or share themes. There are several projects which make this easier and include a variety of user-contributed themes.

  • i3-style — Modifies your config in place from a theme stored in a JSON object, designed for frequently tweaking or changing a colorscheme
https://github.com/acrisci/i3-style || nodejs-i3-styleAUR[broken link: archived in aur-mirror]
	+	
  • j4-make-config — Merge your config with a collection of themes or personal config parts, for example host-specific configuration, allowing quick changing of the theme and flexible, dynamic customization of the configuration
https://github.com/okraits/j4-make-config || j4-make-config-gitAUR

i3bar

除了显示工作区信息外,i3bar 也可以作为 i3status 的输入,或是替代品。下一章节会对此进行详细描述。示例:

~/.config/i3/config
bar {
    output            LVDS1
    status_command    i3status
    position          top
    mode              hide
    workspace_buttons yes
    tray_output       none
    
    font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1

    colors {
        background #000000
        statusline #ffffff

        focused_workspace  #ffffff #285577
        active_workspace   #ffffff #333333
        inactive_workspace #888888 #222222
        urgent_workspace   #ffffff #900000
    }
}

更多细节,见Configuring i3bar

i3bar可选方案 =

一些用户可能更偏好于类似于常规 桌面环境 提供的面板。这可以通过在 i3 启动时运行面板程序达成。

例如 XFCE 面板[broken link: invalid section],在 ~/.config/i3/config 的任何处添加以为行:

exec --no-startup-id xfce4-panel --disable-wm-check

i3bar 可以通过注释掉 ~/.config/i3/config 中的 bar{ } 段落禁用,或者定义一个按键以切换 i3bar 显示状态:

~/.config/i3/config
# bar toggle, hide or show 	
bindsym $mod+m bar mode toggle

i3status

拷贝默认的配置文件到家目录:

$ cp /etc/i3status.conf ~/.config/i3status/config

不是所有的插件都被在默认配置文件中被定义,一些配置值对于系统也可能是无效的,所以需要相应的更新。具体见 man i3status

i3status可选方案

https://github.com/brndnmtthws/conky || conky
  • i3blocks — 通过 shell 脚本扩展。 它可以处理点击事件,中断,和定义或更在块的基础上更新间隔。
https://github.com/vivien/i3blocks || i3blocksAUR
	+	
  • i3situation — 另一个 Python 3 状态栏生成器。
https://github.com/HarveyHunt/i3situation || i3situation-gitAUR
	+	
  • j4status — 提供了状态栏,可以通过插件扩展,且是用 C 写成的。额外的插件由j4status-plugins-gitAUR.
http://j4status.j4tools.org/ || j4status-gitAUR提供
	+	
  • goi3bar — Go 写的 i3status 替代品。配置文件同时还有各种插件,并发选项和丰富的插件支持。
https://github.com/denbeigh2000/goi3bar/ || goi3bar-gitAUR

i3status 包装器

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:I3 (简体中文)#)
  • i3cat — A go based wrapper which can concatenate inputs from multiple external sources. It can handle click events and forwarding user specified signals to its subprocesses.
http://vincent-petithory.github.io/i3cat/ || i3cat-gitAUR
  • py3status — An extensible i3status wrapper written in Python.
https://github.com/ultrabug/py3status || py3statusAUR

状态栏中的图标字体

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:I3 (简体中文)#)

'i3bar' 有个补丁负责实现对 XBM 图标的支持,不过我们也可以使用图标字体。

  • ttf-font-awesome — 可以通过 CSS定制的可缩放矩阵字体。[1]显示了每个图像的 Unicode 值。
http://fortawesome.github.io/Font-Awesome/ || ttf-font-awesomeAUR
  • ttf-font-icons — 也提供了全面的图像字符,包括彼此毫无重叠的 Awesome 和 Ionicons, 也很好地避免了 Awesome 与 DejaVu Sans 的微秒重叠。
http://kageurufu.net/icons.pdf || ttf-font-iconsAUR.

要结合这些字体,在配置文件中一种字体属性的后缀用,分割字体。示例:

~/.config/i3/config
bar {
   ...
   font pango:DejaVu Sans Mono, Icons 8
   ...
 }

In accordance with pango syntax, font size is specified only once, at the end of the comma-separated list of font families. Setting a size for each font would cause all but the last font to be ignored.

Add icons to the format strings in ~/.config/i3status/config using the unicode numbers given in the cheatsheets linked above. The input method will vary between text editors. For instance, to insert the "heart" icon (unicode number f004):

Merge-arrows-2.pngThis article or section is a candidate for merging with Internationalization.Merge-arrows-2.png

Notes: Should be described in one place; see also ArchWiki:Requests#Input methods. (Discuss in Talk:I3 (简体中文)#)
  • in various gui text editors (e.g. gedit, Leafpad) and terminals (e.g. GNOME Terminal, xfce4-terminal): ctrl+shift+u, f004, Enter
  • in Emacs: ctrl+x, 8, Enter, f004, Enter
  • in Vim (while in insert mode): Ctrl+v, uf004
  • in urxvt: while holding Ctrl+Shift, type f004

在窗口之间快速跳转

  • quickswitch-for-i3 – 一把可在 i3 的窗口之间快速跳转,定位的 Python 实现。
  • i3-wm-scripts – 用正则表达式在窗口之间进行搜索并跳转
  • winmenupy 启动 dmenu 时就会依次列出工作空间上的一系列客户端,选定其中一个并跳转即可

i3status

首先我们得把默认设置文件复制到 home 目录,以好工作:

$ cp /etc/i3status.conf ~/.i3status.conf
提示: 示范配置文件中用 eth0wlan0 作为接口名,如果与您系统并不一致,请参考 Network configuration#Device names

添加温度状态

如果您想在往 i3status 添加您的 CPU 温度状态,在 ~/,i3status.confg 添加以下几句:

~/.i3status.conf
order += "cpu_temperature 0"
cpu_temperature 0 {
        format = "T: %degrees °C"
    max_threshold = 65
        path = "/sys/devices/platform/coretemp.0/temp1_input"
}

如果温度报告它无法读取温度数值,那修改一句:

path = "/sys/class/thermal/thermal_zone0/temp"

修改工作区的名称

注意: 工作区即 workspace

虽说不是必须的,但很多人期望能给常用工作区起名。首先您需要确定您期望哪些工作区固定在哪些显示器。在虚拟终端执行 xrandr 下,它告诉您当前您有哪些现成的显示器。一般来说,会有代表笔记本的 LVDS1, 或是 VGA1, HDMI1, HDMI2 等等,即外接显示器。如果您在用 Xinerama, 那显示器名称要改用 xinerama-0, xinerama-1 等等。在 ~/.i3/config 上添加您设想的工作区名称,您就也得在「移动所在窗口到任意工作区的命令」上加以修改。

# Workspace names
workspace "1:Web" output LVDS1
workspace "2:Mail" output LVDS1
workspace "3:Irc" output LVDS1
workspace "4:Shell" output LVDS1
# switch to workspace
bindsym $mod+1 workspace 1:Web
bindsym $mod+2 workspace 2:Mail
bindsym $mod+3 workspace 3:Irc
bindsym $mod+4 workspace 4:Shell
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace 1:Web
bindsym $mod+Shift+2 move container to workspace 2:Mail
bindsym $mod+Shift+3 move container to workspace 3:Irc
bindsym $mod+Shift+4 move container to workspace 4:Shell

让程序启动时,只出现在指定工作区

为了效率,您可以规定某些程序在启动时,自动出现在指定的工作区里。有两种途径:您可以用 assign 命令,那当手动启动某程序时,它直接被导向您指定的工作区。例如:

# 把 URxvt 导向 workspace 2
assign [class="URxvt"] 2

或者,如果您有修改了工作区名称,那您就要用新工作区名,而不是原来的数字:

# 把 URxvt 导向 workspace 4:Shell
assign [class="URxvt"] 4:Shell
注意: 为了确定一个窗口的 class, title, instance 等等,您可以用该工具 xprop, 通过安装 xorg-xprop 可得。

再次,您还可以通过 i3-msg 在工作区之间跳转,间隔地自动执行常用程序:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox' 
exec --no-startup-id i3-msg 'workspace 2:Mail; exec urxvt -name Mail -e /usr/bin/mutt'
exec --no-startup-id i3-msg 'workspace 3:Irc; exec /usr/bin/urxvt -name irssi -e /usr/bin/irssi'
exec --no-startup-id i3-msg 'workspace 4:Shell; exec /usr/bin/urxvt'

标签式或层叠式的网络浏览器

有些网络浏览器并没有实现 Tab, 因为原则上对 Tabs 的管理是由窗口管理器负责,而不是浏览器。

为了让 i3 管理您的无 Tab 网络浏览器,以 uzbl 为例,在 ~/.i3/config 添加以下:

for_window [class="Uzbl-core"] focus child, layout stacking, focus

这是层叠式浏览,即所有窗口为垂直地显示。好处是任何 Tab 的标题都可见,哪怕开了很多浏览器窗口。

如果您更偏好标签式浏览,即窗口在水平方向上显示,用:

for_window [class="Uzbl-core"] focus child, layout tabbed, focus

虚拟终端

默认来说,当您按 $mod+Return, 便会启动 i3-sensible-terminal, 即执行虚拟终端的脚本。它会试图按以下顺序一一执行,直到成功启动某虚拟终端:

您可以直接通过以下句的修改,以指定特定虚拟终端

bindsym $mod+Return exec i3-sensible-terminal

便笺本

能有个便笺本以快速呼出并粘贴是多么派得上用场啊!i3 让您能够把窗口送往「便笺本工作区」。它基本上一直被隐藏起来,直到您通过 scratchpad show 命令呼出它。要把当前窗口送往便笺本工作区,用 $mod+Shift+minus,或是通过$mod+minus 呼出它。往 ~/.i3/config 添加以下几句:

# 把当前窗口设为便笺本
bindsym $mod+Shift+minus move scratchpad

# 呼出第一个便笺本
bindsym $mod+minus scratchpad show

您可以选个喜爱的编辑器进启动程序列表,并自动送往便笺本巩固走去,好随时快速呼出。以下例子示范了如果在 ~/.i3/config 添加以下,您则可以启动 urxvt 虚拟终端,附带着 nano 编辑器,以及自动送往便笺本:

# 自动启动被特定了名称的虚拟终端,
exec --no-startup-id urxvt -name scratchpad -e /usr/bin/nano
# 当激活时,送往便笺本
for_window [class="URxvt" instance="scratchpad"] move scratchpad

主题与配色方案

配置文件允许定制窗口颜色,但严重依赖具体的语法,使得用户不方便创造或分享主题。不过好在已有旨在简化这方面的现成项目,提供了众多用户分享的主题,可应用于您的配置上。T

关机,重启和锁屏

虽说并没有现成的关机,重启或锁屏按钮,但我们可以添加热键以实现。首先我们需要创建脚本,并储存为 i3exit。别忘了用 chmod +x 命令把它设为可执行文件并放进 $PATH。该脚本假设您安装了 polkit 包,后者允许普通用户执行 power management 命令。

#!/bin/sh
lock() {
    i3lock
}

case "$1" in
    lock)
        lock
        ;;
    logout)
        i3-msg exit
        ;;
    suspend)
        lock && systemctl suspend
        ;;
    hibernate)
        lock && systemctl hibernate
        ;;
    reboot)
        systemctl reboot
        ;;
    shutdown)
        systemctl poweroff
        ;;
    *)
        echo "Usage: $0 {lock|logout|suspend|hibernate|reboot|shutdown}"
        exit 2
esac

exit 0

~/.i3/config 中添加以下:

set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
mode "$mode_system" {
    bindsym l exec --no-startup-id i3exit lock, mode "default"
    bindsym e exec --no-startup-id i3exit logout, mode "default"
    bindsym s exec --no-startup-id i3exit suspend, mode "default"
    bindsym h exec --no-startup-id i3exit hibernate, mode "default"
    bindsym r exec --no-startup-id i3exit reboot, mode "default"
    bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"  

    # back to normal: Enter or Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+Pause mode "$mode_system"

Merge-arrows-2.pngThis article or section is a candidate for merging with List of applications/Security#Screen lockers.Merge-arrows-2.png

Notes: The following does not belong here, it's not like that i3lock can be used only with i3 (Discuss in Talk:I3 (简体中文)#)

有些对 i3lock 的替代方案,特别地有「模糊效果」:

屏幕保护器及电源管理

您可以用 DPMS 实现黑屏,或是睡眠/关掉您的显示器。在 ~/.i3/config 添加以下,效果是显示器闲置十分钟后就会自动睡眠。

exec --no-startup-id xset dpms 600

xss-lockAUR 可以对您的 i3 session 加以定义锁屏器。xss-lock 会追踪系统事件并作出应有的反应: suspend, hibernate, lock-session, and unlock-session 比如锁屏并等待,直到用户解除锁屏或是杀死锁屏器的进程。它也能对 X screensaver[broken link: invalid section] 作出响应,即根据来自X服务器的信号,运行或是杀死锁屏器。以下能把 xss-lock 加进开机自启动程序:

xss-lock -- i3lock -i background_image &

疑难排除

鼠标指针总处于忙碌状态

当启动了某些并不支持启动提醒的某脚本或程序时,鼠标指针会逗留在忙碌状态六十秒以上。

为排除此现象,凡是 exec 命令都均加 --no-startup-id 后缀,比如:

exec --no-startup-id ~/script
bindsym $mod+d exec --no-startup-id dmenu_run

参见

Arch Linux Forums