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.0 | 1.8.0 |
| Artifact ID | 2026-10-05_23f45dd | 2026-11-05_c107424 |
| Runtime app tag | s0126-3212-x86_64-gnu | s0128-20136-x86_64-gnu |
| Flatpak commit 前綴 | 7b6430c703e8 | 0fe4cd04b5ad |
| 等待更新的啟動處理 | 有 | 無 |
有趣的是,這兩個 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 | 檢查已安裝的 build | flatpak info --system org.vinegarhq.Sober |
| 3 | 檢查 stable repository | flatpak 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 更新已經可用,應優先採用。