i3wm的使用說明

1. 默認鍵位

給那些“太長不看”的人,以下圖片是默認熱鍵。

與$mod(Alt)一起按:

Alt

與Shift+$mod一起按:

Alt+Shift

紅色按鍵是你需要按的修飾鍵(默認配置),藍色按鍵是盲打鍵位。

要注意的是,若是沒有配置文件就啟動i3,i3-config-wizard 會幫助你創建一個配置文件,鍵位位置會跟上圖所示一樣,不管你是什么鍵盤布局。
如果你喜歡上圖的設置,可以拒絕 i3-config-wizard的引導,默認以 etc/i3/config 作為配置文件

2. 使用i3

貫穿整個使用文檔,關鍵字$mod將當作已配置好的修飾鍵,修飾鍵默認為Alt鍵(Mod1),windows(Mod4)鍵也是一個受歡迎的替換方案

2.1 打開虛擬終端和移動位置

打開一個新的虛擬終端是非常簡單的操作,默認情況下,這個操作的組合鍵是 $mod+Enter ,默認配置下是Alt+Enter。按下$mod+Enter,將會打開一個新的虛擬終端,它將占滿你屏幕的所有空間。

termialFillTheScreen

如果你現在打開另一個虛擬終端,i3會把屏幕空間一分為二,各占一半。新創建的窗口會被i3放在已有窗口的旁邊(寬屏)或者下面(豎屏)

newATerminal

要在兩個終端之間移動焦點,你可以使用vi編輯器風格的方向鍵。然而,在i3里,盲打鍵位就是方向鍵(vi編輯器里的方向鍵為了兼容大多數鍵盤布局,都向左移動了一個鍵位)。因此,$mod+j是向左,$mod+k是向上,$mod+l是向下,$mod+;是向右。像上圖的情況,用$mod+k$mod+l在兩個終端之間切換。當然,你也可以使用箭頭方向鍵。

現在,你的workspace是按特定方向(默認水平方向)劃分(容器里包含兩個終端)。你可把每個window都再分離一次(水平或者垂直),就像workspace一樣?!皐indow”指一個容器包含一個X11窗口(如一個瀏覽器或者一個終端),“split container”指的是容器包含一個或多個窗口。

TODO:picture of the tree

垂直分割窗口,在創建新窗口前按$mod+v,水平分割窗口,按$mod+h。

2.2 改變容器布局

一個split container 可以設置成下面所列出的布局之一。

splith/splitv

容器里的每個窗口都獲得等量大小的空間。splith 控制每個窗口在彼此的左右方。splitv 控制每個窗口在彼此的上下方。

stacking

容器里只顯示一個正在活動的窗口。在容器上方得到一個窗口的列表。

tabbed

與stacking是一個原理,不過tabbed的窗口列表是單行顯示的標簽頁。

切換模式:$mod+e打開splith/splitv,$mod+s打開stacking,$mod+w打開tabbed

layoutmode

2.3 把一個窗口切換到全屏模式

把一個窗口全屏顯示或者退出全屏,按 $mod+f。

在i3里還有全局全屏模式,那么這個窗口將占據所有的顯示輸出(多屏顯示)(配置命令: fullscrren toggle global

2.4 打開其他應用程序

除了通過終端打開應用程序,你也可以使用dmenu來打開程序,默認情況下通過$mod+d調出。只需要輸入你要打開的應用的名字(或者是名字的一部分),應用必須在$PATH中才能正常打開。

另外,如果你有一個需要經常打開的應用,你可以創建一個組合鍵來直接打開它,細節請看 配置 部分.

2.5 關閉窗口

如果一個程序未提供一個關閉的機制(很多程序都提供了一個關閉方案,Esc鍵或者一個快捷鍵,比如Ctrl+w),你可以按$mod+Shift+q 來殺掉這個窗口。對于支持 WM_DELETE 協議的應用程序,它將正確地關閉(保存任何修改或進行其他清理)。如果程序不支持 WM_DELETE 協議。X server 將殺掉這個程序并且之后的動作取決與此程序。

2.6 使用workspaces

使用工作空間是分組歸類一堆窗口的好方法。默認情況下,你處在第一個workspace,就像i3bar左下角所指示的一樣。要切換到其他workspace,按下$mod+數字鍵(你要切換到的workspace的數字)。如果工作空間不存在,它將被創建。

一個常見的例子是把網頁瀏覽器放在第一workspace,聊天工具放在另一個workspace,還有另一個你運行的其他軟件放在第三個workspace。當然,你可以不必照著做。

如果你擁有多個顯示屏,在啟動時將會在每個屏幕創建一個workspace。如果你打開一個新的workspace,他會綁定到你正在工作的顯示屏。當你切換一個在其他 顯示屏的workspace時,i3會把焦點設置到那個顯示屏。

2.7 移動一個window到另一個workspace

移動一個窗口到另一個工作空間,按$mod+Shift+目標工作區數字。跟切換workspaces時一樣的情況,如果目標工作空間不存在,它將被創建。

2.8 調整窗口大小

調整容器大小最簡單的辦法是用鼠標:拖拽邊框到想要的大小。

你也可以定義快捷鍵來調整,可以看看這個例子,default config--由i3提供

2.9 重啟i3

為了重啟i3你可以使用$mod+Shift+r(例如當有一個bug時,恢復到正常狀態,或者升級到一個新版本i3)。

2.10 退出i3

不關掉Xserver且利落地退出i3,你可以按$mod+shift+e。通常,會有一個對話向你確認是否退出。

2.11 浮動模式

浮動模式是相對于平鋪模式的。窗口的位置和大小不是由i3自動管理的,而是由你手工調整。使用這個模式有違于平鋪模式,但是他對一些案例如"Save as"對話窗口,或者toolbar窗口(GIMP或類似的)是有用的。這些窗口通常會設置恰當的提示和默認情況下被打開于浮動模式。

你可以通過按$mod+Shift+space來切換一個窗口的浮動模式。通過鼠標拖動標題欄,你可以移動這個窗口,通過拖動邊框,你可以調整窗口大小。你也可以通過使用floating_modifier來操作。另一個調整浮動窗口大小的方法是鼠標右擊標題欄并且拖拽。

關于用鍵盤來調整浮動窗口的大小,請看調整大小的綁定模式,由i3提供
default config

浮動窗口一直處于平鋪窗口的上方

3 樹

i3保存著所有關于 X11 output 的數據,workspace和窗口布局在里面是樹形圖的結構。根節點是X11根窗口,隨后是X11 putputs,然后是 dock areas 和一個 content container,隨后是workspace,最后是window本身。在舊版本的i3,每個workspace有多個list和table,這個方法的結果是難以使用(真的難),理解和實現。

3.1 樹是由容器組成的

我們把樹的組件叫做Containers。一個容器可以掌控一個窗口(意思是一個X11 window,你可以真正看到的,使用的,比如說一個瀏覽器)。另外,Containers可以再包含一個或者多個Containers。一個簡單的workspace例子是:當你在單個顯示器打開i3時,只有一個workspace,你這時打開了兩個終端,你最后得到的樹是:

Two terminals on standard workspace

tree

3.2 定位和Split Containers

當以樹作為數據結構時,為了構建一個布局,使用所謂的 Split Containers 是很正常的。在i3里,每個容器都有屬于自己的方位(水平,垂直,或者未指定),并且定位取決于上一級容器的布局(垂直的有splitev和stacking,水平的有splith和tabbed)。所以我們以一個workspace作為例子,workspace 容器的默認布局是splith(如今很多顯示器是寬屏的)。如果你把布局切換成splitv(默認情況下按$mod+v)然后打開兩個終端,i3會把你的窗口設置成這個樣子:

vertical

從version 4開始,i3多了一個有趣的新特性,它能夠分割任何東西:讓我們假設你現在在workspace里打開了兩個終端(以splith布局打開,也就是水平定位)焦點處于右邊的終端,現在你想要要在當前終端下面打開另外一個終端。如果你直接打開新終端,它會被放在最右邊而不是下面。解決辦法是按$mod+v用splitv布局來分割容器(要打開Horizontal Split Container,用$mod+h)?,F在你可以在當前終端下面打開一個新終端了:

Vertical Split Container

tree

你可能已經猜到了:它能夠無限分割到下一層。

3.3 聚焦于父容器

$mod+a

我們繼續以上圖為例。我們在左邊有一個終端,右邊有兩個垂直分布的終端,焦點處在右下角的終端。當你又打開一個新終端,他會被放在右下角終端的下面。

所以說,要怎么把新終端放到右邊而不是下面呢,答案是使用focus parent,它會把焦點轉移到當前容器的父容器。在這種情況下,你會把焦點放在水平方向的workspace里的vertical split Container。因此,新窗口會被打開在Vertical Split Container的右邊:

Focus parent, then open new terminal

3.4 隱式容器

在一些情況下,i3需要隱式地創建一個容器來完成你的命令。

一個例子如下:你在單個顯示器啟用i3,在單個workspace打開3個終端。workspace節點在i3的layout tree里,這些終端窗口直屬于workspace節點。默認workspace節點的方向設置是水平的。

現在你往下移動其中一個終端($mod+Shift+k by default)。那么workspace節點會被設置成垂直布局,你移動的這個終端就會出現在屏幕的下面并且直屬于workspace。一個新的容器被創建,用于容納另外兩個終端。當你切換到tabbed模式,你會注意到這個情況。你最終會得到一個有標簽頁容器,里面有兩個窗口(比如 "H[urxvt firefox]"),還有一個你剛才移動到下面的終端窗口。

4 配置i3

到這里,真正有趣的事情才剛剛開始;-)。很多東西都非常依賴于你樣要的工作環境,所以我們無法提供一個默認的且合理的配置。

雖然沒有使用編程語言來進行配置,i3在你希望讓窗口管理器怎么做的方面依然保持著靈活的特性。

例如,你可以配置一個綁定用來跳到指定的窗口,可以設置打開指定的應用程序到指定的workspace,可以自動啟動某個程序,可以改變i3的配色,還可以設置快捷鍵來做一些有用的事情。

要改變i3的配置,復制 /etc/i3/config~/.i3/config并且用一個文本編輯器來編輯它(或者是復制到~/.config/i3/config,如果你喜歡XDG目錄方案)

第一次啟動i3時,i3會引導你創建一個配置文件,你可以告訴向導程序在配置文件里設置Alt(Mod1)或windows(Mod4)鍵作為輔助按鍵。當然,創建的配置文件會使用你當前鍵盤布局的鍵盤符號。要啟動向導程序,請在終端輸入命令i3-config-wizard。
請確認你當前并沒有~/.i3/config/。否則向導程序將會退出。

4.1 備注

在配置文件里使用備注是可行的和推薦的,為了以后參考或修改,適當地記錄你的配置。備注以#開始,而且只能用在每行的開頭:

例子

# This is a comment

4.2 字體

i3支持以 X core字體和 FreeType 字體來渲染窗口標題

你可以使用xfontsel(1) 生成一個 X core字體類型。你需要使用一個支持ISO-10646編碼的字體來顯示特殊字符(Unicode)。

一個FreeType字體類型是由一個字體系列,風格,粗細,便提,伸延組成的,FreeType字體支持從右到左的渲染和往往比 X core字體支持更多的Unicode符號。

如果i3不能打開配置好的字體,i3會吧錯誤輸出到日志文件,退回到可以工作的字體

語法:

font <X core font description>
font pango:<family list> [<style options>] <size>

例子:

font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
font pango:DejaVu Sans Mono 10
font pango:DejaVu Sans Mono, Terminus Bold Semi-Condensed 11
font pango:Terminus 11px

4.3 鍵盤綁定

一個鍵盤綁定會讓i3在按下特定的按鍵后執行一個命令。i3允許以keycode或keysym綁定(你可已隨便更改綁定,雖然i3并不會幫你解決鍵位沖突)

  • Keysym(key symbol)是指鍵盤上的符號。像是"A"或者"B",但是像是那些奇怪的"underscore"而不是"_"。這些符號是你們用Xmodmap重新映射的按鍵。要獲得當前鍵盤的映射,使用命令 xmodmap -pke 。要以交互方式輸入一個按鍵,查看它是被設置成什么keysym,使用命令 xev

  • Keycode 不需要擁有一個已賦值符號(方便某些筆記本熱鍵),而且他們即使在你換了鍵盤布局后,也不會改變keycode本身(當使用xmodmap)。

我的建議是:如果你經常更換鍵盤布局,但是不想改變綁定鍵位的物理位置,使用keycodes。如果你不改變鍵盤布局,而且想要一個簡單干凈的配置文件,使用keysyms。

某些工具(例如import或者xdotool)可能無法運行在一些KeyPress事件,因為鍵盤/指針被占用了。針對這些情況,可以使用 --release 標記,這將在按鍵被松開后執行命令。

語法:

bindsym [--release] [<Group>+][<Modifiers>+]<keysym> command
bindcode [--release] [<Group>+][<Modifiers>+]<keycode> command

例子:

# Fullscreen
bindsym $mod+f fullscreen toggle

# Restart
bindsym $mod+Shift+r restart

# Notebook-specific hotkeys
bindcode 214 exec --no-startup-id /home/michael/toggle_beamer.sh

# Simulate ctrl+v upon pressing $mod+x
bindsym --release $mod+x exec --no-startup-id xdotool key --clearmodifiers ctrl+v

# Take a screenshot upon pressing $mod+x (select an area)
bindsym --release $mod+x exec --no-startup-id import /tmp/latest-screenshot.png

可以使用的修飾鍵:

Mod1-mod5,Shift,Control

默認修飾請看 xmodmap(1)

Group1, Group2, Group3, Group4
當使用多個鍵盤布局(例如setxkbmap -layout us,ru)時,您可以指定哪個XKB組(也稱為“布局”)鍵盤綁定應處于活動狀態。默認的,鍵盤綁定會被轉換成Group1并且活躍在所有鍵盤布局。如果你想為其中一個鍵盤布局重寫鍵盤綁定,指定到相應的group。為了向后兼容,“Mode_switch” 是Group2的別名。

4.4 鼠標綁定

在容器范圍內按下一個已經綁定的鼠標按鍵,i3將會執行一個命令。你可以用綁定鍵盤的方法設置鼠標綁定。

語法:

bindsym [--release] [--border] [--whole-window] [<Modifiers>+]button<n> command

默認的,綁定只會在點擊到標題欄的時候運行。如果添加了--release標記,它會在按鍵松開時運行。

如果添加了--whole-window標記,綁定會在你點擊到窗口任何一個部位時運行,但是邊框除外。為了讓一個綁定在點擊到邊框時運行,指定一個--border標記。

例子:

# The middle button over a titlebar kills the window
bindsym --release button2 kill

# The middle button and a modifer over any part of the window kills the window
bindsym --whole-window $mod+button2 kill

# The right button toggles floating
bindsym button3 floating toggle
bindsym $mod+button3 floating toggle

# The side buttons move the window around
bindsym button9 move left
bindsym button8 move right

綁定模式

你可以擁有多套鍵位綁定模式,當你切換到其他綁定模式的時候,所有當前鍵位綁定會被釋放,并且只有你新切換的綁定模式生效。唯一的預設的綁定模式是defalut的,他伴隨i3的啟動,并且沒有定義任何指定的綁定模式。

使用綁定模式有以下兩部分組成:定義一個綁定模式和切換到它。為了做到這個,需要一個配置指令和一個命令,他們被稱為mode。配置指令被用來定義一組綁定并且把它放到一個綁定模式,而命令是用來切換到一個綁定模式。

建議與[variables]組合使用綁定模式,以便維護更容易。以下是一個簡單案例

請注意定義一個退回默認模式的綁定鍵

注意,可以使用[pango_markup]來設置綁定模式, 但是你需要通過添加 --pango_markup標記給定義模式來明確地開啟它。

語法

# config directive
mode [--pango_markup] <name>

# command
mode <name>

例子

# Press $mod+o followed by either f, t, Esc or Return to launch firefox,
# thunderbird or return to the default mode, respectively.
set $mode_launcher Launch: [f]irefox [t]hunderbird
bindsym $mod+o mode "$mode_launcher"

mode "$mode_launcher" {
    bindsym f exec firefox
    bindsym t exec thunderbird

    bindsym Esc mode "default"
    bindsym Return mode "default"
}

4.6 浮動調節

移動浮動窗口。你可以選擇其中一個方式,1拖動標題欄,2配置可以通過按鍵和鼠標點擊窗口來移動窗口的浮動調節器。最常見的設置是用與管理窗口相同的按鍵(例如Mod1)。也就是說,你可以按住Mod1,同時鼠標左鍵點擊拖動動窗口到你想要的方位。

當你按住浮動調節器時(Mod1),你可以通過按住鼠標右鍵并拖動,來調整那一個窗口的大小。如果你同時按住了Shift鍵,窗口將會按比例縮放(寬高比會保留)。

語法

floating_modifier <Modifier>

例子

floating_modifier Mod1

4.7 限制浮動窗口的大小

浮動窗口的最大最小面積可以被指定。如果其中的floating_maximum_size被指定為-1,那么對于窗口的最大值將不會被約束。如果其中的floating_maximum_size為定義,或者被制定為0,i3會使用默認值來限制窗口最大值。floating_minimum_size的處理方法一定程度上與floating_maximum_size的相同。

語法

floating_minimum_size <width> x <height>
floating_maximum_size <width> x <height>

例子

floating_minimum_size 75 x 50
floating_maximum_size -1 x -1

4.8 工作區的定位

新工作區有一個默認合適的定位:寬屏用水平定位,豎屏用垂直定位。

你可以重寫default_orientation的行為

語法

default_orientation horizontal|vertical|auto

例子

default_orientation vertical

4.9 新容器的布局模式

這個選項決定了工作區級別的容器該用什么布局模式

語法

workspace_layout default|stacking|tabbed

例子

workspace_layout tabbed

4.10 新窗口的邊框風格

此選項決定新窗口擁有什么樣的邊框風格。默認是normal。注意,new_float 僅應用于作為浮動窗口呼出的窗口。例如對話窗口,而不是到后來才被設置成浮動窗口的窗口。

語法

new_window normal|none|pixel
new_window normal|pixel <px>
new_float normal|none|pixel
new_float normal|pixel <px>

例子

new_window pixel

"normal" 和 "pixel" 邊框風格支持設置邊框像素大小的可選項。

例子

# The same as new_window none
new_window pixel 0

# A 3 px border
new_window pixel 3

4.11 隱藏靠近屏幕邊緣的邊框

你可以使用hide_edge_borders來隱藏與屏幕邊緣靠近的邊框。如果你使用滾動條的話這很有用,或者不想浪費甚至兩像素的顯示空間。"smart"選項是在工作區內只有一個可見窗口時才隱藏邊框,而在工作去內有多個窗口,他不會隱藏邊框。

語法

hide_edge_borders none|vertical|horizontal|both|smart

例子

hide_edge_borders vertical

4.12 指定窗口的任意命令(for window)

使用for_window指令,當i3碰到特定的窗口,你可以讓i3執行任何命令。它可以用在讓窗口浮動,改變他們的邊框的方面,等。

語法

for_window <criteria> <command>

例子

# enable floating mode for all XTerm windows
for_window [class="XTerm"] floating enable

# Make all urxvts use a 1-pixel border:
for_window [class="urxvt"] border pixel 1

# A less useful, but rather funny example:
# makes the window floating as soon as I change
# directory to ~/work
for_window [title="x200: ~/work"] floating enable

有效的命令請command_criteria

4.13 不把焦點放在新建窗口

當一個新窗口出現時,焦點會移到它那里。no_focus 指令允許預防這種情況發生,而且它必須與command_criteria一起使用

注意,他不會在所有情景下生效,例如,當數據正輸送給一個運行中的程序,使得焦點必須移到它身上。設置這種情況的行為,參考focus_on_window_activation

在工作區的第一個窗口中,no_focus也會被忽略,在這種情況下,沒有理由不把焦點放在這個窗口。與workspace_layaout結合使用會有更好是可用性。

語法

no_focus <criteria>

例子

no_focus [window_role="pop-up"]

4.14 變量

正如您在有關鍵盤綁定的章節中了解到的,你將要配置許多包含修飾鍵的綁定,如果你想要保存一些輸入并能夠改變你之后要用的修飾鍵,那么變量就很方便了。

語法

set $<name> <value>

例子

set $m Mod1
bindsym $m+Shift+r restart

在解釋過程中,變量會在文件中被替換。變量擴張不是遞歸的,所以不可能用一個包含另一個變量的值來定義變量。對于這個沒有其他的想法,而且絕對沒有改變的計劃。如果你需要更多的動態配置,你應該創建一些用來生成配置文件在i3啟動之前運行的腳本。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容