mirror of
https://github.com/saphid/frame-control.git
synced 2026-10-06 02:00:19 +02:00
Record headset results for sideloading and devkit pairing
Tested on a Frame (BUILD_ID 20260922.6101926): - Devkit pairing: the service runs and answers properties.json, but /register refuses with "please put the Steam client in pairing mode" unless Steam is on Settings > Developer > Pair new host. Both setup paths now say so and keep asking for 2 minutes before falling back to the password. - Sideloading: registering, launching, quoted start paths and Remove work; a Windows exe runs under Proton 11 through FEX. An aarch64 build starts but outside the runtime container, and an x86-64 Linux build doesn't start because the x86-64 Steam Linux Runtime 4.0 isn't installed. The inspect note for x86-64 Linux builds now says so. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
84ac687399
commit
1580dae42e
8 files changed
+106
-36
No files matched your search
+12
-2
@@ -58,11 +58,14 @@ def say(msg):
|
||||
# port 32000: GET /properties.json names the user to log in as; POST /register with
|
||||
# "ssh-rsa <key> <comment> <magic>" shows an approve prompt in the headset (the
|
||||
# comment is what it displays, 30 s to answer), then installs the key and turns sshd on.
|
||||
# The prompt only appears while Steam is on Settings > Developer > Pair new host;
|
||||
# otherwise /register answers 403 "please put the Steam client in pairing mode".
|
||||
|
||||
DEVKIT_PORT = 32000
|
||||
DEVKIT_SERVICE = "_steamos-devkit._tcp"
|
||||
MAGIC_PHRASE = "900b919520e4cf601998a71eec318fec" # fixed token Valve's client appends
|
||||
REGISTER_TIMEOUT = 60
|
||||
PAIRING_MODE_WAIT = 120 # seconds to keep asking while the user opens "Pair new host"
|
||||
# A LAN host: never go through an HTTP(S)_PROXY from the environment.
|
||||
_opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
|
||||
|
||||
@@ -141,8 +144,15 @@ def devkit_pair(host, pub, comment, port=DEVKIT_PORT, on_login=None):
|
||||
return f"devkit service not reachable on port {port}: {why(e)}"
|
||||
if login and on_login:
|
||||
on_login(login)
|
||||
say(" Approve the pairing request in the headset (it waits about 30 seconds)")
|
||||
ok, msg = register(host, register_body(pub, comment), port)
|
||||
say(" In the headset: Steam Settings > Developer > Pair new host, then approve the request")
|
||||
body = register_body(pub, comment)
|
||||
ok, msg = register(host, body, port)
|
||||
# The headset refuses at once unless Steam is on its "Pair new host" screen
|
||||
# (verified on a Frame, 2026-09-26), so keep asking while the user opens it.
|
||||
deadline = time.monotonic() + PAIRING_MODE_WAIT
|
||||
while not ok and "pairing mode" in msg and time.monotonic() < deadline:
|
||||
time.sleep(3)
|
||||
ok, msg = register(host, body, port)
|
||||
return None if ok else f"devkit pairing failed: {msg}"
|
||||
|
||||
|
||||
|
||||
+3
-1
@@ -399,7 +399,9 @@ def runtime_for(target, found=()):
|
||||
if fmt == 'elf' and arch == 'arm64':
|
||||
return 'SteamLinuxRuntime_4-arm64', 'Native ARM64 Linux build.'
|
||||
if fmt == 'elf' and arch == 'x86_64':
|
||||
return 'SteamLinuxRuntime_4', 'x86-64 Linux build: runs through FEX (inferred, not yet checked).'
|
||||
return 'SteamLinuxRuntime_4', ("x86-64 Linux build: probably won't start. It needs the x86-64 Steam "
|
||||
"Linux Runtime 4.0, which the Frame didn't install for a sideloaded title "
|
||||
"(2026-09-26). Use an ARM64 or Windows build if there is one.")
|
||||
raise FrameError(f"{target['path']} is a {arch} Linux program; the Frame runs ARM64 and x86-64 (through FEX) only")
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user