天天看點

桌面應用 | i3 視窗管理器終極定制指南

作者:硬核老王
桌面應用 | i3 視窗管理器終極定制指南
在這份超詳細的指南中了解如何通過 i3 視窗管理器來自定義系統的外觀和體驗。

你可能在網上(尤其是通過

r/unixporn

子區)看到過很多炫酷的截圖,使用者可以根據個人喜好自定義他們的桌面并與大家分享。

這是因為 Linux 允許你自定義桌面體驗的方方面面。

而結果?就是比任何 Mac 或 Windows 系統更具視覺和感覺效果。

來看一下這個 😌

桌面應用 | i3 視窗管理器終極定制指南

看起來像一個 Linux Mint 系統嗎?😲

但是你怎樣才能做到這樣呢?自定義你的 Linux 桌面外觀是很困難的。

答案就在于 視窗管理器。如果你能配置好視窗管理器,你就能自定義外觀。

在本指南中,我将引導你完成使用 i3 視窗管理器進行基本配置。它是Linux 上最好的視窗管理器之一。

💡 “加料Rice” 是一個常用的詞彙,用來指代在桌面上進行視覺改進和自定義。引用自/r/unixporn(LCTT 譯注:“加料”一詞來自于購買便宜的亞洲汽車,并給它們安裝售後零件,以讓它更好地類似于賽車。)

在遵循本指南之前,你需要了解以下内容:

  • 在本指南中,我将使用 Arch Linux來示範步驟,但你可以使用你喜歡的任何發行版,結果也是一樣的。
  • 請記住,本指南是 對 i3 進行“加料”定制的基礎。

在按照本指南進行操作後,你應該得到以下預期結果:

桌面應用 | i3 視窗管理器終極定制指南
📥 為了節省你的時間,我已經在 GitHub上上傳了與本文相關的所有 i3 配置檔案,你可以通過這些檔案實作我們在本文中所期望的最終外觀。
下載下傳 i3 配置檔案

首先,讓我們開始安裝i3 視窗管理器。

在 Linux 上安裝 i3 視窗管理器

基于 Ubuntu/Debian:

sudo apt install xorg lightdm lightdm-gtk-greeter i3-wm i3lock i3status i3blocks dmenu terminator
           

Arch Linux:

sudo pacman -S xorg lightdm lightdm-gtk-greeter i3-wm i3lock i3status i3blocks dmenu terminator
           

當你完成安裝後,使用以下指令啟用 lightdm 服務:

sudo systemctl enable lightdm.service
           

然後啟動 lightdm 服務:

sudo systemctl start lightdm.service
           

這将啟動 lightdm 登入界面,并要求你輸入使用者名密碼。

如果你安裝了多個桌面環境,你可以從選擇菜單中選擇 i3:

桌面應用 | i3 視窗管理器終極定制指南

當首次登入 i3 時,它會詢問你是否要建立一個 i3 配置檔案。

按下Enter鍵建立一個新的 i3 配置檔案:

桌面應用 | i3 視窗管理器終極定制指南

接下來,它會詢問你選擇

Win

Alt

鍵哪個作為修飾鍵(

mod

)。

我建議你選擇

Win

(或者

Super

鍵),因為大多數使用者已經習慣将其用作快捷鍵:

桌面應用 | i3 視窗管理器終極定制指南

現在你可以開始使用 i3 視窗管理器了。

但在我們開始定制之前,讓我先介紹一下你如何使用 i3。

i3 視窗管理器的按鍵綁定

讓我們從基礎知識開始。

視窗管理器的基本功能是将多個視窗水準和垂直地組合在一起,這樣你就可以同時監視多個程序。

結果是這樣的:

桌面應用 | i3 視窗管理器終極定制指南

你可以使用以下按鍵綁定執行更多操作:

按鍵綁定 描述

Mod + Enter

打開終端。

Mod + ←

切換到左側視窗。

Mod + →

切換到右側視窗。

Mod + ↑

切換到上方視窗。

Mod + ↓

切換到下方視窗。

Mod + Shift + ←

将視窗移動到左側。

Mod + Shift + →

将視窗移動到右側。

Mod + Shift + ↑

将視窗移動到上方。

Mod + Shift + ↓

将視窗移動到下方。

Mod + f

将焦點視窗切換到全屏模式。

Mod + v

下一個視窗将垂直放置。

Mod + h

下一個視窗将水準放置。

Mod + s

啟用堆疊式視窗布局。

Mod + w

啟用頁籤式視窗布局。

Mod + Shift + Space

啟用浮動視窗(針對焦點視窗)。

Mod + 滑鼠左鍵單擊

使用滑鼠拖動整個視窗。

Mod + 0-9

切換到另一個工作區。

Mod + Shift + 0-9

将視窗移動到另一個工作區。

Mod + d

打開應用程式啟動器(D 菜單)。

Mod + Shift + q

關閉焦點視窗。

Mod + Shift + c

重新加載 i3 配置檔案。

Mod + Shift + r

重新開機 i3 視窗管理器。

Mod + Shift + e

退出 i3 視窗管理器。

我知道按鍵綁定很多,但如果你每天練習它們,你很快就會習慣。

如果你想知道,你可以根據需要更改按鍵綁定,後面的指南中我會分享如何做到這一點。

現在,讓我們來看看配置部分。

在 Arch Linux 中啟用 AUR

如果你剛剛安裝了 Arch Linux,可能還沒有啟用 AUR。

這意味着你錯過了 Arch Linux 最重要的特性。

要 啟用 AUR,你需要使用 AUR 包管理器。在這裡,我将使用

yay

首先,安裝

git

sudo pacman -S git
           

現在,克隆

yay

存儲庫并切換到

yay

目錄:

git clone https://aur.archlinux.org/yay-git.git && cd yay
           

最後,建構包:

makepkg -si
           

還有其他一些 AUR 包管理器,比如 Paru,如果你想使用除

yay

之外的其他工具,你可以繼續或者探索其他選項。

更改 i3 視窗管理器的分辨率

如果你使用虛拟機運作視窗管理器,可能會遇到問題,尤其是顯示分辨率可能被鎖定在

1024x768

上,就像我一樣。

是以,你需要執行以下指令,指定所需的顯示分辨率:

xrandr --output [顯示名稱] --mode [分辨率]
           

要找到已連接配接顯示器的名稱,你需要使用以下形式的

xrandr

指令:

xrandr | grep -w 'connected'
           

在我的情況下,顯示名稱是

Virtual-1

是以,如果我想将分辨率更改為

1920*1080

,我需要執行以下指令:

xrandr --output Virtual-1 --mode 1920x1080
           

但這隻是暫時生效。要使其永久生效,你需要在 i3 配置檔案中進行更改。

首先,打開配置檔案:

nano ~/.config/i3/config
           

通過按下

Alt + /

來在

nano

中跳到檔案末尾,并使用以下文法來永久更改顯示分辨率:

# 顯示分辨率
exec_always xrandr --output [顯示名稱] --mode [分辨率]
           

結果應該是這樣的:

桌面應用 | i3 視窗管理器終極定制指南

完成後,儲存更改并退出 nano文本編輯器。

現在,使用

Mod + Shift + r

重新啟動 i3 視窗管理器,以使你對配置檔案所做的更改生效!

在 i3 視窗管理器中更改桌面

預設情況下,i3 的外觀比較陳舊,你可能想切換回之前的桌面環境。

但是通過更改桌面,你可以改變整個系統的氛圍。

在 i3 中有多種方式可以更改桌面,但在這裡,我将向你展示如何使用

feh

實用工具。

首先,讓我們從安裝開始:

對于基于 Arch 的發行版:

sudo pacman -S feh
           

對于 Ubuntu/Debian系的發行版:

sudo apt install feh
           

安裝完成後,你可以從網際網路上下載下傳你喜歡的桌面。接下來,打開 i3 配置檔案:

nano ~/.config/i3/config
           

跳到檔案的末尾,使用如下所示的

feh

指令:

# 顯示桌面
exec_always feh --bg-fill /path/to/wallpaper
           

在我的情況下,桌面位于

Downloads

目錄中,是以我的指令如下:

桌面應用 | i3 視窗管理器終極定制指南

儲存更改并退出

nano

文本編輯器。

為了使配置檔案的更改生效,使用

Mod + Shift + r

重新啟動 i3 視窗管理器。

我的效果如下:

桌面應用 | i3 視窗管理器終極定制指南

自定義 i3 鎖屏界面

預設情況下,如果你想鎖定系統,你需要執行以下指令:

i3lock
           

鎖屏界面如下所示:

桌面應用 | i3 視窗管理器終極定制指南

下面,我将向你展示:

  • 如何建立自定義快捷方式以鎖定 i3 會話
  • 如何更改鎖屏界面的桌面

為了使鎖屏界面更加美觀,你需要使用

i3lock-color

包。

但首先,你需要移除現有的

i3lock

,因為它會與

i3lock-color

沖突:

在 Arch Linux 上移除它:

sudo pacman -R i3lock
           

對于 Ubuntu/Debian 使用者:

sudo apt remove i3lock
           

完成後,你可以使用 AUR 包管理器安裝

i3lock-color

yay i3lock-color
           

如果你使用的是基于 Ubuntu 的系統,你需要從頭編譯它。你可以在他們的 GitHub 頁面上找到 。

安裝完成後,讓我們建立一個新目錄并建立一個新檔案來存儲鎖屏界面的配置:

安裝好

i3lock-color

後,你可以建立一個新目錄并建立一個新檔案來存儲鎖屏界面的配置:

mkdir ~/.config/scripts && nano ~/.config/scripts/lock
           

将以下檔案内容粘貼到檔案中,定義鎖屏界面的樣式:

#!/bin/sh

BLANK='#00000000'
CLEAR='#ffffff22'
DEFAULT='#00897bE6'
TEXT='#00897bE6'
WRONG='#880000bb'
VERIFYING='#00564dE6'

i3lock \
--insidever-color=$CLEAR     \
--ringver-color=$VERIFYING   \
\
--insidewrong-color=$CLEAR   \
--ringwrong-color=$WRONG     \
\
--inside-color=$BLANK        \
--ring-color=$DEFAULT        \
--line-color=$BLANK          \
--separator-color=$DEFAULT   \
\
--verif-color=$TEXT          \
--wrong-color=$TEXT          \
--time-color=$TEXT           \
--date-color=$TEXT           \
--layout-color=$TEXT         \
--keyhl-color=$WRONG         \
--bshl-color=$WRONG          \
\
--screen 1                   \
--blur 9                     \
--clock                      \
--indicator                  \
--time-str="%H:%M:%S"        \
--date-str="%A, %Y-%m-%d"       \
--keylayout 1                \
           

儲存更改并退出文本編輯器。

📋 在網上可以找到各種不同的 i3 鎖屏樣式的 bash 腳本。這隻是一個示例,對于大多數情況來說是一個較為簡單的選項。

現在,使用 chmod 指令将該檔案設定為可執行檔案:

sudo chmod +x .config/scripts/lock
           

接下來,你需要對配置檔案進行一些更改,以添加該配置檔案的路徑以使其生效。

此外,我将向你展示如何使用自定義鍵盤快捷鍵鎖定螢幕。

首先,打開配置檔案:

nano ~/.config/i3/config
           

使用

Alt + /

跳至行尾并粘貼以下内容:

# 鎖屏快捷鍵
bindsym $mod+x exec /home/$USER/.config/scripts/lock
           

在上面的示例中,我将

mod + x

作為鎖定螢幕的快捷鍵,你可以選擇任何你喜歡的快捷鍵。

最後的配置檔案将如下所示:

桌面應用 | i3 視窗管理器終極定制指南

相當不錯,不是嗎?

在 i3 視窗管理器中更改主題和圖示

我知道你可能會想到這個問題。

你為什麼需要圖示呢?你并不僅僅使用視窗管理器來使用指令行工具。

有時候,使用圖形界面更加友善,比如使用檔案管理器。是以,在處理這些工具時,你希望界面看起來更好看?

是以,在本部分中,我将向你展示:

  • 如何在 i3 中更改主題
  • 如何在 i3 中更改圖示

讓我們從安裝主題開始。

在這裡,我将使用

materia-gtk-theme

papirus

圖示,但你可以使用任何你喜歡的主題和圖示。

在 Arch 中安裝主題,使用以下指令:

sudo pacman -S materia-gtk-theme papirus-icon-theme
           

在 Ubuntu/Debian 系統中:

sudo apt install materia-gtk-theme papirus-icon-theme
           

但僅僅安裝還不能完成任務。你需要像使用 GNOME “調整Tweaks” 應用更改主題一樣來應用主題。

在 i3 中,你可以使用

lxappearance

工具 來更改主題和圖示。

在 Arch 中安裝

lxappearance

,使用以下指令:

sudo pacman -S lxappearance
           

在 Ubuntu/Debian 系統中:

sudo apt install lxappearance
           

安裝完成後,使用

Mod + d

啟動 D 菜單,然後輸入

lxappearance

,并在第一個結果上按Enter鍵。

在這裡,選擇你喜歡的主題。我這裡選擇

Materia-dark

選擇主題後,點選應用按鈕以應用更改:

桌面應用 | i3 視窗管理器終極定制指南

同樣地,要更改圖示,選擇 “圖示主題Icon Theme”,選擇圖示主題,然後點選應用按鈕:

桌面應用 | i3 視窗管理器終極定制指南

應用主題和圖示後,我的檔案管理器如下所示:

桌面應用 | i3 視窗管理器終極定制指南

在 i3 視窗管理器中為工作區設定圖示

預設情況下,工作區僅由數字表示,這并不是你想要使用工作區的最理想方式。

是以,在本部分中,我将引導你如何使用合适的圖示更改工作區的名稱。

為了在配置檔案中使用圖示,首先你需要安裝名為

Awesome

的新字型:

對于基于 Arch 的發行版:

sudo pacman -S ttf-font-awesome
           

對于 Ubuntu/Debian 系統:

sudo apt install fonts-font-awesome
           

安裝完成後,打開 i3 配置檔案:

nano ~/.config/i3/config
           

在這個配置檔案中,找到工作區的部分,你将會看到為每個工作區給出的變量:

桌面應用 | i3 視窗管理器終極定制指南

在這個部分,你需要用你想要的名稱替換給出的工作區數字。

我将把第一個工作區命名為 “programs”,因為在本教程的後面部分,我将展示如何将特定的應用程式配置設定到特定的工作區。

我主要使用前 5 個工作區,是以我會相應地命名它們:

# 定義預設工作區的名稱,稍後我們将在其中配置鍵綁定。
# 我們使用變量來避免在多個地方重複使用名稱。
set $ws1 "1: Terminal"
set $ws2 "2: Firefox"
set $ws3 "3: VMWare"
set $ws4 "4: Spotify"
set $ws5 "5: Shutter"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
           

現在讓我們為配置檔案中提到的每個應用程式添加圖示。

你可以 參考 awesome 字型的備忘單來找到合适的圖示。

将圖示複制粘貼到名稱前面:

# 定義預設工作區的名稱,稍後我們将在其中配置鍵綁定。
# 我們使用變量來避免在多個地方重複使用名稱。
set $ws1 "1:  Terminal"
set $ws2 "2:  Firefox"
set $ws3 "3:  VMWare"
set $ws4 "4:  Spotify"
set $ws5 "5:  Shutter"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
           

不要擔心它看起來可怕!

完成後,使用

Mod + e

退出 i3,然後再次登入以應用你剛剛所做的更改。

我的效果如下圖所示:

桌面應用 | i3 視窗管理器終極定制指南

字型看起來太小?是時候解決這個問題了!

在 i3 中更改标題視窗和狀态欄的字型

首先,讓我們安裝新的字型(我将在這裡使用 Ubuntu 字型)。

要在 Arch 上安裝 Ubuntu 字型,請執行以下操作:

sudo pacman -S ttf-ubuntu-font-family
           

如果你使用的是 Ubuntu,你已經安裝了這些字型!

安裝完成後,打開配置檔案:

nano ~/.config/i3/config
           

在配置檔案中,找到

font pango:monospace 8

這一行,這是預設字型。

找到那行後,添加字型名稱和大小,如下所示:

font pango:Ubuntu Regular 14
           

然後,使用

Mod + Shift + r

重新啟動視窗管理器,這樣就完成了工作:

桌面應用 | i3 視窗管理器終極定制指南

在 i3 視窗管理器中配置設定應用程式到工作區

在給工作區命名之後,你會想要将特定的軟體配置設定到相應的工作區中。

例如,如果我将第二個工作區命名為 “Firefox”,那麼我隻想在該工作區中使用 Firefox。

那麼要如何實作呢?

為了做到這一點,你需要找到每個要配置設定的應用程式的類名。

聽起來複雜?讓我告訴你如何做。

首先,将應用程式和終端并排打開。例如,在這個例子中,我将 Firefox 和終端并排打開:

桌面應用 | i3 視窗管理器終極定制指南

現在,在終端中執行

xprop

指令,它會改變滑鼠指針的形狀:

xprop
           

接下來,将滑鼠懸停在應用程式上,并在應用程式視窗内的任何位置單擊,如圖所示:

類名将在以下行的最後一個字元串中找到:

WM_CLASS(STRING) = "Navigator", "firefox"
           

在我的情況下,Firefox 浏覽器的類名将是

firefox

對所有你想要配置設定到工作區的應用程式重複這個過程。

一旦你知道每個你想要配置設定到工作區的應用程式的類名,打開配置檔案:

nano ~/.config/i3/config
           

使用

Alt + /

nano

定位到檔案末尾,并使用以下文法将應用程式配置設定到工作區:

# 配置設定應用到工作區
for_window [class="類名"] move to workspace $[工作區變量]
           

作為參考,下面是我為不同應用程式配置設定了 4 個工作區後的配置檔案示例:

桌面應用 | i3 視窗管理器終極定制指南

現在,無論在哪個工作區打開任何應用程式,它都會自動放置在配置的工作區中。非常友善! 😊

在 i3 視窗管理器中讓終端變透明

要啟用透明效果,你需要安裝

picom

合成器并對配置檔案進行一些更改。

讓我們從安裝開始。

對于基于 Arch 的發行版:

sudo pacman -S picom
           

對于基于 Ubuntu/Debian 的發行版:

sudo apt install picom
           

安裝完成後,你需要告訴系統使用

picom

首先打開配置檔案:

nano ~/.config/i3/config
           

在配置檔案的末尾插入以下行:

# 使用 picom 合成器實作透明效果
exec_always picom -f
           

這裡,我使用

-f

标志來在切換工作區、打開新應用程式等時啟用淡入淡出效果。

儲存并退出文本編輯器。

現在,使用

Mod + Shift + r

重新啟動 i3。

接下來,打開終端,打開 “首選項Preference”,然後選擇“配置檔案Profiles”,選擇“背景Background”,然後選擇“透明背景Transparent background”選項。

從這裡,你可以調整透明度:

桌面應用 | i3 視窗管理器終極定制指南

在 i3 視窗管理器中自定義狀态欄

預設情況下,狀态欄顯示各種資訊,但沒有圖示。

是以,在這個部分,我将展示如何從狀态欄中删除一些元素以及如何為它們添加圖示。

但是,在這裡,我将在

/etc/i3status.conf

中建立一個原始狀态欄的副本,以便如果出現任何錯誤,你可以随時恢複到預設配置。

首先,在

.config

目錄下建立一個新的目錄:

mkdir .config/i3status
           

在以下指令中,我使用了 cp 指令來複制檔案:

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

接下來,使用 chown 指令更改所有者,以便你可以進行所需的更改:

sudo chown $USER:$USER ~/.config/i3status/i3status.conf
           

現在,你需要通過修改 i3 配置檔案來訓示視窗管理器使用新的 i3status 配置檔案。首先打開配置檔案:

nano ~/.config/i3/config
           

在該配置檔案中查找

status_command i3status

這一行。這是你将提供新狀态配置檔案路徑的行。

找到該行後,進行以下更改:

bar {
    status_command i3status -c /home/$USER/.config/i3status/i3status.conf
}
           

最終的結果應該如下所示:

桌面應用 | i3 視窗管理器終極定制指南

儲存更改并退出文本編輯器。

現在,讓我們從狀态欄中删除不必要的訓示器。

首先,打開 i3status 配置檔案:

nano .config/i3status/i3status.conf
           

在這裡,你可以将以

order

開頭的行注釋掉,這些行實際上是訓示器的變量。

例如,在這裡,我禁用了

ipv6

wireless _first_

battery all

load

這些對我來說不必要的訓示器:

#order += "ipv6"
#order += "wireless _first_"
order += "ethernet _first_"
#order += "battery all"
order += "disk /"
#order += "load"
order += "memory"
order += "tztime local"
           

然後,在浏覽器中打開 awesome font 清單,找到與狀态欄中列出的項目相關的适當圖示。

在我的設定中,我删除了以下内容:

  • 删除了顯示可用記憶體的行
  • 删除了顯示以太網連接配接速度的行

最終,我的狀态欄如下所示:

桌面應用 | i3 視窗管理器終極定制指南

在 i3 視窗管理器中改變顔色方案

更改 i3 視窗管理器中的顔色方案是這個指南中最重要的部分,因為視窗管理器最吸引人的地方就是你選擇的視窗裝飾顔色。

📋 我将為每個顔色聲明變量,這樣你隻需更改變量本身的值,就可以輕松地獲得新的顔色方案。

首先,打開 i3 配置檔案:

nano ~/.config/i3/config
           

使用

Alt + /

快捷鍵到達檔案末尾,并使用以下文法添加變量來存儲顔色:

# 視窗的色彩方案
set $bgcolor    #523d64
set $in-bgcolor #363636
set $text       #ffffff
set $u-bgcolor  #ff0000
set $indicator  #a8a3c1
set $in-text    #969696
#                       邊框            背景            文本            訓示器(顯示下一個視窗位置的線條)     
client.focused          $bgcolor        $bgcolor        $text           $indicator
client.unfocused        $in-bgcolor     $in-bgcolor     $in-text        $in-bgcolor
client.focused_inactive $in-bgcolor     $in-bgcolor     $in-text        $in-bgcolor
client.urgent           $u-bgcolor      $u-bgcolor      $text           $u-bgcolor
           

在這裡:

  • bgcolor

    表示背景色。
  • in-bgcolor

    表示非活動視窗的背景色。
  • text

    是文本顔色。
  • u-bgcolor

    表示緊急操作的背景色。
  • indicator

    是标示下一個視窗位置的線條的顔色。
  • in-text

    是非活動視窗的文本顔色。

對于本指南,我僅使用了四個基本類别:

  • client.focused

    定義了焦點視窗的顔色。
  • client.unfocused

    定義了失去焦點時視窗的裝飾。
  • client.focused_inactive

    當其中一個容器處于焦點但目前沒有焦點時,顯示的顔色。
  • client.urgent

    定義了緊急操作時的顔色。
💡 除了這四個類别,還有更多類别,請參考 官方 i3 配置手冊以了解更多資訊。

一旦你對配置檔案進行了更改,請使用

Mod + Shift + r

重新啟動 i3。

如果你按照我的顔色方案,設定應該如下所示:

桌面應用 | i3 視窗管理器終極定制指南

那麼,狀态欄的顔色怎麼辦?當然可以改!

更改 i3 視窗管理器中狀态欄的顔色方案

在本節中,你将意識到為什麼我使用變量來存儲顔色,因為我将使用相同的變量來為我的狀态欄上色!

要在狀态欄中使用顔色,你需要在 i3 配置檔案的

bar {...}

部分進行更改。

首先,打開配置檔案:

nano ~/.config/i3/config
           

在配置檔案中查找

bar {...}

部分。

找到該部分後,建立一個顔色部分,并為狀态欄定義顔色和類别,與你為視窗所做的相同:

bar {
        status_command i3status -c /home/$USER/.config/i3status/i3status.conf
        colors {
                background $bgcolor
                separator #191919
                #                       border          background      text
                focused_workspace       $bgcolor        $bgcolor        $text
                inactive_workspace      $in-bgcolor     $in-bgcolor     $text
                urgent_workspace        $u-bgcolor      $u-bgcolor      $text   

        }
}
           

在這裡,我使用了

focused_workspace

inactive_workspace

urgent_workspace

這三個類别,根據需要定義了相應的顔色。

儲存更改後,重新啟動 i3,狀态欄也會顯示顔色。

設定 i3 狀态欄的透明度

本節将向你展示如何使 i3 狀态欄透明。

在此之前,讓我們先更改 i3 狀态欄的字型。

這裡,我将使用 Droid 字型,使其看起來幹淨而帶有一種極客風格。

要在 Arch Linux 上安裝 Droid 字型,請使用以下指令:

sudo pacman -S ttf-droid
           

對于 Ubuntu/Debian 系統,請使用以下指令:

sudo apt install fonts-droid-fallback
           

安裝完成後,打開配置檔案:

nano ~/.config/i3/config
           

進入

bar {...}

部分,并按下面的示例輸入字型名稱和大小:

font pango: Droid Sans Mono 11
           
桌面應用 | i3 視窗管理器終極定制指南

完成後,請重新啟動 i3,字型将會被更改!

要使狀态欄透明,你可以使用現有十六進制代碼中的額外兩個數字來定義透明度。

如果你想要控制透明度,我建議你檢視 此指南,其中提供了從 0 到 100% 透明度的代碼範圍。

為此,我将在配置檔案中使用兩個新變量。首先,打開配置檔案:

nano ~/.config/i3/config
           

在這裡,我為背景顔色添加了 60% 的透明度,并為非活躍背景顔色添加了 30% 的透明度:

set $bgcolor    #523d6499
set $in-bgcolor #3636364D
           

如果你仔細觀察,我在現有的十六進制顔色代碼中添加了兩位數字來定義透明度。例如,使用

99

來表示

60%

的透明度,而使用

4D

來表示

30%

的透明度。

此外,我添加了兩個新變量,透明度不同但顔色相同,作為背景使用,使其看起來更好:

set $focused-ws #523d6480
set $bar-color  #523d640D
           

完成後,讓我們修改

bar {...}

部分來應用透明度。

bar {...}

中添加兩行代碼:

i3bar_command i3bar --transparency
tray_output none
           

請注意,使用

tray_output none

,它将不會在托盤中顯示任何圖示。如果你不希望出現這種行為,則可以跳過此行,隻添加第一行以實作透明度。

一旦完成,修改狀态欄的顔色方案,例如更改背景顔色、邊框和活動工作區的背景。

修改後,配置檔案應如下所示:

桌面應用 | i3 視窗管理器終極定制指南

為了使你所做的更改生效,請重新啟動 i3,你将得到透明的視窗和狀态欄:

桌面應用 | i3 視窗管理器終極定制指南

在視窗管理器中使用 i3blocks

預設的 i3 狀态欄在我看來毫無用處;怎麼樣讓它變得有用起來呢?

在本部分,我将解釋如何添加以下功能:

  • 軟體包更新
  • 記憶體使用情況
  • 磁盤使用情況
  • 音量訓示器
  • Spotify 訓示器
📋 要實作這些功能,你需要使用一些腳本,這些腳本将允許你向狀态欄添加所需的操作。不用擔心,我不會讓你手動輸入腳本;GitHub 上有各種腳本可供選擇,幾乎涵蓋了你所需的所有方面。

但在此之前,你需要進行一些配置,以存儲腳本并訓示 i3 使用 i3block 的配置,而不是使用 i3bar。

如果你在本指南的開頭按照給定的說明進行操作,那麼 i3blocks 已經安裝好了,并且配置檔案位于

/etc/i3blocks.conf

如果你希望快速下載下傳塊配置檔案以進行設定而不閱讀其他内容,請點選以下連結:

i3 配置檔案

在本教程中,我将建立一個副本,使用它代替原始的配置檔案,是以首先我們要建立一個目錄來存儲配置檔案的副本:

mkdir ~/.config/i3blocks
           

現在,建立一個原始配置檔案的副本:

sudo cp /etc/i3blocks.conf ~/.config/i3blocks/
           

最後,使用

chown

指令更改檔案的所有者,以便你進行所需的更改:

sudo chown $USER:$USER ~/.config/i3blocks/i3blocks.conf
           

要啟用 i3blocks,在 i3 配置檔案中進行一些更改:

nano ~/.config/i3/config
           

進入

bar {...}

部分,在這裡,你需要将

status_command

更改為

i3blocks

并添加 i3blocks 配置檔案的路徑,如下所示:

桌面應用 | i3 視窗管理器終極定制指南

完成後,使用

Mod + Shift + r

重新啟動 i3 視窗管理器,整個狀态欄都會被更改,并顯示如下:

不要擔心,你将很快使狀态欄比以前的 i3bar 更有價值和好看。

添加磁盤塊

如果你想要顯示磁盤剩餘空間,可以添加此塊。

在這裡,我将使用

nano

建立并打開用于磁盤塊的配置檔案。

nano ~/.config/scripts/disk
           

然後粘貼以下行:

#!/usr/bin/env sh
DIR="${DIR:-$BLOCK_INSTANCE}"
DIR="${DIR:-$HOME}"
ALERT_LOW="${ALERT_LOW:-$1}"
ALERT_LOW="${ALERT_LOW:-10}" # color will turn red under this value (default: 10%)

LOCAL_FLAG="-l"
if [ "$1" = "-n" ] || [ "$2" = "-n" ]; then
    LOCAL_FLAG=""
fi

df -h -P $LOCAL_FLAG "$DIR" | awk -v label="$LABEL" -v alert_low=$ALERT_LOW '
/\/.*/ {
	# full text
	print label $4
	# short text
	print label $4
	use=$5
	# no need to continue parsing
	exit 0
}
END {
	gsub(/%$/,"",use)
	if (100 - use            

儲存更改并從文本編輯器中退出。

現在,将此檔案設定為可執行:

sudo chmod +x ~/.config/scripts/disk
           

接下來,打開 I3blocks 配置檔案:

nano ~/.config/i3blocks/i3blocks.conf
           

根據你想要放置磁盤塊的位置,粘貼以下行:

[disk]
command=/home/$USER/.config/scripts/disk
LABEL=
#DIR=$HOME
#ALERT_LOW=10
interval=30
           

完成後,儲存更改并使用

Mod + Shift + r

重新啟動 i3,狀态欄中将顯示帶有磁盤圖示的可用磁盤空間。

添加記憶體塊

這将是狀态欄中訓示系統中已使用記憶體的塊。

首先,建立并打開一個新檔案用于新的塊:

nano ~/.config/scripts/memory
           

然後在新檔案中粘貼以下行:

#!/usr/bin/env sh
TYPE="${BLOCK_INSTANCE:-mem}"
PERCENT="${PERCENT:-true}"

awk -v type=$TYPE -v percent=$PERCENT '
/^MemTotal:/ {
	mem_total=$2
}
/^MemFree:/ {
	mem_free=$2
}
/^Buffers:/ {
	mem_free+=$2
}
/^Cached:/ {
	mem_free+=$2
}
/^SwapTotal:/ {
	swap_total=$2
}
/^SwapFree:/ {
	swap_free=$2
}
END {
	if (type == "swap") {
		free=swap_free/1024/1024
		used=(swap_total-swap_free)/1024/1024
		total=swap_total/1024/1024
	} else {
		free=mem_free/1024/1024
		used=(mem_total-mem_free)/1024/1024
		total=mem_total/1024/1024
	}
	pct=0
	if (total > 0) {
		pct=used/total*100
	}
	# full text
	if (percent == "true" ) {
		printf("%.1fG/%.1fG (%.f%%)\n", used, total, pct)
	} else {
		printf("%.1fG/%.1fG\n", used, total)
	}
	# short text
	printf("%.f%%\n", pct)
	# color
	if (pct > 90) {
		print("#FF0000")
	} else if (pct > 80) {
		print("#FFAE00")
	} else if (pct > 70) {
		print("#FFF600")
	}
}
' /proc/meminfo
           

儲存更改并從文本編輯器中退出。

現在,要使其生效,你需要使用以下指令将此檔案設定為可執行:

sudo chmod +x ~/.config/scripts/memory
           

接下來,打開 i3blocks 配置檔案:

nano ~/.config/i3blocks/i3blocks.conf
           

并将以下内容粘貼到你希望在狀态欄中顯示記憶體使用情況的位置:

[memory]
command=/home/$USER/.config/scripts/memory
label=
interval=30
           

儲存更改并從文本編輯器中退出。重新啟動 i3 以使更改生效!

添加更新訓示塊

這是最有幫助的訓示器,它顯示需要更新的舊軟體包數量。

首先,使用以下指令安裝依賴項以使其正常工作:

sudo pacman -S pacman-contrib
           

現在,建立一個新檔案來存儲腳本:

nano ~/.config/scripts/arch-update
           

然後粘貼以下内容:

#!/usr/bin/env python3
import subprocess
from subprocess import check_output
import argparse
import os
import re


def create_argparse:
    def _default(name, default='', arg_type=str):
        val = default
        if name in os.environ:
            val = os.environ[name]
        return arg_type(val)

    strbool = lambda s: s.lower in ['t', 'true', '1']
    strlist = lambda s: s.split

    parser = argparse.ArgumentParser(description='Check for pacman updates')
    parser.add_argument(
        '-b',
        '--base_color',
        default = _default('BASE_COLOR', 'green'),
        help='base color of the output(default=green)'
    )
    parser.add_argument(
        '-u',
        '--updates_available_color',
        default = _default('UPDATE_COLOR', 'yellow'),
        help='color of the output, when updates are available(default=yellow)'
    )
    parser.add_argument(
        '-a',
        '--aur',
        action = 'store_const',
        const = True,
        default = _default('AUR', 'False', strbool),
        help='Include AUR packages. Attn: Yaourt must be installed'
    )
    parser.add_argument(
        '-y',
        '--aur_yay',
        action = 'store_const',
        const = True,
        default = _default('AUR_YAY', 'False', strbool),
        help='Include AUR packages. Attn: Yay must be installed'
    )
    parser.add_argument(
        '-q',
        '--quiet',
        action = 'store_const',
        const = True,
        default = _default('QUIET', 'False', strbool),
        help = 'Do not produce output when system is up to date'
    )
    parser.add_argument(
        '-w',
        '--watch',
        nargs='*',
        default = _default('WATCH', arg_type=strlist),
        help='Explicitly watch for specified packages. '
        'Listed elements are treated as regular expressions for matching.'
    )
    return parser.parse_args


def get_updates:
    output = ''
    try:
        output = check_output(['checkupdates']).decode('utf-8')
    except subprocess.CalledProcessError as exc:
        # checkupdates exits with 2 and no output if no updates are available.
        # we ignore this case and go on
        if not (exc.returncode == 2 and not exc.output):
            raise exc
    if not output:
        return 

    updates = [line.split(' ')[0]
               for line in output.split('\n')
               if line]

    return updates


def get_aur_yaourt_updates:
    output = ''
    try:
        output = check_output(['yaourt', '-Qua']).decode('utf-8')
    except subprocess.CalledProcessError as exc:
        # yaourt exits with 1 and no output if no updates are available.
        # we ignore this case and go on
        if not (exc.returncode == 1 and not exc.output):
            raise exc
    if not output:
        return 

    aur_updates = [line.split(' ')[0]
                   for line in output.split('\n')
                   if line.startswith('aur/')]

    return aur_updates

def get_aur_yay_updates:
    output = check_output(['yay', '-Qua']).decode('utf-8')
    if not output:
        return 

    aur_updates = [line.split(' ')[0] for line in output.split('\n') if line]

    return aur_updates


def matching_updates(updates, watch_list):
    matches = set
    for u in updates:
        for w in watch_list:
            if re.match(w, u):
                matches.add(u)

    return matches


label = os.environ.get("LABEL","")
message = "{0}{2}"
args = create_argparse

updates = get_updates
if args.aur:
    updates += get_aur_yaourt_updates
elif args.aur_yay:
    updates += get_aur_yay_updates

update_count = len(updates)
if update_count > 0:
    if update_count == 1:
      info = str(update_count) + ' update available'
      short_info = str(update_count) + ' update'
    else:
      info = str(update_count) + ' updates available'
      short_info = str(update_count) + ' updates'

    matches = matching_updates(updates, args.watch)
    if matches:
        info += ' [{0}]'.format(', '.join(matches))
        short_info += '*'
    print(message.format(label, args.updates_available_color, info))
    print(message.format(label, args.updates_available_color, short_info))
elif not args.quiet:
    print(message.format(label, args.base_color, 'system up to date'))
           

儲存更改并從文本編輯器中退出。

現在,使用以下指令将此檔案設定為可執行:

sudo chmod +x ~/.config/scripts/arch-update
           

接下來,打開 i3blocks 配置檔案:

nano ~/.config/i3blocks/i3blocks.conf
           

并将以下内容粘貼到所需的位置:

[arch-update]
command=/home/$USER/.config/scripts/arch-update
interval=3600
markup=pango
LABEL=
           

儲存更改并重新加載 i3 視窗管理器,它将顯示需要更新的軟體包數量。

如果你正在使用 Ubuntu,你可以 按照 GitHub 頁面上的說明進行操作。

添加音量訓示塊

添加音量訓示塊需要一些努力,因為你希望它的行為符合預期。你需要實作以下功能:

  • 使用媒體控制鍵管理音量的鍵綁定
  • 添加一個訓示音量的音量塊

但要做到這一點,首先你需要安裝一些依賴項。

如果你使用的是 Arch Linux,請使用以下指令:

sudo pacman -S pulseaudio-alsa pulseaudio-bluetooth pulseaudio-equalizer pulseaudio-jack alsa-utils playerctl
           

如果你使用的是 Ubuntu/Debian 系統,請使用以下指令:

sudo apt install pulseaudio-module-bluetooth pulseaudio-equalizer pulseaudio-module-jack alsa-utils playerctl
           

接下來,讓我們看看如何在 i3 視窗管理器中啟用媒體控制鍵。

首先,打開 i3 配置檔案:

nano ~/.config/i3/config
           

轉到檔案的末尾,并粘貼以下内容:

# Key bindings for Media control keys
bindsym XF86AudioPlay exec playerctl play
bindsym XF86AudioPause exec playerctl pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
           

現在,讓我們為此塊建立一個新檔案:

nano ~/.config/scripts/volume
           

然後粘貼以下内容:

#!/usr/bin/env bash
if [[ -z "$MIXER" ]] ; then
    MIXER="default"
    if command -v pulseaudio >/dev/null 2>&1 && pulseaudio --check ; then
        # pulseaudio is running, but not all installations use "pulse"
        if amixer -D pulse info >/dev/null 2>&1 ; then
            MIXER="pulse"
        fi
    fi
    [ -n "$(lsmod | grep jack)" ] && MIXER="jackplug"
    MIXER="${2:-$MIXER}"
fi
if [[ -z "$SCONTROL" ]] ; then
    SCONTROL="${BLOCK_INSTANCE:-$(amixer -D $MIXER scontrols |
                      sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" |
                      head -n1
                    )}"
fi

# The first parameter sets the step to change the volume by (and units to display)
# This may be in in % or dB (eg. 5% or 3dB)
if [[ -z "$STEP" ]] ; then
    STEP="${1:-5%}"
fi

NATURAL_MAPPING=${NATURAL_MAPPING:-0}
if [[ "$NATURAL_MAPPING" != "0" ]] ; then
    AMIXER_PARAMS="-M"
fi

#------------------------------------------------------------------------

capability { # Return "Capture" if the device is a capture device
  amixer $AMIXER_PARAMS -D $MIXER get $SCONTROL |
    sed -n "s/  Capabilities:.*cvolume.*/Capture/p"
}

volume {
  amixer $AMIXER_PARAMS -D $MIXER get $SCONTROL $(capability)
}
           

儲存更改并退出配置檔案。

接下來,打開 I3blocks 配置檔案:

nano ~/.config/i3blocks/i3blocks.conf
           

然後粘貼以下内容:

[volume]
command=/home/$USER/.config/scripts/volume
LABEL=♪
#LABEL=VOL 
interval=1
signal=10
#STEP=5%
MIXER=default
#SCONTROL=[determined automatically]
#NATURAL_MAPPING=0
           

儲存更改并重新加載 i3,從現在開始,音量快捷鍵将起作用,并且訓示器将按預期工作!

💡 如果遇到音頻/視訊不工作等問題,請使用此指令,它應該解決該問題:
systemctl --user disable --now pipewire.{socket,service} && systemctl --user mask pipewire.socket
           

添加 Spotify 塊

我将使用 firatakandere的腳本來添加此功能。在繼續之前,你可以先檢視一下該腳本。

首先,建立并打開一個用于 Spotify 塊的新檔案:

nano ~/.config/scripts/spotify.py
           

然後粘貼以下内容:

#!/usr/bin/python

import dbus
import os
import sys


try:
    bus = dbus.SessionBus
    spotify = bus.get_object("org.mpris.MediaPlayer2.spotify", "/org/mpris/MediaPlayer2")


    if os.environ.get('BLOCK_BUTTON'):
        control_iface = dbus.Interface(spotify, 'org.mpris.MediaPlayer2.Player')
        if (os.environ['BLOCK_BUTTON'] == '1'):
            control_iface.Previous
        elif (os.environ['BLOCK_BUTTON'] == '2'):
            control_iface.PlayPause
        elif (os.environ['BLOCK_BUTTON'] == '3'):
            control_iface.Next

    spotify_iface = dbus.Interface(spotify, 'org.freedesktop.DBus.Properties')
    props = spotify_iface.Get('org.mpris.MediaPlayer2.Player', 'Metadata')

    if (sys.version_info > (3, 0)):
        print(str(props['xesam:artist'][0]) + " - " + str(props['xesam:title']))
    else:
        print(props['xesam:artist'][0] + " - " + props['xesam:title']).encode('utf-8')
    exit
except dbus.exceptions.DBusException:
    exit
           

完成後,使用以下指令使其可執行:

sudo chmod +x ~/.config/scripts/spotify.py
           

現在,打開 I3blocks 配置檔案:

nano ~/.config/i3blocks/i3blocks.conf
           

然後粘貼以下内容(建議将其粘貼到塊的開頭):

[spotify]
label=
command=/home/$USER/.config/scripts/spotify.py
color=#81b71a
interval=5
           

儲存更改,退出配置檔案,并重新啟動 i3。

添加了我提到的塊後,狀态欄将如下所示:

你可以檢視我的主螢幕,其中包含這些塊(點選下方的圖檔檢視)。

桌面應用 | i3 視窗管理器終極定制指南
📋 如果你對那些預設塊(文檔和問候語)的位置感到困惑,我用了幾個注釋将它們禁用以實作所示的外觀!

在 Linux 中使用 i3gaps

如果你想在視窗之間添加間隙,可以使用

i3gaps

。在顔色方案之後,

i3gaps

是這個指南中最關鍵的元素。

要使用間隙,你必須對 i3 配置檔案進行一些更改。

打開 i3 配置檔案:

nano ~/.config/i3/config
           

轉到檔案的末尾,并粘貼以下内容:

# default gaps
gaps inner 15
gaps outer 5

# gaps
set $mode_gaps Gaps: (o)uter, (i)nner, (h)orizontal, (v)ertical, (t)op, (r)ight, (b)ottom, (l)eft
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_horiz Horizontal Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_verti Vertical Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_top Top Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_right Right Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_bottom Bottom Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_left Left Gaps: +|-|0 (local), Shift + +|-|0 (global)
bindsym $mod+Shift+g mode "$mode_gaps"

mode "$mode_gaps" {
        bindsym o      mode "$mode_gaps_outer"
        bindsym i      mode "$mode_gaps_inner"
        bindsym h      mode "$mode_gaps_horiz"
        bindsym v      mode "$mode_gaps_verti"
        bindsym t      mode "$mode_gaps_top"
        bindsym r      mode "$mode_gaps_right"
        bindsym b      mode "$mode_gaps_bottom"
        bindsym l      mode "$mode_gaps_left"
        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}

mode "$mode_gaps_outer" {
        bindsym plus  gaps outer current plus 5
        bindsym minus gaps outer current minus 5
        bindsym 0     gaps outer current set 0

        bindsym Shift+plus  gaps outer all plus 5
        bindsym Shift+minus gaps outer all minus 5
        bindsym Shift+0     gaps outer all set 0

        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_inner" {
        bindsym plus  gaps inner current plus 5
        bindsym minus gaps inner current minus 5
        bindsym 0     gaps inner current set 0

        bindsym Shift+plus  gaps inner all plus 5
        bindsym Shift+minus gaps inner all minus 5
        bindsym Shift+0     gaps inner all set 0

        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_horiz" {
        bindsym plus  gaps horizontal current plus 5
        bindsym minus gaps horizontal current minus 5
        bindsym 0     gaps horizontal current set 0

        bindsym Shift+plus  gaps horizontal all plus 5
        bindsym Shift+minus gaps horizontal all minus 5
        bindsym Shift+0     gaps horizontal all set 0

        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_verti" {
        bindsym plus  gaps vertical current plus 5
        bindsym minus gaps vertical current minus 5
        bindsym 0     gaps vertical current set 0

        bindsym Shift+plus  gaps vertical all plus 5
        bindsym Shift+minus gaps vertical all minus 5
        bindsym Shift+0     gaps vertical all set 0

        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_top" {
        bindsym plus  gaps top current plus 5
        bindsym minus gaps top current minus 5
        bindsym 0     gaps top current set 0

        bindsym Shift+plus  gaps top all plus 5
        bindsym Shift+minus gaps top all minus 5
        bindsym Shift+0     gaps top all set 0

        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_right" {
        bindsym plus  gaps right current plus 5
        bindsym minus gaps right current minus 5
        bindsym 0     gaps right current set 0

        bindsym Shift+plus  gaps right all plus 5
        bindsym Shift+minus gaps right all minus 5
        bindsym Shift+0     gaps right all set 0

        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_bottom" {
        bindsym plus  gaps bottom current plus 5
        bindsym minus gaps bottom current minus 5
        bindsym 0     gaps bottom current set 0

        bindsym Shift+plus  gaps bottom all plus 5
        bindsym Shift+minus gaps bottom all minus 5
        bindsym Shift+0     gaps bottom all set 0

        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
mode "$mode_gaps_left" {
        bindsym plus  gaps left current plus 5
        bindsym minus gaps left current minus 5
        bindsym 0     gaps left current set 0

        bindsym Shift+plus  gaps left all plus 5
        bindsym Shift+minus gaps left all minus 5
        bindsym Shift+0     gaps left all set 0

        bindsym Return mode "$mode_gaps"
        bindsym Escape mode "default"
}
           

儲存更改并退出配置檔案。

使用

Mod + Shift + r

重新加載 i3,并會看到視窗之間的間隙:

桌面應用 | i3 視窗管理器終極定制指南

但是,如果你想調整間隙的大小怎麼辦?這非常簡單,隻需要簡單的步驟即可完成:

  • 按下

    Mod + Shift + g

    進入間隙模式
  • 使用給定的選項選擇要更改的内容
  • 使用

    +

    -

    增加/減小間隙
  • 完成後,按

    Esc

    鍵退出間隙模式

就是這樣!

我們忘記自定義終端了嗎?

不用擔心;你可以 切換到 Zsh,這是一個不同的 shell,使終端看起來與衆不同,或者探索一些鮮為人知的Linux Shell。

無論如何,你都可以 自定義現有終端,或選擇不同的終端模拟器。

我希望你不再畏難如何美化系統!😎

如果你有任何建議或想展示你的配置,請在評論部分留言。

(題圖:MJ/2874542d-6a8f-4b27-8e65-477389a0dcca)

via: https://itsfoss.com/i3-customization/

作者:Sagar Sharma選題:lkxed譯者:ChatGPT 校對:wxy

本文由 LCTT原創編譯,Linux中國榮譽推出

繼續閱讀