Skip to content

FR: headless Linux 伺服器上支援 GITHUB_TOKEN 環境變數作為 keyring 降級方案 #336

Description

@saileri

問題描述

在無桌面環境(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 令牌,依賴鏈為:

keyringdbus-secret-service → DBus session bus → gnome-keyring-daemongcr-prompter(GTK 彈窗)

在 headless 伺服器上:

  • 沒有 X11 display,gcr-prompter 無法彈出解鎖對話框
  • 即使裝了 xvfb 模擬顯示器,仍需要自動化點擊對話框,整套方案又重又脆(需額外安裝 ~200MB 依賴:gnome-keyringxvfbxdotool 等)

建議方案

當 keyring 不可用時,降級讀取環境變數 GITHUB_TOKEN(以及 GH_TOKENGIT_TOKEN),這是業界標準做法。多個主流工具都支援此模式:

  • GitHub CLI (gh):GITHUB_TOKEN / GH_TOKEN
  • Claude Code / Codex / Hermes Agent:GITHUB_TOKEN
  • Git:GITHUB_TOKEN + credential helper

預期行為

  1. 嘗試 keyring 存儲 → 失敗
  2. 檢查 GITHUB_TOKEN 環境變數 → 如有則用於 API 認證
  3. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions