CachyOS 筆記

CachyOS 是基於 Arch Linux 的效能導向發行版。它最大特色在於官方預設提供了針對 x86-64-v3 / v4 微架構進行極致優化的套件庫,並搭配客製化的 BORE / EEVDF CPU 調度器 Kernel。對於需要執行本地大語言模型(LLM)、高負載 AI 計算與日常開發的使用者來說,能帶來非常優異的硬體調度與系統回應速度。

本文記錄了從系統基礎設定、常見開機錯誤排除、音效與桌面軟體優化,到建置原生 CUDA ⁠llama.cpp⁠ 自動編譯服務的全流程筆記。

1. 防火牆設定 (ufw)

CachyOS 預設啟用 ⁠ufw⁠ 防火牆,可透過 GUI 介面進行簡單的規則管理:

 路徑:⁠系統設定⁠ -> ⁠防火牆設定⁠

2. 中文輸入法配置 (Fcitx5)

系統安裝完成後需自行補齊中文輸入法框架與相關模組:

安裝步驟:

可在 CachyOS Package Installer (或開機選單 ⁠CachyOS Hello⁠ -> ⁠Install Apps⁠) 中的 Repo 頁籤安裝,或透過 Pacman 安裝以下套件:

 ⁠fcitx5⁠(輸入法核心)

 ⁠fcitx5-configtool⁠(圖形化設定工具)

 ⁠fcitx5-qt⁠ & ⁠fcitx5-gtk⁠(跨 GUI 框架相容模組)

 ⁠fcitx5-chewing⁠(酷音輸入法)

設定環境變數:

編輯 ⁠/etc/environment⁠ 加入以下變數,確保 Chrome、Firefox 及各類應用程式皆能順利喚起輸入法:

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

3. Firefox 控制台語音合成 (Speech Synthesis) 報錯排除

 症狀:開啟 Firefox 或透過 Terminal 啟動時,控制台頻繁拋出與 Web Speech API / ⁠speech-dispatcher⁠ 相關的連線錯誤訊息。

 原因:Firefox 預設具備語音合成功能,在 Linux 底層依賴 ⁠speech-dispatcher⁠ 服務,但系統預設未安裝該套件。

 修復方式:

 GUI:開啟 CachyOS Package Installer -> Repo -> 搜尋並安裝 ⁠speech-dispatcher⁠。

4. 音效設定優化:切換至 Pro Audio (專業音訊) 模式

 建議設定:開啟 ⁠系統設定⁠ -> ⁠聲音 (Sound)⁠ -> 點擊預設音訊裝置,將設定檔 (Profile) 從預設的 ⁠Analog Stereo Duplex⁠ 改為 ⁠Pro Audio⁠。

 優化效益:

 直通原生通道:繞過 PipeWire 預設軟體混音器與強制重採樣,保留最純淨的音訊訊號與動態範圍。

 降低系統延遲:配合 PipeWire/JACK 特性,顯著降低音訊緩衝時間。

 解鎖完整硬體 I/O:避免系統誤判通道,能完整抓取音效卡的所有實體輸入與輸出節點(如 Line-in 或指定麥克風)。

5. Docker 環境配置(免重開機與免 sudo)

可以在 CachyOS Package Installer -> Popular Applications -> Development -> docker 完成安裝。

免重開機啟用服務與權限設定:

安裝完成後無需重開機,透過以下指令直接啟動並賦予使用者權限:

# 立即啟用並啟動 Docker 服務
sudo systemctl enable --now docker

# 將目前使用者加入 docker 群組 (免 sudo 執行 docker 命令)
sudo usermod -aG docker $USER

(設定完成後執行 ⁠newgrp docker⁠ 或重新登入即可生效)

6. 開機 [FAIL] 錯誤排除與 NVIDIA CUDA 系統底層優化

剛安裝完 CachyOS 時,開機流程中可能會出現紅色的 ⁠[FAIL]⁠ 警告,可透過以下方式一一排除:

🔹 錯誤一:⁠systemd-vconsole-setup⁠ 報錯

  • 症狀:開機顯示 ⁠Failed to start Virtual Console Setup⁠
  • 原因:安裝時若地區選擇台灣,系統常自動設為 ⁠KEYMAP=tw⁠,但 Kernel 控制台無此映射檔
  • 修復方式:
    編輯 ⁠/etc/vconsole.conf⁠:
sudo nano /etc/vconsole.conf

將內容修改為:

KEYMAP=us

🔹 錯誤二:NVIDIA 模組與 CUDA 未及時載入 (Early KMS 設定)

 症狀:⁠systemd-modules-load.service⁠ 報錯,或是啟動 AI 服務時抓不到 CUDA 裝置。

 原因:NVIDIA 驅動(特別是 CUDA 必要的 ⁠nvidia_uvm⁠ 統一記憶體模組)載入時間點過晚,未包含在開機初始化的 initramfs 中。

 修復方式 (設定 Early KMS):

1. 編輯 ⁠/etc/mkinitcpio.conf⁠:

2. 在 ⁠MODULES=(…)⁠ 中加入 NVIDIA 核心模組:

3. 重新編譯 initramfs 映像檔:

7. llama.cpp 原生 CUDA 極致編譯與自動更新啟動腳本

如果使用 NVIDIA 顯示卡,請勿使用 CachyOS Package Installer 預設提供包,因為預設版本通常使用 Vulkan 後端連線,無法完全發揮 CUDA 的計算能力與 VRAM 換頁效率。

請透過 Git 取得最新原始碼並進行本機原生編譯。以下是針對 AMD 5600G + NVIDIA RTX 3050 環境所調校的自更新與模型啟動腳本 (⁠llama-server.sh⁠):

自動化腳本特色:

1. 安全釋放 VRAM:優先發送 ⁠SIGINT⁠ (Ctrl+C) 訊號讓 ⁠llama-server⁠ 正常釋放顯存,超時才執行 ⁠SIGKILL⁠。

2. 智慧比對編譯:透過 Git Hash 比對,僅在 GitHub 遠端有版號更新時才觸發 CMake 編譯。

3. 原生 CUDA 效能優化:指定 ⁠-DCMAKE_CUDA_ARCHITECTURES=86⁠ 鎖定 Ampere 架構,開啟 ⁠Flash Attention⁠ 與 unified KV cache。

⁠llama-server.sh⁠ 完整代碼:

#!/usr/bin/bash
set -e
LLAMA_DIR="/home/brassaikao/llama.cpp"
PROCESS_NAME="llama-server"
echo "------------------------------------------------"
echo "🤖 [1/4] 檢查服務狀態..."
echo "------------------------------------------------"
if pgrep -x "$PROCESS_NAME" > /dev/null; then
echo "⚠️ 偵測到 $PROCESS_NAME 正在執行中,正在自動優雅關閉..."
# 發送 SIGINT (Ctrl+C 訊號) 讓 llama-server 釋放 VRAM 並正常關閉
pkill -2 -x "$PROCESS_NAME" || true
# 最多等待 15 秒,確保程序完全釋放
WAIT_COUNT=0
while pgrep -x "$PROCESS_NAME" > /dev/null; do
sleep 1
WAIT_COUNT=$((WAIT_COUNT+1))
if [ $WAIT_COUNT -ge 15 ]; then
echo "⚡ 等待超時,強制終止程序 (SIGKILL)..."
pkill -9 -x "$PROCESS_NAME" || true
break
fi
done
echo "✅ 舊服務已順利關閉,VRAM 已釋放!"
else
echo "ℹ️ $PROCESS_NAME 目前未執行。"
fi
cd "$LLAMA_DIR"
echo ""
echo "------------------------------------------------"
echo "🔍 [2/4] 比對 GitHub 遠端版本..."
echo "------------------------------------------------"
git fetch origin
LOCAL_HASH=$(git rev-parse HEAD)
REMOTE_HASH=$(git rev-parse @{u})
NEED_BUILD=0
if [ "$LOCAL_HASH" != "$REMOTE_HASH" ]; then
echo "🚀 發現新版本!"
echo " 本地 Hash: ${LOCAL_HASH:0:7}"
echo " 遠端 Hash: ${REMOTE_HASH:0:7}"
echo "正在拉取最新原始碼..."
git pull
NEED_BUILD=1
else
echo "✅ 當前已是最新版本 (${LOCAL_HASH:0:7}),無需重新編譯!"
fi
echo ""
echo "------------------------------------------------"
echo "⚙️ [3/4] 編譯階段..."
echo "------------------------------------------------"
if [ $NEED_BUILD -eq 1 ]; then
echo "正在進行本機 CUDA (AMD 5600G, RTX 3050) 極致原生編譯..."
export PATH=/opt/cuda/bin:$PATH
export CUDA_PATH=/opt/cuda
export CC=gcc
export CXX=g++
cmake -B build \
-DGGML_CUDA=ON \
-DGGML_NATIVE=ON \
-DGGML_CUDA_FA_ALL_QUANTS=ON \
-DCMAKE_CUDA_ARCHITECTURES=86 \
-DCUDAToolkit_ROOT=/opt/cuda \
-DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j $(nproc)
echo "🎉 編譯成功!"
else
echo "⏩ 跳過編譯,直接使用現有極致優化二進制檔。"
fi
echo ""
echo "------------------------------------------------"
echo "🚀 [4/4] 啟動最新版 llama-server..."
echo "------------------------------------------------"
./build/bin/llama-server \
-m /home/brassaikao/ai-models/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ4_NL.gguf \
--mmproj /home/brassaikao/ai-models/mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf \
--alias Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ4_NL \
-np 1 -t 6 -tb 6 \
--flash-attn on \
--image-min-tokens 1024 \
--load-mode none \
--port 8080 \
--host 172.17.0.1 \
--kv-unified \
-c 131072 \
--jinja \
--cont-batching \
--reasoning-preserve

留言

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.