i3 - Arch Linux 中文维基

跳至內容

# i3

出自 Arch Linux 中文维基

翻譯狀態：

- 本文（或部分內容）譯自 i3，最近一次同步於 2021-07-14，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- 窗口管理器
- 平鋪式窗口管理器比較

i3 是一種動態的平鋪式窗口管理器，其靈感來自於面向開發者與資深用戶的 wmii。

i3 的既定目標包括清晰可讀的文檔，完善的多顯示器支持，基於樹形結構的窗口管理，提供 vim 式的多種操作模式。

## 安裝

通過安裝i3-wm包軟體包來安裝i3.

也可以安裝i3包組軟體包組。它包括了窗口管理器, 一個鎖屏器和兩個生成狀態欄並通過stdout與i3bar交互的程序。

注意：i3-gaps(是i3的一個分支，具有間隙和其他功能）最近被合併到i3-wm包中，因此不再可用。請改為安裝i3-wm包

## 啟動

### 從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 Tree 和 Containers 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 鍵盤上的四個導航鍵 `j`， `k`， `l` 和 `;` on a Qwerty keyboard會被映射在擁有相同位置的按鍵上，舉例說，Dvorak 鍵盤上的 `h`， `t`， `n`， `s`。這個小戲法的副作用是 最多十五個按鍵會被以一種破話位置記憶的方式被映射 - 所以，對於 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來設置自啟動程序。

### 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包

- i3pystatus — 默認帶有許多插件和選項的可擴展 Python 3 狀態欄

  https://github.com/enkore/i3pystatus || i3pystatus-gitAUR

- 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

- ty3status — Typescript編寫的 i3status 替代品，

  https://github.com/mrkmg/ty3status || ty3status-gitAUR

- i3status-rust — 使用Rust編寫的高效並且特性豐富的i3status替代品。能夠處理push更新, 單獨設置更新間隔, 支持主題和點擊事件

  https://github.com/greshake/i3status-rust || i3status-rust包

#### 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://fontawesome.com/ || 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+Enter` 會運行 `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 || 未被打包？在 AUR 裡搜索

- 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 || 未被打包？在 AUR 裡搜索

- i3-winmotion — Focus and select visible windows in i3

  https://github.com/iiKoe/i3-winmotion || 未被打包？在 AUR 裡搜索

### 跳轉到急需處理的窗口

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

    bindsym $mod+x [urgent=latest] focus

### 保存和恢復窗口布局

從4.8版本起, i3能夠保存和恢復工作區布局。 要實現這個需要Official repositories中的這些包： perl-anyevent-i3包 和 perl-json-xs包

注意： 這一節內容只提供如何保存和恢復一個單獨工作區當前窗口布局的快速指導，參見 官方文檔 以獲取更多信息

#### 保存一個工作區的當前窗口布局

要保存當前的窗口布局，按這幾步做：

1. 首先, 在一個你喜歡的工作區內執行命令打開一些窗口，並根據需要調整它們的大小。 記下打開每個窗口所執行的命令
2. 現在, 切換到一個新的工作區, 打開終端然後執行:

       $ i3-save-tree --workspace N > ~/.config/i3/workspace_N.json

   N是上一步的工作區號碼。 這將會保存N號工作區的布局到這個文件中`~/.config/i3/workspace_N.json`.
3. 這個新創建的文件需要被編輯, 但是你可以用這個命令來完成:

       $ sed -i 's|^\(\s*\)// "|\1"|g; /^\s*\/\//d' ~/.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.json` 的swallows 部分需要被手動編輯

### 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-gitAUR 與 i3status-gitAUR 編譯安裝最新的開發版。上游（即 i3 項目開發者）希望你能用開發版再試試看能否重現問題 [7] 延伸閱讀：調試/獲取跟蹤數據#Compilation options.

### 不讓焦點一直跟隨滑鼠

在`~/.config/i3/config`中添加：

    focus_follows_mouse no

### 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`.

## 參見

- 官方網站
- Funtoo:I3 Tiling Window Manager
- i3原始碼
- i3-extras - 腳本和補丁合集
- i3ipc-glib - 一個i3拓展插件庫
- i3ipc-ruby - An improved library for i3 extensions in Ruby
- j4tools - 為i3設計的非官方工具

Arch Linux Forums

- The i3 thread - i3的通用討論
- i3桌面截圖和配置分享

截屏與視頻

- i3窗口管理器v4.1截屏與視頻
- i3窗口管理器v4.1X截屏與視頻

分類：​

- 平鋪式窗口管理器
- 動態窗口管理器
- Pages with missing package links
- 包含損壞的軟體包連結的頁面

i3
新增話題