index

Arch Linux 手動微調

· 9min

安裝 Gnome Extensions

出現 No such native application org.gnome.chrome_gnome_shell 時,安裝:

sudo pacman -S gnome-browser-connector

有時會遇到 extension 不相容的問題,可以查看 gnome-shell 的版本:

gnome-shell --version

Niri Window Manager

一個操作方式相當神奇的平鋪式視窗(tiling window)的 wayland compositor。


sudo pacman -Syu niri xwayland-satellite xdg-desktop-portal-gnome xdg-desktop-portal-gtk alacritty dms-shell-niri matugen cava qt6-multimedia-ffmpeg

systemctl --user add-wants niri.service dms
  • --user 不需要 sudo 權限,屬個人帳號底下
  • add-wants A B 只要 A 程式被啟動,順便把 B 程式也一併叫醒

GTK / Qt(Widget Toolkits)

GUI 工具包主要被這兩大門派瓜分,GTK / Qt。

GTK (GIMP Toolkit)

GNOME 家族標配,像是 GNOME 桌面、Firefox、GIMP、還有 dms-shell-niri 也是

Qt

KDE 家族的標配,像是 KDE Plasma 桌面、VLC、OBS、以及上面裝的 qt6-multimedia-ffmpeg

XDG

X Desktop Group 的縮寫(現在更名為 Freedesktop.org),是一個標準制定委員會,制定了一套全 Linux 通用的標準,可以相同的 API 來控制 GUI 介面,不論是 GTK 還是 Qt。

以 wayland 使用下為例,當 Firefox 想要開啟「檔案選單」時……

  • Firefox:依照 XDG 標準,我要申請開一個檔案選單
  • xdg-desktop-portal:收到請求,轉交 xdg-desktop-portal-gnome
  • xdg-desktop-portal-gnome gnome 的檔案選取視窗

Wayland / Xorg (Display Server or Protocol)

xorg 與 wayland 通稱都叫圖像的通訊協議(communication protocol),它標準化了應用程式和桌面環境如何跟「顯示卡」通訊,包含內顯。

note

嚴格來說是規定了應用程式(Client)如何跟顯示伺服器(Server / Compositor)溝通,再由伺服器整合畫面後丟給內顯/獨顯驅動。

例如說 google chrome 被開起來,就會藉由這個協議告訴顯卡「我要開啟 chrome」,裡面的內容是個網站,有個頁籤,高 10 個像素……但重點是,它只是一個協議,或是想像成一張對照表,實際上要怎麼運作還是得靠其他部份的協作才能達成

既然是主要與顯示卡溝通,那麼溝通的方式與品質以及雙方的問題都會左右使用者的體驗。

Xorg

X 的出現比 Linux 還要早, X 基本上就是隨著 unix 的出現一起被造出來。當時計算機遠不如現在強大,硬體也只求終端機能夠顯示罷了,一個機台是多個螢幕多人共用。

為了應付這樣的需求誕生了 X 。

希望的就是顯示都交給一個共用的顯示用電腦去運算就好,所以才會有 X server / X client,但因為過於頻繁的交流與對接,導致相當高的延遲成為 X 的一大問題,多開可能因為效能下降產生時間差,也就是畫面撕裂。

wayland
wayland

現在說 X11(或稱 X11 Protocol)不是軟體名稱,也不是 Xorg 的版本號,它是這個圖像通訊協議的第 11 代規格說明書,最早由麻省理工學院(MIT)在 1984 年開發,就叫 X Window System,後來從 X1 滾動更新到了 X11,於 1987 年 9 月 X11 的核心規格定型後就再也沒大改版過……

Wayland

wayland 其實也是 x 維護者發起的,在 2010 年左右正式列入取代 x 的計畫。 在 wayland 叫 Client-Side Rendering (CSR),減少了來回溝通的流程,延遲低,且 client 各自獨立(同時也增加了安全性,但也導致 client 沒有看到其他視窗的權限)。

Client 自己用 CPU/GPU 把整個視窗的每一顆像素(buffer)在記憶體裡自己畫完,然後直接整塊給 wayland 顯示。

雖然表面上看起來 client 做的事變多了,但對於如今多數電腦都備有足夠 GPU(不論是內顯還是獨立顯卡) 的情況下,不必再如同 Xorg 在 client 和 server 間消耗 CPU 效能去複製和搬運記憶體。

wayland
wayland

也就是說,現在 wayland compositor 的工作其實相當於過去 display server + window manager + compositor 的功能。

Display Manager

早期多台機器共用一個中央伺服器,控制每個 Display(顯示終端)的帳號密碼與開啟各自的圖形視窗而稱為 Display Manager。

其實就是指圖形登入介面(Login Manager),當你開機、核心載入完畢後,DM 是第一個跳出來的圖形畫面(像是之前裝的 gdm),透過系統的 PAM 模組驗證你是不是本人。

輸入完密碼按下 Enter 後,DM 會去讀取系統裡的 /usr/share/wayland-sessions/ 資料夾,看看你這台電腦裝了哪些桌面。

NVIDIA Fix

Heap Reuse Quirk(記憶體堆積回收機制失效)問題,簡單來說, compositor 會去跟顯示卡申請一塊顯示記憶體(VRAM)來畫,照理上軟體關掉時,Niri 會把這塊 VRAM 釋放、還給顯示。

但這個 bug 是即使軟體關掉時 VRAM 繼續扣留,導致 niri 的 VRAM 用量大幅上升。對於 VRAM 較小的筆電有可能直接凍結。

如果非得使用 N 卡可參照:Nvidia - niri

Keybindings(內建)

  • Mod+O toggle-overview
  • Mod+U / Mod+I focus-workspace-down / up
  • Mod+Ctrl+U / Mod+Ctrl+I move-column-to-workspace-down / up
  • Mod+BracketLeft / Mod+BracketRight consume-or-expel-window-left / right
  • Mod+Comma / Mod+Period consume-window-into-column / expel-window-from-column
  • Mod+F maximize-column
  • Mod+Shift+F fullscrenn-window
  • Mod+M maximize-window-to-edges
  • Mod+V / Mod+Shift+V toggle-window-floating / switch-focus-between-floating-and-tililng
  • Mod+Minus / Mod+Equal set-column-width +-10%
  • Mod+Shift+Minus / Mod+Shift+Equal set-window-height +-10%

Window Rule / Layer Rule

  • Window Rule(普通視窗規則)即傳統意義上的應用程式視窗,像是 Firefox、Alacritty、Spotify……這些視窗是 Niri 的平鋪的主要對象。
  • Layer Rule(圖層規則)Wayland 把螢幕畫面切成了好幾層特殊的高度圖層(Layer-Shell),包含可能有系統通知框、鎖定畫面、DMS……

Transparent / Blur

如果需要使用透明背景,需取消 Client-Side Decorations(CSD),避免 client 自己負責把外框等畫出來,進而把外框的渲染交給 niri, 將以下取消註解:

prefer-no-csd

Blur 則參考 Window Effects - niri

DankMaterialShell

  • dsearch 原生檔案系統搜尋工具
# Check version
dsearch version

# Build initial index
dsearch index generate
  • dgop (Dank GO Process Status)系統監控工具

GTK Theme / Icon / Cursor

sudo pacman -S adw-gtk-theme

sudo pacman -S papirus-icon-theme

Alacritty

Links

NerdFont

sudo pacman -S ttf-jetbrains-mono-nerd
// or
sudo pacman -S ttf-firacode-nerd

確認一下:

fc-list : family | grep -i "jetbrains.*nerd"

Zsh

也是 MacOS 的預設 shell,主要在客製化方面有相當多的資源。

sudo pacman -S zsh

chsh -s /bin/zsh

一些熱門的插件:

sudo pacman -S zsh-syntax-highlighting zsh-autosuggestions

Starship

一個 shell 的裝飾性工具

Links

Tmux

Nvim

Links

需事先裝好:

sudo pacman -S cargo-binstall

cargo binstall tree-sitter-cli

echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
sudo pacman -S nodejs pnpm

pnpm add --save-dev --save-exact prettier

GDM

paru -S gdm-settings

References