From 6ecd0cea3936313dfda5d5b1c50d9f7f7434c00e Mon Sep 17 00:00:00 2001 From: saphid <4596216+saphid@users.noreply.github.com> Date: Mon, 28 Sep 2026 22:44:14 +1000 Subject: [PATCH] Match fake Frame user data ownership to the headset --- docs/testing.md | 5 +++++ tests/fakeframe/rootfs/usr/local/lib/fakeframe/init.py | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/docs/testing.md b/docs/testing.md index 9a35a34..5f14e03 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -157,3 +157,8 @@ fake-Frame library/process ownership. `tests/e2e/test_media_transfer.py` checks HTTP/SSH upload and library listing without pretending the fake renders VR. Real decode timings and captured stereo output are recorded in [vr-video.md](vr-video.md). Generated media only; no external player required. + +**Verified 2026-09-28**, real Frame BUILD_ID 20260925.6191901: `~/.local` +and `~/.local/share` are `steamos:steamos`, mode 0755. The fake supervisor +sets those parent owners too; previously its root-created Steam manifests +left the parents root-owned and incorrectly prevented user runtime installs. diff --git a/tests/fakeframe/rootfs/usr/local/lib/fakeframe/init.py b/tests/fakeframe/rootfs/usr/local/lib/fakeframe/init.py index 14593c0..ade78cb 100755 --- a/tests/fakeframe/rootfs/usr/local/lib/fakeframe/init.py +++ b/tests/fakeframe/rootfs/usr/local/lib/fakeframe/init.py @@ -231,6 +231,12 @@ def sysfs(state): def runtimes(state): """Installed compat tools as Steam app manifests, and the Lepton launcher itself.""" + # Verified 2026-09-28, BUILD_ID 20260925.6191901: both parents are + # steamos:steamos 0755. The root supervisor must not leave them root-owned + # when creating Steam's fake manifests; user-account app installs need them. + for directory in (HOME + '/.local', HOME + '/.local/share'): + os.makedirs(directory, mode=0o755, exist_ok=True) + chown(directory) apps = fs.STEAM_ROOT + '/steamapps' for alias, installed in state['runtimes'].items(): acf = f'{apps}/appmanifest_{fs.RUNTIME_APPIDS[alias]}.acf'