i3 (简体中文)

From ArchWiki
翻译状态:本文是 i3翻译。上次翻译日期:2021-07-14。如果英文版本有所更改,则您可以帮助同步翻译。

i3 是一种动态的平铺式窗口管理器,其灵感来自于面向开发者与资深用户的 wmii。

i3 的既定目标包括清晰可读的文档,完善的多显示器支持,基于树形结构的窗口管理,提供 vim 式的多种操作模式。

安装

通过安装i3-wm软件包来安装i3.

也可以安装i3软件包组。它包括了窗口管理器, 一个锁屏器和两个生成状态栏并通过stdout与i3bar交互的程序。

注意: i3-wmi3-gaps (一个i3的分支,带有窗口间隙和其它特性)冲突,并且默认状态下将安装i3-gaps

启动

从tty启动

使用 xinit (简体中文)来启动i3

从显示管理器启动

i3-wm 软件包包括了 i3.desktop,可以支持将 i3 作为 Xsession 启动。i3-with-shmlog.desktop 这个入口则附加了日志功能(对于调试很有用)。i3-gnomeAUR软件包则把 i3-wm 集成到了 GNOME 中去。

使用

通过官方文档 获取全面的信息,基本使用方法见i3 User's Guide

键盘映射

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

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

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

如果在多个窗口管理器之间切换,可以考虑使用sxhkd或者其它environment agnostic程序来管理键盘映射。更多信息可在Keyboard shortcuts#Xorg中找到。

容器和布局

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

参见 i3 TreeContainers and the tree data structure 以了解更多信息。

程序启动器

i3 使用 dmenu 作为首席程序启动器,键绑定默认为 $Mod+d。在使用它之前必须先安装可选依赖 dmenu

i3-wm 包含了 i3-dmenu-desktop ——— 一个 "dmenu" 的Perl 包装器,它通过Desktop entries (简体中文)创建一个已安装应用的列表。 也可以使用j4-dmenu-desktop-gitAUR 作为替代。

rofi 是一个流行的dmenu替代品,它能列出更多的选项。

在KDE Plasma/i3中使用KRunner作为应用启动器

在KDE Plasma中使用i3也是可行的,参见 KDE (简体中文)#使用其他窗口管理器

当通过 KDEWM=/usr/bin/i3运行Plasma时, 你可以添加以下内容到i3的config配置中将$mod+d绑定到KRunner上来替代dmenu作为程序启动器:

~/.config/i3/config
set $menu --no-startup-id qdbus org.kde.krunner /App display
bindsym $mod+d exec $menu

配置

配置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 的键盘绑定保持相同的用户。

自启动程序

添加一行 exec 命令到 ~/.config/i3/config 文件中。

例如:

exec terminator

你也可以使用 XDG Autostart来设置自启动程序。

颜色主题

配置文件允许用户自定义窗口装饰颜色, 但配置文件的语法使创建或共享主题不切实际。有几个方案使这更容易, 包括各种用户贡献的主题。

  • j4-make-config — 合并配置与主题或个人配置部件, 例如本机特定的配置, 这允许快速更改主题和灵活、动态地自定义配置
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
    }
}

更多细节,见设置i3bar

i3bar可选方案

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

例如, 要使用 Xfce 面板 (xfce4-panel), 把下面这行内容放到 ~/.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

独立于桌面环境的替代品有:

  • polybar — 一个快速并且易用的创建状态栏的工具
https://github.com/jaagr/polybar || polybar
  • excalibar — 用C写成的轻量可定制的状态栏
https://github.com/cylgom/excalibar || excalibar-gitAUR

i3status

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

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

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

i3status可选方案

  • conky — 高度可扩展系统监视器。配合 i3 的使用方法见 这个教程
https://github.com/brndnmtthws/conky || conky
  • i3blocks — 通过 shell 脚本扩展。 它可以处理点击事件,中断,和定义或更在块的基础上更新间隔。
https://github.com/vivien/i3blocks || i3blocks, i3blocks-gitAUR
  • i3pystatus — 默认带有许多插件和选项的可扩展 Python 3 状态栏
https://github.com/enkore/i3pystatus i3pystatus || i3pystatus-gitAUR
  • i3situation — 另一个 Python 3 状态栏生成器。
https://github.com/HarveyHunt/i3situation || i3situation-gitAUR[损坏的链接:package not found]
  • j4status — 提供了状态栏,可以通过插件扩展,且是用 C 写成的。额外的插件来自j4status-plugins-gitAUR.
https://sardemff7.github.io/j4status/ || j4status-gitAUR
  • goi3bar — Go语言 写的 i3status 替代品。配置文件同时还有各种插件,并发选项和丰富的插件支持。
https://github.com/denbeigh2000/goi3bar/ || goi3bar-gitAUR
  • goblocks — Go语言 写的轻便快速的 i3status 替代品。
https://github.com/davidscholberg/goblocks || goblocksAUR
  • bumblebee-status — 多主题的Python状态栏生成器。
https://github.com/tobi-wan-kenobi/bumblebee-status/ || bumblebee-statusAUR bumblebee-status-gitAUR
  • ty3status — Typescript编写的 i3status 替代品,
https://github.com/mrkmg/ty3status || ty3status-gitAUR
  • i3status-rust — 使用Rust编写的高效并且特性丰富的i3status替代品。能够处理push更新, 单独设置更新间隔, 支持主题和点击事件
https://github.com/greshake/i3status-rust || i3status-rust i3status-rust-gitAUR

i3status 包装器

  • i3cat — 基于go语言做的包装器,它可以链接来自多个资源的输入,也可以处理鼠标操作来转发用户特定的信号到子程序。
https://vincent-petithory.github.io/i3cat/ || i3cat-gitAUR
  • py3status — 一个可扩展的基于Python的 i3status 包装器。
https://github.com/ultrabug/py3status || py3status
  • YaGoStatus — Go编写的另一个i3status替代品。.
https://github.com/burik666/yagostatus || yagostatus-gitAUR

状态栏中的图标字体

安装 i3-wm-iconpatchAUR来让状态栏支持图标。你也可以使用下面的图标字体。

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

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

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

依照 pango语法, 在逗号分割的多个字体的后面,字体大小只被设置一次,对每个字体都设置大小将会造成除了最后一个字体以外,其他的字体都被忽略。

~/.config/i3status/config 中使用unicode数字添加图标。输入法将会在文本处理器间有所区分。 例如,插入心型图标(unicode 数字 f004):

  • 在多个图形化的文本处理器(如 gedit, Leafpad) 和终端模拟器 (如 GNOME Terminal, xfce4-terminal)中: Ctrl+Shift+u, f004, Enter
  • Emacs: C-x, 8, RET, f004, RET
  • Vim (在插入模式): Ctrl+v, uf004
  • urxvt: 按住 Ctrl+Shift, 键入f004

终端模拟器

默认配置下按 $mod+Return 会运行 i3-sensible-terminal这个查找终端模拟器程序的脚本.参见i3-sensible-terminal(1)了解它查找终端模拟器的顺序。

要想立即启动自定义的终端模拟器, 编辑~/.config/i3/config中的这一行:

bindsym $mod+Return exec i3-sensible-terminal

也可以通过设置 $TERMINAL environment variable达到同样效果.

禁用标题栏点击动作

添加 bindsym button1 nop 来禁止i3选中你点击的标题栏对应的窗口。当你的默认布局是标签式并且经常不小心误点到窗口标签时比较有用。

技巧与提示

跳转到打开的窗口

  • quickswitch-i3 — 一个可在 i3 的窗口之间快速跳转,定位的 Python 实现
https://github.com/OliverUv/quickswitch-for-i3/ || quickswitch-i3AUR
  • i3-wm-scripts — 用正则表达式在窗口之间进行搜索并跳转
https://github.com/yiuin/i3-wm-scripts ||
  • winmenupy — 启动 dmenu 时就会依次列出工作空间上的一系列客户端,选定其中一个并跳转即可
https://github.com/ziberna/i3-py/blob/master/examples/winmenu.py ||
  • rofi — Search and jump to open and scratchpad window
https://github.com/davatorium/rofi || rofi
  • i3-easyfocus — Focus and select windows in i3
https://github.com/cornerman/i3-easyfocus || i3-easyfocus-gitAUR
  • wmfocus — Focus and select windows in i3 and other window managers
https://github.com/svenstaro/wmfocus || wmfocus
  • i3-cycle-focus — Provides an Alt-Tab functionality for i3
https://github.com/acrisci/i3ipc-python/blob/master/examples/i3-cycle-focus.py ||
  • i3-winmotion — Focus and select visible windows in i3
https://github.com/iiKoe/i3-winmotion ||

跳转到急需处理的窗口

添加这行到 ~/.config/i3/config: [2]

bindsym $mod+x [urgent=latest] focus

保存和恢复窗口布局

从4.8版本起, i3能够保存和恢复工作区布局。 要实现这个需要Official repositories (简体中文)中的这些包: perl-anyevent-i3perl-json-xs

注意: 这一节内容只提供如何保存和恢复一个单独工作区当前窗口布局的快速指导,参见 官方文档 以获取更多信息

保存一个工作区的当前窗口布局

要保存当前的窗口布局,按这几步做:

  1. 首先, 在一个你喜欢的工作区内执行命令打开一些窗口,并根据需要调整它们的大小。 记下打开每个窗口所执行的命令
  2. 现在, 切换到一个新的工作区, 打开终端然后执行:
    i3-save-tree --workspace N > ~/.config/i3/workspace_N.json
    N是上一步的工作区号码。 这将会保存N号工作区的布局到这个文件中~/.config/i3/workspace_N.json.
  3. 这个新创建的文件需要被编辑, 但是你可以用这个命令来完成:
    tail -n +2 ~/.config/i3/workspace_N.json | fgrep -v '// split' | sed 's|//||g' > ~/.config/i3/workspace_N.json

恢复工作区的窗口布局

有两种方法恢复工作区的布局: 写一个脚本, 或者编辑 ~/.config/i3/config 来自动载入布局. 这里只讨论第一种方法, 参考 官方文档 了解第二种方法怎么用。

要恢复在上一小节中保存的工作区布局, 写一个叫 load_layout.sh的文件,它包含以下内容:

  • The starting lines:
~/load_layout.sh
#!/bin/bash
i3-msg "workspace M; append_layout ~/.config/i3/workspace_N.json"

M是你想要载入布局的工作区编号,N是之前保存布局的那个工作区的编号

  • 还有在之前你所使用的打开那些窗口的命令, 但它们必须被封闭在()内,并且在命令末尾加上&符号来让它后台运行

例如,如果保存的布局包括3个 uxterm 窗口:

~/load_layout.sh
#!/bin/bash

# First we append the saved layout of workspace N to workspace M
i3-msg "workspace M; append_layout ~/.config/i3/workspace_N.json"

# And finally we fill the containers with the programs they had
(uxterm &)
(uxterm &)
(uxterm &)

然后把文件设为可执行的:

chmod u+x ~/load_layout.sh

最后,运行下面的命令将N号工作区的布局载入到M号工作区:

~/load_layout.sh
提示: 添加 bindsym $mod+g exec ~/load_layout.sh~/.config/i3/config 并重启i3将绑定Mod+g 到上面的脚本
注意: 如果上面的脚本没有正常工作, 参考 官方文档~/.config/i3/workspace_N.jsonswallows 部分需要被手动编辑

Scratchpad容器

默认地, scratchpads 只包括一个窗口. 但是,容器也能变成一个scratchpad

创建一个新的容器(例如, Mod+Enter), 分割它 (Mod+v) 然后创建另外一个容器。 聚焦到父窗口 (Mod+a), 于另一方向上分割(Mod+h), 然后重新创建。

聚焦到第一个容器 (并且聚焦到父窗口), 把窗口变为浮动式 (Mod+Shift+Space),然后移动它到scratchpad (Mod+Shift+-).现在你可以根据喜好拆分容器了

注意: 容器不能在浮动窗口模式下重新设定大小,应该在设置为浮动式之前设定好大小
提示: 当只使用终端应用时, 考虑使用 tmux 之类的复用器。

屏保和电源管理

通过 Power management#xss-lock 你可以为你的i3会话注册一个屏保。使用 xautolock-time 选项在给定时间后锁定屏幕:

xautolock -time 10 -locker "i3lock -i 'background_image.png'" &

一个 systemd 服务文件能在系统将要进入睡眠或休眠状态时用来锁屏。参见 Power management#Suspend/resume service files,注意i3lock要求服务类型为 forking.

另请参见 DPMS.

另一个方案是使用 xidlehookAUR 并配合 betterlockscreenAUR 或其它锁屏器. xidlehook 是一个用Rust写的 xautolock 替代品 , 带有一些额外的功能。 它包括了在播放音频或者全屏时禁用锁屏的选项。 --timer 参数的单位是秒:

xidlehook --not-when-audio --not-when-fullscreen --timer 360 "betterlockscreen -l dim" "" &

关机,重启和锁屏

关机,重启和锁屏的键位绑定可以添加到 ~/.config/i3/config。接下来的例子假定你已经安装了 polkit 来允许非特权用户执行电源管理 命令。

set $Locker i3lock && sleep 1

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 $Locker, mode "default"
    bindsym e exec --no-startup-id i3-msg exit, mode "default"
    bindsym s exec --no-startup-id $Locker && systemctl suspend, mode "default"
    bindsym h exec --no-startup-id $Locker && systemctl hibernate, mode "default"
    bindsym r exec --no-startup-id systemctl reboot, mode "default"
    bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"  

    # back to normal: Enter or Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}

bindsym $mod+Pause mode "$mode_system"

一旦配置好, 在任何时候按下 $mod+pause将会看到一个提示。要实现更复杂的行为表现,使用一个独立的脚本, 并在mode中引用它。 [3]

注意:
  • sleep 1 添加一个小的延迟来组织可能的休眠竞争状况 [4]
  • systemctl poweroff-i参数会导致其它用户已登陆的情况下关机(这需要 polkit)或者当 logind (错误地)这样认为. [5]

对于其它可用于替代的锁屏器,参见 List of applications/Security#Screen lockers.

“吞噬”终端窗口

dwm相似, i3 能够用新启动的GUI窗口"吞噬"当前的终端窗口。这可以通过使用 i3-swallowAUR[损坏的链接:package not found]i3-swallow-gitAUR 软件包来实现。

例如, 要让 mpv的窗口吞噬原始的终端:

$ i3-swallow mpv video.mp4

多显示器手动管理

感谢 xrandr的存在,有很多方法轻松管理系统显示。 下面的例子在i3配置文件中集成了它, 和之前电源管理章节里的做法差不多。

下面的例子是一个有VGA和HDMI输出的笔记本使用一个菜单来切换显示输出的开关:

## Manual management of external displays
# Set the shortcuts and what they do
set $mode_display Ext Screen (v) VGA ON, (h) HDMI ON, (x) VGA OFF, (y) HDMI OFF
mode "$mode_display" {
    bindsym v exec --no-startup-id xrandr --output VGA1 --auto --right-of LVDS1, mode "default"
    bindsym h exec --no-startup-id xrandr --output HDMI1 --auto --right-of LVDS1, mode "default"
    bindsym x exec --no-startup-id xrandr --output VGA1 --auto --off, mode "default"
    bindsym y exec --no-startup-id xrandr --output HDMI1 --auto --off, mode "default"

    # back to normal: Enter or Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
# Declare here the shortcut to bring the display selection menu
bindsym $mod+x mode "$mode_display"

在一个关闭了的显示器上打开的任何窗口将会自动回到活跃的显示器上。

得到显示器设备名最简单的方法是连接上它们,然后执行:

$ xrandr --query

这将输出可用的、已识别的设备及其系统内名称,可以帮助你正确地设置配置文件。

参考 xrandr 页面或者man page来获取完整可使用的参数列表, 访问i3 userguide 和/或 i3 FAQ on reddit了解更多信息.

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

有些网络浏览器并没有实现 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

工作区名称变量

由于工作区在i3配置文件中定义了多次, 自定义工作区名称变量也许有帮助,例如:

set $WS1 term
set $WS2 web
set $WS3 misc
set $WS4 media
set $WS5 code

然后使用对应的名称变量替代工作区名称:

bindsym $mod+1          workspace $WS1
...
bindsym $mod+Shift+1    move container to workspace $WS1

参见Changing named workspaces获取更多信息。

正确处理浮动对话框

即使是默认情况下就该在浮动模式中打开的对话框 [6],也可能仍在平铺模式中打开。要改变这个行为,用xorg-xprop检查对话框的 WM_WINDOW_ROLE,然后添加正确的规则到 ~/.i3/config (使用 pcre 语法):

for_window [window_role="pop-up"] floating enable
for_window [window_role="task_dialog"] floating enable

还可以使用标题规则和正则表达式:

for_window [title="Preferences$"] floating enable

或者 WM_CLASS:

for_window [class="(?i)mplayer"] floating enable

状态栏网速显示

你可以试试上游的 脚本, 要使用它:

  • 根据你的系统重命名两个网卡 (use ip addr)
  • /sys/devices找到它们,然后合适地替换掉:
$ find /sys/devices -name network_interface
提示: 使用 /sys/class/net/interface/statistics/来不依靠pci位置查找

现在,保存脚本到一个合适的位置 (例如 ~/.config/i3) ,然后让你的状态栏程序配合它工作

自动切换水平/垂直窗口分割方向

这个 autotilingAUR软件包能够用来自动切换水平/垂直窗口分割方向以达到和bspwm螺旋平铺相似的效果,安装完成之后,把下面内容添加到~/.config/i3/config 然后重启i3.

exec_always --no-startup-id autotiling


疑难排除

通用

很多时候,你遇到的 bug 在开发版中被修复了。可以从 AUR 上的 i3-gitAURi3status-gitAUR 编译安装最新的开发版。上游(即 i3 项目开发者)希望你能用开发版再试试看能否重现问题 [7] 延伸阅读:Debug - Getting Traces#General.

i3 信息栏上的某些按钮不能用

举例:i3-nagbar 上的“Edit Config”按钮是要调用 i3-sensible-terminal 命令的。这就需要你的 终端模拟器能够被i3识别。

平铺的终端窗口中出现折行错乱

从 v4.3 版本起,i3 会无视平铺窗口的扩大提示(size increment hints)[8]。这就带来了折行错乱等问题。平铺之前尝试先把窗口改成浮动状态,可以绕过这个问题。

鼠标指针总处于忙碌状态

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

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

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

为了在全局禁用这个鼠标动画,查看:Cursor themes#Create links to missing cursors

绑定快捷键不起作用

scrot 这类工具,用普通的按键绑定方式(按下按键后,未松开按键前就立即执行)可能不会正常工作。可以试试绑定时加上 --release 参数,使命令在松开按键之后执行 [9]

bindsym --release Print exec --no-startup-id scrot
bindsym --release Shift+Print exec --no-startup-id scrot -s

画面撕裂现象

因为 i3双倍缓冲实现得不到位,会出现画面撕裂或闪烁。安装并配置好 picom 可以解决这一问题。[10]

看不到系统托盘图标

为了让 tray_output primary 这一行配置生效,有时需要用 xrandr 来指定一个主显示输出。你可以试试按照 tray_output 显式地指定一个具体的输出,或者干脆删掉这行配置[11]。 关于显示输出的细节可以参看 Xrandr 页面. 自从 i3 4.12 版本起,由 i3-config-wizard 生成的默认配置已经不再包含这行配置了。

Spotify的默认工作区

要为spotify窗口分配默认工作区,不能使用标准的assign 方法 ,而应该使用 for_window 命令, 例如

~/.config/i3/config
...
for_window [class="Spotify"] move container to workspace $ws10

为了确保 for_window 不移动已经在 $ws10的窗口, 可以使用 move --no-auto-back-and-forth.

参见

Arch Linux Forums

截屏与视频