Linux 上 Sober 出現「Gameplay Unavailable」:當 Flatpak 顯示「Nothing to do」,如何手動安裝新版 Flathub Build

Sober 顯示「Gameplay Unavailable」,但 Flatpak 更新卻說「Nothing to do」。本文記錄如何比對 Flathub build 與 commit、安裝較新的簽章套件,並恢復正常更新來源。 …

Linux 上 Sober 出現「Gameplay Unavailable」:當 Flatpak 顯示「Nothing to do」,如何手動安裝新版 Flathub Build

2026 年 11 月 5 日 · 技術筆記 · Linux / Flatpak / Sober / Roblox

有一天,Linux 電腦上的 Sober 突然無法啟動 Roblox。視窗顯示 「Gameplay Unavailable」,但照平常方式執行 Flatpak 更新,卻只得到 「Nothing to do」。追查之後,我發現 Flathub 其實已經建置好新版 Sober,只是 stable repository 還在提供舊版。手動安裝這個已有簽章的 build 後,Roblox 就恢復正常了。

這篇記錄整個排除問題的過程、判斷依據,以及實際使用的指令。我沒有自行從原始碼編譯 Sober,也沒有修改它的執行檔。 我只是安裝了一個由 Flathub 建置、但尚未進入一般 stable 更新管道的套件。

環境: Linux 桌面環境,Flatpak 系統層級安裝
應用程式: org.vinegarhq.Sober
顯示版本: 修復前後都是 1.8.0
問題:「Gameplay Unavailable」;一般 Flatpak 更新找不到新版本
結果: 手動安裝較新的 Flathub 簽章 build 後,Sober 成功啟動

具有時效性的替代方案: 本文的 build repository 與 commit 對應的是 2026 年 11 月 5 日這次事件。Flathub 的編號 build repository 並不是永久性的發布管道。請先嘗試一般 stable 更新;若已有新的 stable 版本,應優先使用。提早安裝尚未發布至 stable 的 build,不代表這是官方推薦的發布或安裝流程。

1. 問題:Sober 無法啟動 Roblox

從使用者的角度來說,問題很單純:原本能透過 Sober 玩的 Roblox,突然不能玩了。

我首先嘗試一般的 Flatpak 更新:

flatpak update --system -y org.vinegarhq.Sober

結果是:

Looking for updates…

Nothing to do.

正常來說,這表示已安裝的應用程式與目前設定的 repository 提供的版本一致。但 Sober 仍然無法啟動。

我接著檢查本機已安裝的套件,以及 Flathub 提供的版本:

flatpak info --system org.vinegarhq.Sober
flatpak remote-info --system flathub org.vinegarhq.Sober

兩者都還指向 10 月的舊 build。

我也重新整理 AppStream metadata,然後再試一次:

flatpak update --system --appstream flathub
flatpak update --system -y org.vinegarhq.Sober

結果依然沒有改變。

這裡有個關鍵差別:某個地方可能已經有可用的新 build,但如果目前設定的更新 repository 沒有提供它,Flatpak 就不會自動安裝。 更新 AppStream metadata,也不會讓尚未發布的 application commit 突然出現在 stable repository。

2. 檢查啟動日誌

與其不斷重裝同一個版本,我改從終端機啟動 Sober:

flatpak run org.vinegarhq.Sober

Sober 的應用程式日誌也可以在這裡找到:

~/.var/app/org.vinegarhq.Sober/data/sober/sober_logs/

其中值得注意的日誌是:

info: app: app tag: s0126-3212-x86_64-gnu
info: state: using manifest object: {"app_settings":{"FFlagUIGpuGradient11":false},"r1":1,"startup_message_treatment":"fatal_v1__update_pending","u":1}
info: UIServicesConduit: will execute ui service binary

最有用的線索是:

"startup_message_treatment":"fatal_v1__update_pending"

同一個 app tag 也出現在 Sober 的公開 runtime manifest 中。這份 manifest 對目前安裝的 build 指定了「等待更新」的啟動處理方式,與畫面上的「Gameplay Unavailable」訊息相符。

從日誌可以看出,程式在正常初始化 Roblox engine 之前就停止了。不過,這些資訊無法證明究竟是哪一項 Roblox 相容性變動導致必須更新,所以我沒有直接假定更底層的原因。

3. 找到較新的 Build

接下來的問題是:新版 Sober 套件是不是其實已經存在?

我查看 Flathub 的打包 repository,找到一筆官方打包 commit,其中提到 11 月 5 日的 build artifact:

2026-11-05_c107424

對應的 Flathub build job 指向編號 337540 的 build repository。

我把原本安裝的版本與新 artifact 放在一起比較:

項目原本安裝的 build新的 Flathub build
應用程式顯示版本1.8.01.8.0
Artifact ID2026-10-05_23f45dd2026-11-05_c107424
Runtime app tags0126-3212-x86_64-gnus0128-20136-x86_64-gnu
Flatpak commit 前綴7b6430c703e80fe4cd04b5ad
等待更新的啟動處理有無

有趣的是,這兩個 build 顯示的版本號竟然都是 1.8.0。如果只看版本號,根本看不出差異。反而是 artifact 日期、runtime tag 和 Flatpak commit,更能準確辨識實際安裝的內容。

在我排除問題的當下,一般 Flathub stable repository 仍然提供 10 月的 build,但編號 build repository 已經有 11 月的套件。

這也解釋了看似矛盾的情況:新 build 確實存在,但 flatpak update 還沒有新的 stable commit 可以安裝。 至於 stable 為何尚未發布,我沒有找到足夠證據判斷。

4. 手動安裝已建置完成、具有簽章的 Flathub Build

我決定手動安裝這個 build。這不是在本機重新編譯 Sober,也不是 patch 執行檔,而是安裝 Flathub 建置系統已經產生好的套件。

一開始,我試著透過 .flatpakref 搭配 --reinstall 直接安裝,但在我使用的 Flatpak 版本上,只得到「already installed」。後來改成明確把 build repository 加為 remote,再從該 remote 重新安裝,就成功了。

變更安裝內容前,我先關閉 Sober。

取得 build repository 的簽章金鑰

我從 Flathub 自己提供的 .flatpakref 取得其中的 GPG key。這段程式也會確認參照的應用程式名稱與 repository URL 符合預期:

mkdir -p /tmp/sober-update

python3 - <<'PY'
import base64
import configparser
import pathlib
import urllib.request

url = (
    'https://dl.flathub.org/build-repo/337540/'
    'org.vinegarhq.Sober.flatpakref'
)
with urllib.request.urlopen(url, timeout=30) as response:
    text = response.read().decode('utf-8')

config = configparser.ConfigParser()
config.read_string(text)
ref = config['Flatpak Ref']
assert ref['Name'] == 'org.vinegarhq.Sober'
assert ref['Url'].rstrip('/') == 'https://dl.flathub.org/build-repo/337540'

pathlib.Path('/tmp/sober-update/flathub-build.gpg').write_bytes(
    base64.b64decode(ref['GPGKey'])
)
PY

新增 build repository 並重新安裝

接著新增這個編號 repository,同時保留 GPG 簽章驗證:

flatpak remote-add --system --if-not-exists --no-enumerate \
  --gpg-import=/tmp/sober-update/flathub-build.gpg \
  sober-nov5-build https://dl.flathub.org/build-repo/337540

再從這個 remote 重新安裝已存在的 Sober 應用程式:

flatpak install --system -y --reinstall \
  sober-nov5-build org.vinegarhq.Sober

--no-enumerate 可以避免這個額外的 remote 被當成一般應用程式目錄列出。重新安裝會替換應用程式套件,但沒有要求刪除原有的應用程式資料。

整個過程中,我沒有關閉 GPG 驗證、修改 Sober 的 runtime manifest、patch 執行檔,或變更核心安全設定。

5. 驗證修復結果

安裝完成後,我先查看套件資訊與 commit:

flatpak info --system org.vinegarhq.Sober
flatpak info --system --show-commit org.vinegarhq.Sober

11 月 build 預期的完整 commit 為:

0fe4cd04b5ad9b71273fe9ccd3d8e28be6d43cfbd302bae6bc2f04243f0df4d3

接著重新啟動:

flatpak run org.vinegarhq.Sober

這次日誌顯示不同的 app tag 和 manifest:

info: app: app tag: s0128-20136-x86_64-gnu
info: state: using manifest object: {"app_settings":{"FFlagUIGpuGradient12":false},"r1":1,"u":1}

先前的 fatal_v1__update_pending 已經消失。Sober 接著下載所需的 Roblox 套件,並開始初始化 Roblox engine。

最重要的是,使用這台電腦的人確認 Roblox 已經可以正常玩了。

6. 恢復正常的更新管道

還有一件事必須處理:Flathub 的編號 build repository 是一份快照,不是長期維護的正常更新管道。我不希望未來更新還依賴這個臨時 build URL。

確認 Sober 可以運作之後,我把額外 remote 的 URL 改回一般的 Flathub stable repository:

flatpak remote-modify --system \
  --url=https://dl.flathub.org/repo/ \
  --collection-id=org.flathub.Stable \
  --title='Flathub (Sober updates)' \
  sober-nov5-build

雖然這個 remote 在本機仍然叫做 sober-nov5-build,但之後的更新檢查已經會使用 stable repository 的 URL。

驗證時,Flatpak 顯示:

Update is older than current version

這是合理的:本機已安裝 11 月的 build,但 stable 當時提供的仍是更舊的套件。Flatpak 保留已安裝的新版,沒有以舊版覆蓋。

等一般的 Flathub remote 提供相同或更新的 build 後,就能讓安裝來源完全回到原本的 remote。首先檢查 stable 提供什麼版本:

flatpak remote-info --system flathub org.vinegarhq.Sober

在 stable 顯示相同或更新的 build 前,不要繼續以下步驟。 確認後再從一般 remote 重新安裝:

flatpak install --system -y --reinstall flathub org.vinegarhq.Sober

等 flatpak info 確認安裝來源(origin)已變回 flathub,就可以移除先前新增的 remote:

flatpak remote-delete --system sober-nov5-build

7. 除錯陷阱:追蹤工具反而改變了錯誤

調查過程中也遇到一個容易誤導人的結果。當我使用 strace -f 啟動 Sober,程式反而回報另一個與核心功能初始化及 ptrace 有關的錯誤。

這和正常啟動時看到的問題不同。外部追蹤工具干擾了 Sober 的啟動行為,所以不能直接拿這次的錯誤來判斷原本的更新問題。

因此,我最後以正常啟動日誌、公開 manifest,以及 Flathub build 紀錄作為判斷依據。這次修復不需要調整任何核心安全設定。

8. 這次學到的事

「Nothing to do」只代表目前設定的更新來源沒有新版本

Flatpak client 不一定有問題。它只是正確地告訴我:目前設定的 stable repository,沒有新的 application commit 可以提供。

版本號未必足夠辨識套件

兩個套件都顯示 1.8.0。真正揭露差異的是 artifact ID、runtime app tag 與 Flatpak commit hash。

Build 完成,不等於 stable 正式發布

Flathub 的建置系統已經提供新套件,而且有簽章,但一般 stable 更新管道還沒發布。能公開存取的 build artifact,不應直接視為官方推薦的 stable release。

使用臨時替代方案後,也要顧好未來更新

從編號 build repository 安裝,可以解決眼前的問題,但它不適合當永久的更新來源。要弄清楚日後的更新會從哪裡取得,並實際驗證。

除錯證據夠用就好

這次只靠正常日誌、公開 manifest 和 repository metadata,就已足以支持診斷。不需要修改 Sober,也不需要繞過啟動檢查。

9. 快速故障排除清單

步驟要做的事指令或資料來源
1先嘗試一般更新flatpak update --system org.vinegarhq.Sober
2檢查已安裝的 buildflatpak info --system org.vinegarhq.Sober
3檢查 stable repositoryflatpak remote-info --system flathub org.vinegarhq.Sober
4查看正常啟動輸出flatpak run org.vinegarhq.Sober
5檢查應用程式日誌~/.var/app/org.vinegarhq.Sober/data/sober/sober_logs/
6比對公開 build 紀錄Flathub 打包 repository
7必要時評估官方簽章 build確認指定 build 及其啟用 GPG 驗證的 remote
8驗證程式能正常執行flatpak info、flatpak run
9恢復一般更新確認 stable 跟上後,再切回 flathub

如果使用的是個人帳號層級的 Flatpak 安裝,請視情況把 --system 改為 --user。本文的指令紀錄的是這次實際測試的系統層級安裝。

結語

Sober 出現「Gameplay Unavailable」時,乍看像是軟體壞了,只能等待開發者推出新版本。但啟動日誌透露了等待更新的處理狀態,而 Flathub 的公開 build 紀錄則顯示,較新的簽章 build 其實已經存在。

因為一般 stable repository 當時還沒有發布這個 build,所以 flatpak update 顯示「Nothing to do」並沒有錯。我手動安裝了已建置的套件、確認 commit,再把未來更新指回正常來源,最後成功讓 Sober 恢復運作;整個過程沒有自行編譯或修改軟體。

這次最重要的經驗是:

當 Flatpak 應用程式要求更新,但 client 卻找不到更新時,別只看版本號;還要比對已安裝的 commit 與專案公開的 build artifact。


本文根據 2026 年 11 月 5 日的實際故障排除過程撰寫,已省略個人識別資訊及無關的系統細節。為了方便技術交流,保留了當時的指令、build 識別碼與診斷訊息。Build repository 可能失效,尚未發布至 stable 的 build 也可能有相容性風險。若正常 stable 更新已經可用,應優先採用。