原本Ivon想寫個簡單的i3wm使用教學,寫一寫好像就變成很複雜了。不過Ivon不會把文章弄得像r/unixporn那樣複雜的美化,Ivon的自定義以夠用就好為標準。
Ivon將簡介Arch Linux上i3wm的安裝和操作方式,還有一些優化過程。最後談談將Display Manager幹掉,直接用startx啟動i3wm的用法。
1. i3wm簡介#
i3wm是平鋪式視窗管理員(tiling window manager),而非完整的桌面環境(desktop environment),功能極度簡化。與類似的視窗管理員比較,i3wm擁有龐大的生態系和擴充能力。
i3wm最大好處就是RAM佔用了。對比GNOME和KDE來說非常低,i3wm的RAM佔用甚至比XFCE和LXQT還小。
但是,使用i3wm需要大量鍵盤快捷鍵,滑鼠的用處大大減弱。你還必須熟悉使用Linux終端機,以及懂得用指令連線上網、啟動藍芽、調整音量等操作,因為這些功能i3wm預設通通不提供,要裝也得花些時間調校,所以要有豐沛的好奇心和充足的時間來自定義i3wm的環境。如果你有geek的潛質,或許會在調整設定時像Ivon一樣越調越起勁。
注意i3wm是給X11伺服器用的,想要迎接未來的請改用"Sway",基本上就是Wayland版i3wm。
2. 安裝i3wm並初始化#
i3wm可以跟現有的KDE、GNOME等桌面環境共存。i3wm是極簡化的視窗管理員,對其他桌面環境幾乎無影響。
- i3wm大部份Linux發行版都有收,有些還會包含i3-status等額外套件(i3-gap已被併入i3wm)。像Arch Linux安裝i3wm的指令就是:
# 此group包含i3-wm、i3blocks、i3lock 、i3status
sudo pacman -S i3
登出系統。在登入畫面點選i3wm即可進入i3wm的工作階段。
i3wm初次登入會問要不要建立預設設定檔,用鍵盤移動,選Yes後Enter,我習慣將mod鍵設定為「Windows鍵」,之後設定檔會寫入至
~/.config/i3/config
。
3. i3wm的操作方式#
Ivon介紹的是i3wm的預設設定值,部份需要自行新增。此外Ivon的快捷鍵都是按照i3原作者推薦設定的,因為我記不住自己定義的有哪些。
要了解細部設定,請看官方手冊: i3 User’s Guide - i3 Tiling Window Manager
*Ivon使用「Windows鍵」作為mod鍵。*
進入桌面後什麼都不能按。按mod鍵+Enter啟動終端機模擬器,從這裡就能啟動程式了,例如輸入
firefox
。如果要「應用程式列表」,請看下下節安裝rofi。i3wm所有視窗都是平鋪在同一個畫面,每開一個新視窗,它就會水平排在視窗的旁邊。滑鼠點選中間黑條調整分割大小。
按mod鍵+V,下一個開啟的視窗就會改成垂直排列。按mod鍵+H回復水平排列。
對視窗按Shift+mod鍵+Q關閉視窗。
對視窗按mod鍵+F,視窗會變成全螢幕。再按一次復原。
對視窗按Shift+mod鍵+空白鍵,讓視窗變成自由移動的浮動模式。按mod鍵+滑鼠右鍵縮放視窗大小。
i3wm沒有「最小化視窗」,不過你可以利用scratchpad(需另外設定快捷鍵):按Shift+mod鍵+減號將一或多個浮動視窗丟到scratchpad暫時隱藏,按mod鍵+減號復原。
你應會發現i3wm左下角有數字框框,代表的是工作區(workspace)。按mod鍵+數字鍵切換至該工作區。對視窗按Shift+mod鍵+數字鍵可將視窗移動到另一個工作區。
要使用i3lock鎖定螢幕,按Ctrl+mod鍵+L(需另外設定快捷鍵)。i3lock鎖定螢幕後是全黑畫面,可直接輸入密碼解鎖,而無須喚醒螢幕。
要退出i3wm的工作階段,按Shift+mod鍵+E,點選螢幕上方的Yes退出。
i3wm的設定檔一經修改便需重新載入才會生效,若要不登出重新啟動i3wm,按Shift+mod鍵+R。
4. 優化i3wm環境#
i3wm的設定檔位於~/.config/i3/config
,裡面包含啟動i3wm後自動啟動(exec
)的程式,還有快捷鍵(bindsym
)設定。順序並無固定,不過Ivon建議是按照預設格式:檔案開頭填寫要自動啟動的程式,檔案末尾才填寫快捷鍵設定。
4.1. 解決Nvidia顯卡畫面撕裂#
i3wm配合Nvidia專有驅動可能會遇到畫面撕裂(tearing),也就是捲動畫面時候出現橫向撕裂感,在這邊說明解法。
- 編輯
/etc/default/grub
,加入核心參數nomodeset
:
GRUB_CMDLINE_LINUX="nomodeset"
- 更新GRUB設定
sudo grub-mkconfig -o /boot/grub/grub.cfg
- 編輯
~/.config/i3/config
,加入Force full composition pipeline
的設定。
exec_always --no-startup-id nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 {ForceFullCompositionPipeline=On}"
- 重開機。順帶一提,i3wm要使用多螢幕輸出需配合
xrender
指令。
4.2. 設定隨i3wm自動啟動的程式#
編輯~/.config/i3/config
,設定啟動i3wm後自動啟動Fcitx5輸入法(新酷音)。
exec_always --no-startup-id fcitx5 -d
安裝feh(見下一節)後,要設定i3wm啟動後自動設定桌布。
exec_always --no-startup-id ~/.fehbg &
4.3. 設定i3wm快捷鍵#
i3wm預設的快捷鍵已經很多,Ivon僅按照過去使用其他桌面環境的習慣新增幾個。
編輯~/.config/i3/config
,在檔案末尾加入按PrintScreen的截圖快捷鍵:
bindsym Print exec --no-startup-id maim "/home/$USER/Pictures/$(date).png"
設定鎖定螢幕i3lock的快捷鍵:
bindsym Control+$mod+l exec "i3lock -c 000000"
最後是scratchpad的快捷鍵:
bindsym $mod+Shift+minus move scratchpad
bindsym $mod+minus scratchpad show
關於調整音量,i3wm預設綁定的是電腦鍵盤的音量鍵(XF86Audio,在PrintScreen鍵上面)配合pactl
指令控制。如果你的鍵盤沒有音量鍵,就得另外綁定快捷鍵了。此外Ivon使用的音訊系統是PulseAudio,所以會選擇安裝pavucontrol
這個圖形化工具再用rofi啟動,方便調整音量和輸出裝置。
4.4. 設定i3wm右下角顯示的系統資訊#
i3wm預設會用i3-status在電腦右下角顯示IP、網速、RAM、硬碟等資訊。
- IP不該是隨時被人看到的東西對吧,編輯i3-status設定檔,位於
~/.config/i3status.conf
,將有線網路的格式修改如下:
ethernet _first_ {
format_up = "Ethernet: Up"
format_down = "Ethernet: down"
}
- 重新啟動i3wm。
4.5. 安裝應用程式啟動器rofi#
rofi作用為顯示應用程式列表,是取代dmenu的好選擇。
- 安裝rofi:
sudo pacman -S rofi
- 編輯
~/.config/i3/config
,將i3wm設定檔的dmenu快捷鍵取代為rofi:
bindsym $mod+d exec --no-startup-id rofi -show drun
- 重新啟動i3wm,按mod鍵+D即可啟動應用程式列表。rofi會記住常用的應用程式並把他們排在前面。
4.6. 安裝合成器picom啟用透明特效#
i3wm預設並沒有合成器(compositor),一般會推薦裝picom(compton已與其合併),提供透明與陰影效果。
- 安裝picom:
sudo pacman -S picom
- 複製picom的預設設定檔。該檔案用於設定picom的透明度、陰影、圓角。Ivon不太喜歡視窗都透明的,所以我會將預設值調回1。
cp /etc/xdg/picom.conf ~/.config/picom.conf
- 將picom加入
~/.config/i3/config
隨i3wm自動啟動。exec_always
是指每次重新載入i3wm設定檔也會自動啟動。
exec_always --no-startup-id picom -b --config /home/$USER/.config/picom.conf
- 重新啟動i3wm,即可看到picom提供的視窗透明效果,切換工作區還會出現漸層動畫。
4.7 停用螢幕鎖定與保護程式#
i3wm的設定檔案加入以下內容,防止X螢幕保護程式啟動:
exec_always --no-startup-id xset s off
exec_always --no-startup-id xset s off -dpms
exec_always --no-startup-id xset s noblank
5. 推薦跟i3wm一起用的軟體#
Ivon推薦安裝一些像i3wm重度依賴鍵盤,無需滑鼠就可以操作的軟體。
5.1. st極簡終端機#
st就…簡單的終端機模擬器,沒有其他桌面環境那樣花俏的分頁和視窗功能。
- st需從AUR安裝,檔案很小。貼上指令要按Shift+Insert。要更多自定義你得去改它的C原始碼。
yay -S st
- 修改i3wm的設定檔,找到
i3-sensible-terminal
這行,將mod鍵+Enter啟動的終端機改為st:
bindsym $mod+Return exec st
5.2. nm-applet純文字網路設定工具#
- 網路連線現在都是利用NetworkManager,確保開機自動啟動:
sudo systemctl enable NetworkManager
- 安裝nm-applet。
sudo pacman -S network-manager-applet
- i3wm的設定檔裡面已經有nm-applet自動啟動的參數,所以重開機後就會看到系統右下角有控制網路連線的選單。另外
nmcli
指令也是很好用的連線工具。
5.3. ranger純文字檔案管理器#
- 安裝ranger:
sudo pacman -S ranger
- 複製ranger設定檔至
~/.config/ranger/rc.conf
:
ranger --copy-config=all
- ranger使用上跟vim十分相似,檢視檔案會自動啟動相應的應用程式。你也可以綁定快捷鍵。
5.4. feh圖片檢視器與設定桌布#
- 安裝feh:
sudo pacman -S feh
- feh的用途就是拿來看圖片,支援各種格式。也可以用來設定桌布:
feh --bg-scale "圖片路徑"
- 將fehbg賦予執行權限:
chmod +x ~/.fehbg
- 將這條加到i3wm的設定檔,使每次登入後自動設定桌布:
exec_always ~/.fehbg &
5.5. mpv播放影片和音樂#
跟常見的影片播放器VLC不同,MPV的自定義程度非常高。
- 安裝MPV:
sudo pacman -S mpv
- 建立預設設定檔:
cp -r /usr/share/doc/mpv/ ~/.config/
- 編輯
~/.config/mpv/mpv.conf
設定檔啟用MPV的硬體加速:
sub-auto=fuzzy
profile=gpu-hq
- 編輯
~/.config/mpv/input.conf
可以設定快捷鍵:
shift+s screenshot each-frame
Shift+UP seek 600
Shift+DOWN seek -600
= cycle video-unscaled
- cycle-values window-scale 2 3 1 .5
WHEEL_UP add volume 5
WHEEL_DOWN add volume -5
WHEEL_LEFT ignore
WHEEL_RIGHT ignore
Alt+RIGHT add video-rotate 90
Alt+LEFT add video-rotate -90
Alt+- add video-zoom -0.25
Alt+= add video-zoom 0.25
Alt+j add video-pan-x -0.05
Alt+l add video-pan-x 0.05
Alt+i add video-pan-y 0.05
Alt+k add video-pan-y -0.05
Alt+BS set video-zoom 0; set video-pan-x 0; set video-pan-y 0
順帶一提,mpv還能播放影片當i3wm的動態桌布。
5.6. vim文字編輯器#
vim的教學網路上非常多了,這裡就不贅述了。vim能編輯程式,也可以分割視窗當小型IDE用。
如果想在終端機裡面啟動分割視窗,你可以另外安裝tmux
,並設定登入Bash後自動啟動tmux工作階段。
5.7. w3m純文字網頁瀏覽器#
w3m是支援CSS的純文字網頁瀏覽器,用來看Hacker News這類無圖片的純文字網頁很適合。此外,Reddit有Python的RDT
套件可以純文字瀏覽,台灣的PTT則是用SSH連線至[email protected]
就行了。
另外本站也可以用w3m存取喔。
安裝w3m:
sudo pacman -S w3m
造訪Google。操作方法見 官網,
w3m google.com
6. 以startx啟動i3wm#
Linux開機都會有顯示管理器(Display Manager)用於登入桌面環境,例如GDM、LightDM、SDDM等。但其實你可以把它去掉,變成開機只有黑底白字的tty,並在登入帳號後才啟動X伺服器和i3wm。
Ivon覺得這樣有點回到90年代的感覺,因為得從xinitrc開始設定起…但還是寫下來供參考。記得要先按照上面的步驟解決Nvidia顯示卡的問題,否則tty會沒畫面。
- 停用Display Manager的開機服務,例如GDM:
sudo systemctl disable gdm
- 拷貝預設
xinitrc
設定值至家目錄
cp /etc/X11/xinit/xinitrc ~/.xinitrc
- 編輯
~/.xinitrc
,去掉start some nice programs
段落啟動的測試用程式。並在最下方加入啟動i3wm。
#!/bin/sh
# start some nice programs
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
exec i3
- 編輯Bash設定檔
~/.bash_profile
,設定登入帳號後自動啟動X伺服器(僅限本機而非SSH),並在退出i3wm後自動退出登入。
#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc
if [ -z "${DISPLAY}" ] && [[ $(tty) = /dev/tty1 ]]; then
exec startx
exit
fi
7. 用chezmoi備份dotfile#
i3wm的設定檔眾多,你需要一款軟體加以管理。
參考 Chezmoi使用教學