透過 SSH X11 轉發時,GUI 應用程式無法啟動
依照上一篇文章的步驟建立了 SSH X11 轉發環境,xeyes 順利顯示在 Windows 端。然而 nautilus 卻怎麼都啟動不了。這是一篇記錄「明明 DISPLAY 已經正常運作,為什麼偏偏這個應用程式會當掉」的排查過程。
依照上一篇文章的步驟建立了 SSH X11 轉發環境,xeyes 順利顯示在 Windows 端。然而 nautilus 卻怎麼都啟動不了。這是一篇記錄「明明 DISPLAY 已經正常運作,為什麼偏偏這個應用程式會當掉」的排查過程。
這台 Fedora 43 Server 既沒有安裝 X 伺服器,也沒有安裝桌面環境。現在想從這台機器把 GUI 應用程式顯示到 Windows 電腦上。這是一篇不安裝桌面環境,改用 SSH X11 轉發只傳送「單一應用程式」的紀錄。
為了讓自家 LAN 的名稱解析更快、同時封鎖廣告,架設了一台 DNS 伺服器。上游使用 Cloudflare 的 1.1.1.1。沒有使用 Pi-hole,而是用機器上早已安裝好的輕量 dnsmasq 就完成了整套設定。這篇記錄了整個過程,包括踩到的 SELinux 問題。
本文整理了將 document.tex(採用 ltjsarticle 文件類別,以 LuaTeX-ja 為前提)以 LuaLaTeX 轉換成 PDF 所需的環境建置步驟。以 Windows + winget 為前提。
為了應付想把 Markdown 撰寫的文件轉換成 Word (docx) 的情境,打造了完全在瀏覽器內完成作業的編輯器「DOC」。內文不會傳送到伺服器,轉換作業也全部在瀏覽器內完成。
「docx 說到底不就是 zip 嗎? 那把 XML 壓成 zip 再改個副檔名,不就變成 docx 了?」
抱著這個想法實際試了一下,結果理所當然地失敗了。docx 並不「只是」zip 而已,zip 裡的內容必須遵循一套固定的封裝結構,也就是 OOXML (Office Open XML)。既然都動手了,就順便實際驗證一下,到底要做到什麼程度才能做出貨真價實的 docx。
在嘗試透過 myhost.local (mDNS) 存取同一區域網路內的 Fedora Server 時,遇到了唯獨名稱解析失敗的狀況。透過 tcpdump 直接觀察封包進行排查後,發現原因是 firewalld 封鎖了 mDNS 的傳入流量。
使用 Stable Diffusion 生成圖片的方法有很多種,但 Web UI 類型的工具往往需要建置 Python 環境、管理相依套件,過程相當繁瑣。
想要更簡單、只要下載安裝程式就能使用的桌面應用程式,於是從零開始開發了 Sodalite。
透過 OpenRouter,無論是 Claude、GPT、Gemini 這類封閉模型,還是源自中國的開源權重模型, 都能自由切換使用。不過「到底該選哪一個」還是常常讓人猶豫,這次就大致比較了一下主要模型的 價格與實力。
先從最重量級的價格開始看。

可以看到,Claude Fable 5 貴得驚人(輸出每 1M token $50),而 DeepSeek V4 Pro 的輸出 僅需 $0.87。即使同樣掛著「Pro」的名號,價差竟然超過 50 倍。開源陣營(綠色標籤)全面 偏低價,一目瞭然。
再來看看中量級和輕量級。

到了輕量級,GPT-5 nano 的輸出價格僅 $0.40,幾乎達到「隨便用」的等級。若只是做簡單的 分類作業或草稿生成,這個等級往往就綽綽有餘。
單看價格,容易讓人覺得「便宜的模型性能應該也差」,但實際上並非如此。這裡先不分等級, 把價格與 Intelligence Index 分數都齊全的 20 個模型彙整成一張圖。盡量涵蓋了 GPT、Gemini、 Qwen、Llama、Gemma、Mistral 等眾多模型,不分開源或封閉。

縱軸是「Intelligence Index」這項綜合能力分數(詳見後述)。虛線連接的「性價比前緣」由 跨越 Nano、Mid、Pro 三個等級的 7 個模型構成:Gemma 3 27B → DeepSeek V4 Flash → DeepSeek V4 Pro → Kimi K2.6 → Gemini 3.1 Pro → Claude Opus 4.8 → Claude Fable 5。 DeepSeek V4 Pro 輸出價格僅 $0.87,分數卻逼近 Gemini 3.1 Pro($12.00),實質上已成為 性價比的起點,一枝獨秀。另一方面,位於前緣內側的 Qwen3.7 Max、MiniMax M3、GLM 5.2、 Claude Sonnet 5、Gemini 3 Flash、Grok 4.20、Claude Haiku 4.5、Gemini 3.1 Flash-Lite、 Qwen3-Coder、Mistral Large 3、Llama 4 Maverick、Llama 4 Scout 等模型,相較同價位的其他 模型,實力則略顯遜色。
若重視性價比,不妨先從最便宜的位置開始嘗試。
再來看看綜合能力與程式撰寫能力的排名。

第一張圖的「綜合能力」,是第三方基準測試機構 Artificial Analysis Intelligence Index 的分數;第二張圖的「程式撰寫能力」,是 SWE-bench Verified 的分數,這項測試衡量的是 模型能解決多少實際存在的軟體錯誤修復課題。兩者都不是模型廠商的自我申報,而是由外部評測 網站實際測量並公布的數值。
在綜合能力上,Claude Fable 5 以領先 GPT-5.5 約 5 分的成績奪冠,Claude Opus 4.8、 GPT-5.5、Gemini 3.1 Pro 則以些微差距緊隨其後。僅看程式撰寫能力的話,Claude Fable 5 更是以 95% 的分數一枝獨秀。有趣的是,緊追在後的開源模型 DeepSeek V4 Pro,居然能與 封閉陣營並駕齊驅。
開源權重模型由於內部公開,因此也能得知其參數量(模型規模)。長條圖中深綠色部分是實際 推理時使用的「活性化參數」,淺綠色則是 MoE(Mixture of Experts)架構下,當下未被使用的 其餘專家部分。

DeepSeek V4 Pro 以總計 1.6 兆參數居冠,但實際運行時只使用其中的 490 億(得益於 MoE 機制)。規模雖大卻能輕快運行,正是重點所在。圖中唯獨 Gemma 3 27B 的長條全為深綠色, 這是因為它並非 MoE,而是每次都會用到全部參數的「dense(密集)」架構。密集模型的總參數量 等於活性化參數量,因此與 MoE 陣營相比,其規模比較的意義略有不同,需特別留意。
由於價格與排名的變動速度都很快,實際使用前別忘了到 openrouter.ai/models 確認最新資訊。
本文所使用的基準測試分數,來源如下。兩者皆為獨立於模型廠商之外的第三方評測網站所測量並 公布的數值。
另外,Kimi K2.6 / Qwen3.7 Max 的 SWE-bench Verified 分數在不同資料來源間存在近似值混雜的 情形,故僅作為參考值處理。
Claude Code CLI(claude)不只能用 Anthropic 原生模型,透過 OpenRouter 提供的
Anthropic Messages API 相容端點(「Anthropic Skin」),也能讓任意模型作為後端運作。這次我
嘗試了將對話主模型設為 z-ai/glm-5.2、標題產生等輕量背景任務用的模型設為
z-ai/glm-4.7-flash 的設定,這裡整理一下作法。
參考: https://openrouter.ai/docs/cookbook/coding-agents/claude-code-integration
$env:OPENROUTER_API_KEY。claude.ai 帳號登入 Claude Code,只要有透過環境變數的驗證,就會優先採用該方式。
此時會出現 ⚠ claude.ai connectors are disabled ... 的警告,但不影響實際運作。| 變數 | 值 | 備註 |
|---|---|---|
ANTHROPIC_BASE_URL | https://openrouter.ai/api | OpenRouter 的 Anthropic 相容端點 |
ANTHROPIC_AUTH_TOKEN | OpenRouter 的 API 金鑰 | 以 Authorization: Bearer 傳送 |
ANTHROPIC_API_KEY | ""(明確設為空字串) | 若未設定或非空,驗證方式會衝突而導致錯誤 |
ANTHROPIC_MODEL | z-ai/glm-5.2 | 主要對話模型。直接指定 OpenRouter 上的模型 ID |
ANTHROPIC_SMALL_FAST_MODEL | z-ai/glm-4.7-flash | 用於標題產生等輕量背景任務的子模型 |
ANTHROPIC_MODEL 只控制主要對話模型。Claude Code 內部用於標題產生、
auto-mode 判斷等輕量、高速任務的子模型,則由 ANTHROPIC_SMALL_FAST_MODEL 指定。
只要設定這個變數,就能確實切換輕量任務所使用的模型。
在儲存庫的 .claude/settings.local.json 中設定如下內容。
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_API_KEY": "",
"ANTHROPIC_MODEL": "z-ai/glm-5.2",
"ANTHROPIC_SMALL_FAST_MODEL": "z-ai/glm-4.7-flash"
}
}
ANTHROPIC_AUTH_TOKEN(機密資訊)不要寫入檔案,而是在 shell 端由
OPENROUTER_API_KEY 提供。只要在 PowerShell 設定檔($PROFILE)中加入以下內容一次,
之後每次開啟 shell 都會自動設定完成。
$env:ANTHROPIC_AUTH_TOKEN = $env:OPENROUTER_API_KEY
bash/zsh 的情況,則在 ~/.bashrc 或 ~/.zshrc 中加入:
export ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY"
在此狀態下於此目錄中執行 claude -p "...",就會自動讀取
.claude/settings.local.json 的設定,讓主模型與子模型都透過 OpenRouter 運作。
不會影響其他專案中 Claude Code 的執行。
若不想修改 shell 設定檔,可以在執行時當場指定環境變數。
PowerShell:
$env:ANTHROPIC_BASE_URL = "https://openrouter.ai/api"
$env:ANTHROPIC_AUTH_TOKEN = $env:OPENROUTER_API_KEY
$env:ANTHROPIC_API_KEY = ""
$env:ANTHROPIC_MODEL = "z-ai/glm-5.2"
$env:ANTHROPIC_SMALL_FAST_MODEL = "z-ai/glm-4.7-flash"
claude -p "1+1は?"
bash:
ANTHROPIC_BASE_URL="https://openrouter.ai/api" \
ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY" \
ANTHROPIC_API_KEY="" \
ANTHROPIC_MODEL="z-ai/glm-5.2" \
ANTHROPIC_SMALL_FAST_MODEL="z-ai/glm-4.7-flash" \
claude -p "1+1は?"
若將上述變數持久化為 Windows 的使用者環境變數,任何終端機、任何專案都會預設透過 OpenRouter/GLM 運作。但這也會影響其他專案中原本打算使用一般 Claude(Anthropic) 的操作,因此除非確實想改變整體預設值,否則建議使用方法A/B。
以下指令確認回應內容及計費紀錄(modelUsage)中都記錄了 z-ai/glm-5.2。
claude -p "Reply with exactly: OK-GLM-TEST" --output-format json
{
"result": "OK-GLM-TEST",
"modelUsage": {
"z-ai/glm-5.2": { "inputTokens": 3272, "outputTokens": 8, "costUSD": 0.028336 }
}
}
此外,搭配 --debug all 執行稍長的提示詞後,也確認主模型與子模型的
派送實際上都有發生。
[API:timing] dispatching to firstParty model=z-ai/glm-4.7-flash
[API:timing] dispatching to firstParty model=z-ai/glm-5.2
針對單一提示詞,輕量任務正確地交由 z-ai/glm-4.7-flash 處理,正式回應則交由
z-ai/glm-5.2,模型的區分使用是正確的。
在互動式 claude 工作階段(無論是從 VS Code 開啟或直接在 TTY 上啟動)中,即使只是輕微
輸入,OpenRouter 的 Activity 紀錄中同一分鐘內就記錄了多達 13 次 API 呼叫。其中 12 次是
發送給子模型(GLM 4.7 Flash)的小型呼叫,只有最後 1 次是主模型(GLM 5.2)的正式回應。
總成本約在 $0.0094 以內。
另一方面,也確認了透過 claude -p(非互動、print 模式)的單次執行,幾乎不會發生這種
增生現象。若想壓低成本,使用 -p 較為安全。若經常使用互動式工作階段,建議設定
ANTHROPIC_SMALL_FAST_MODEL 讓請求流向便宜的模型,同時透過 OpenRouter 的
Activity 儀表板監控用量。
⚠ claude.ai connectors are disabled because ANTHROPIC_API_KEY or another auth source is set... 這個警告可以忽略(只是 claude.ai 的連接器功能被停用,API 呼叫本身仍會成功)。ANTHROPIC_API_KEY 未設定而非設為空字串,驗證方式可能會變得曖昧而導致錯誤。
務必明確設定為 ""。ANTHROPIC_MODEL 改為 OpenRouter 上的模型 ID
(例如:anthropic/claude-opus-4-8、openai/gpt-5 等)即可。ENABLE_TOOL_SEARCH)在非 Anthropic 主機上預設為停用。
如有需要,請加入 ENABLE_TOOL_SEARCH=true。