問題描述
在無桌面環境(headless)的 Linux 伺服器上,透過 Web UI 設定 → 版本控制 → 添加 GitHub 帳號時失敗。
錯誤訊息
keyring set 錯誤:平台安全存儲失敗:DBus 錯誤:無法在沒有 X11 $DISPLAY的情況下自動啟動 dbus-daemon
根因分析
codeg-server v0.20.2 使用 Rust keyring crate(v3.6.3)的 secret-service 後端存儲 GitHub 令牌,依賴鏈為:
keyring → dbus-secret-service → DBus session bus → gnome-keyring-daemon → gcr-prompter(GTK 彈窗)
在 headless 伺服器上:
- 沒有 X11 display,
gcr-prompter 無法彈出解鎖對話框
- 即使裝了
xvfb 模擬顯示器,仍需要自動化點擊對話框,整套方案又重又脆(需額外安裝 ~200MB 依賴:gnome-keyring、xvfb、xdotool 等)
建議方案
當 keyring 不可用時,降級讀取環境變數 GITHUB_TOKEN(以及 GH_TOKEN、GIT_TOKEN),這是業界標準做法。多個主流工具都支援此模式:
- GitHub CLI (
gh):GITHUB_TOKEN / GH_TOKEN
- Claude Code / Codex / Hermes Agent:
GITHUB_TOKEN
- Git:
GITHUB_TOKEN + credential helper
預期行為
- 嘗試 keyring 存儲 → 失敗
- 檢查
GITHUB_TOKEN 環境變數 → 如有則用於 API 認證
- GitHub 帳號仍顯示在「版本控制」頁面(username 可通過
/user API 獲取)
環境資訊
- OS:Ubuntu 26.04(headless,無桌面環境)
- codeg-server:v0.20.2
- 安裝方式:手動部署(非 Docker)
DBUS_SESSION_BUS_ADDRESS:未設置(無用戶會話)
補充
目前可通過以下 workaround 正常使用 GitHub 功能(但 UI 上不顯示帳號):
# gh CLI 正常
gh auth status # ✅
# git 正常(通過 credential helper)
git ls-remote https://github.com/user/repo.git # ✅
# 環境變數已設置但 codeg 未讀取
export GITHUB_TOKEN=ghp_xxx
問題描述
在無桌面環境(headless)的 Linux 伺服器上,透過 Web UI 設定 → 版本控制 → 添加 GitHub 帳號時失敗。
錯誤訊息
根因分析
codeg-server v0.20.2 使用 Rust
keyringcrate(v3.6.3)的secret-service後端存儲 GitHub 令牌,依賴鏈為:keyring→dbus-secret-service→ DBus session bus →gnome-keyring-daemon→gcr-prompter(GTK 彈窗)在 headless 伺服器上:
gcr-prompter無法彈出解鎖對話框xvfb模擬顯示器,仍需要自動化點擊對話框,整套方案又重又脆(需額外安裝 ~200MB 依賴:gnome-keyring、xvfb、xdotool等)建議方案
當 keyring 不可用時,降級讀取環境變數
GITHUB_TOKEN(以及GH_TOKEN、GIT_TOKEN),這是業界標準做法。多個主流工具都支援此模式:gh):GITHUB_TOKEN/GH_TOKENGITHUB_TOKENGITHUB_TOKEN+ credential helper預期行為
GITHUB_TOKEN環境變數 → 如有則用於 API 認證/userAPI 獲取)環境資訊
DBUS_SESSION_BUS_ADDRESS:未設置(無用戶會話)補充
目前可通過以下 workaround 正常使用 GitHub 功能(但 UI 上不顯示帳號):