- C 90.1%
- Makefile 9.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github/workflows | ||
| .clang-format | ||
| .gitattributes | ||
| .gitignore | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| main.c | ||
| Makefile | ||
| README.md | ||
| THIRD_PARTY_NOTICES.md | ||
Disclaimer: This is an AI-assisted project developed using OpenAI Codex.
Headless LinkDev
Headless Remote Play device pairing for PlayStation 5
Generate the PIN and Account ID entirely through an elfldr terminal.
A small PS5 payload that initializes the system Remote Play service, generates
a real eight-digit pairing PIN, reads the foreground user's Base64 Account ID,
and returns everything through the same elfldr connection used to launch it.
Headless LinkDev is a focused fork of LinkDev. It preserves the original project history while replacing the graphical BigApp with one direct, terminal-only payload.
No web page, TV output, SDL application, hbldr stage, notification, or separate logging connection is required for pairing.
Note
Firmware 12.70 has been paired successfully with chiaki-ng. Other firmware versions are currently unverified by this project.
Example session
$ make send PS5_HOST=192.168.1.100
[RemotePlayPair] Initializing Remote Play...
[RemotePlayPair] READY | PIN: 12345678 | Account ID: AbCdEfGhIjk= | Timeout: 300s
[RemotePlayPair] Pairing completed successfully
What is included
- One PS5 payload source file:
main.c. - One build artifact:
headless-linkdev.elf. - A host self-test for Account ID encoding and registry slot calculations.
- A GitHub Actions workflow for checks, builds, artifacts, and tagged releases.
- No vendored SDK, Sony binaries, UI framework, or runtime dependency bundle.
Status
| Capability | Status | Notes |
|---|---|---|
| PS5 firmware 12.70 | Verified | Hardware pairing completed successfully |
| PIN generation | Verified | Uses sceRemoteplayGeneratePinCode |
| Account ID output | Verified | Base64 value accepted by chiaki-ng |
| elfldr stdout | Verified | Upload and payload output share port 9021 |
| Pairing completion | Verified | Success is detected before the payload exits |
| Other firmware | Unverified | Hardware reports are welcome |
Requirements
- A jailbroken PS5 with
elfldrlistening on port9021. - The target user logged in and active in the foreground.
socaton the sending computer.- PS5 Payload SDK when building from source.
Build and test
Run these commands from WSL or Linux at the repository root:
export PS5_PAYLOAD_SDK=/opt/ps5-payload-sdk
make test
make format-check
make
The PS5 build produces headless-linkdev.elf. Generated ELF files are
ignored by Git.
Run on PS5
Replace <PS5-IP> with the console's address:
make send PS5_HOST=<PS5-IP>
The equivalent direct command is:
socat -t 99999999 - TCP:<PS5-IP>:9021 < headless-linkdev.elf
Keep the terminal connected while pairing. The PIN expires after 300 seconds; send the payload again to generate a new one.
Pair with chiaki-ng
Open the discovered console or manually register a PS5 using the values printed in the terminal:
| Field | Value |
|---|---|
| Host | PS5 IP address |
| Console | PS5 |
| PSN Account-ID | Base64 Account ID printed by the payload |
| Remote Play PIN | Eight-digit PIN printed by the payload |
Complete registration before the timeout. See the chiaki-ng registration guide for the current client UI flow.
Behavior and safety
The payload sets the global Remote Play registry flag and, when available, the
foreground user's Remote Play flag to 1. It reads the user's Account ID but
does not replace it, fake-activate the account, or modify save data.
The payload runs for one registration attempt and exits after success, a pairing error, or the five-minute timeout.
Troubleshooting
| Output or symptom | Meaning |
|---|---|
| Nothing appears | Keep socat connected and confirm elfldr is listening on port 9021 |
Failed to identify the foreground user |
Log into the intended PS5 user and leave it active |
Incorrect PIN |
Send the payload again and enter all eight digits of the new PIN |
Incorrect Account ID |
Copy the Base64 value exactly, including a trailing = |
Pairing expired |
Send the payload again to start a new five-minute attempt |
Repository layout
| Path | Purpose |
|---|---|
main.c |
Payload and bounded host self-test |
Makefile |
Test, format, PS5 build, and elfldr send targets |
.github/workflows/build.yml |
CI artifact and tagged release workflow |
CONTRIBUTING.md |
Validation and pull-request checklist |
THIRD_PARTY_NOTICES.md |
Upstream attribution |
Project references
| Project | Role |
|---|---|
| LinkDev | Parent project and original PS5 pairing implementation |
| ActRemoteLink | Direct Remote Play API implementation used for the headless payload |
| ps5-remoteplay-get-pin | Earlier headless PIN-generation research |
| OffAct | Offline account and registry research |
| PS5 Payload SDK | Prospero compiler, linker, headers, and ELF runtime |
| chiaki-ng | Open-source Remote Play client used for pairing validation |
The SDK is a build-time prerequisite and is not copied into this repository.
See THIRD_PARTY_NOTICES.md before redistributing
modified builds.
CI and releases
The build workflow runs formatting, the host self-test, and the PS5 build on every push and pull request. Successful builds upload the ELF as a workflow artifact.
Tags beginning with v build the tagged commit, create a GitHub Release with
generated notes, and attach headless-linkdev.elf:
git tag v1.0.0
git push origin v1.0.0
Rerunning a tag workflow replaces the existing ELF asset.
Forks with automatic tag workflows disabled can publish the same existing tag manually:
gh workflow run build.yml --ref master -f release_tag=v1.0.0
Leaving release_tag blank runs the checks and uploads a workflow artifact
without creating a release.
Contributing
See CONTRIBUTING.md for the development checks and
PS5-validation expectations.
License
Headless LinkDev is licensed under the
GNU General Public License v3.0 or later. Third-party work retains
its respective attribution; see THIRD_PARTY_NOTICES.md.
This project is not affiliated with Sony Interactive Entertainment, PlayStation, or chiaki-ng. Use it only with hardware and accounts you own.