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/bashset -eLLAMA_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 目前未執行。"ficd "$LLAMA_DIR"echo ""echo "------------------------------------------------"echo "🔍 [2/4] 比對 GitHub 遠端版本..."echo "------------------------------------------------"git fetch originLOCAL_HASH=$(git rev-parse HEAD)REMOTE_HASH=$(git rev-parse @{u})NEED_BUILD=0if [ "$LOCAL_HASH" != "$REMOTE_HASH" ]; then echo "🚀 發現新版本!" echo " 本地 Hash: ${LOCAL_HASH:0:7}" echo " 遠端 Hash: ${REMOTE_HASH:0:7}" echo "正在拉取最新原始碼..." git pull NEED_BUILD=1else echo "✅ 當前已是最新版本 (${LOCAL_HASH:0:7}),無需重新編譯!"fiecho ""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 "⏩ 跳過編譯,直接使用現有極致優化二進制檔。"fiecho ""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



