Skip to content
sstreamzet/docs
Linux SDK previewOpen console
Developer docs / Linux SDK
API and integration guide · Updated 2026-09-23

Linux example guide

Use the C and Go examples to verify enrollment, web terminal, desktop sharing and shutdown.

Downloads and public test settings

Download the files below directly. The downloads guide provides the public test key and configuration; pair the device code in your own account for testing.

Linux SDK · AMD64

preview / linux 0.3.3

C library and header, runnable C/Go examples, source and test configuration for Intel/AMD 64-bit.

Ubuntu 24.04 / x86_64 · 18.3 MiB · ZIP

Download

streamzet-linux-sdk-preview-20260923-key-amd64.zip

Verify SHA-256
sha256
e22b4792bbdc58878c67c5104d182422f8accfea9da10379252e0a5296d3e57a
Download checksum file

Linux SDK · ARM64

preview / linux 0.3.3

C library and header, runnable C/Go examples, source and test configuration for ARM 64-bit. Not for xSpan ARMv5.

Ubuntu 24.04 / aarch64 · 16.7 MiB · ZIP

Download

streamzet-linux-sdk-preview-20260923-key-arm64.zip

Verify SHA-256
sha256
58d120c0f123169726077a8845ac2619692cb14b45058e72a5aaa80700d6e5d0
Download checksum file

1. Prepare the test

This walkthrough runs prebuilt examples on Ubuntu 24.04. No C/Go compiler or make is needed for the first trial. You need a terminal, Python 3 and internet access.

  1. Open a terminal on Linux and check the Ubuntu version and CPU below. Download AMD64 for x86_64 or ARM64 for aarch64.
  2. Extract the ZIP into a new folder. In the file manager, open the folder containing configure-linux-test.py and bin, then use Open in Terminal from its context menu. Run the commands there.
  3. Run as your normal user; do not prefix example commands with sudo. Also open StreamZet Devices on a PC using your own account.
sh
cat /etc/os-release
uname -m
python3 --version

2. Generate settings and run the C executable

Run each line below from the extracted folder. The helper writes the public test key and a private state path under your home into config.json. No manual key or path editing is needed.

sh
ls configure-linux-test.py bin/embedded-example
python3 configure-linux-test.py
chmod u+x bin/embedded-example bin/go-example
./bin/embedded-example config.json

After Created …/config.json, output shows running=true and identity. Once registration finishes, identity.device_code contains an eight-character code to register on the PC. Keep this window open: it shows the running example rather than accepting shell commands.

sh
{"running":true,"error":"","identity":{"device_code":""}}
# After registration, read the device_code from your own output.

3. Verify the web terminal

  1. On the PC, register the printed code from Devices, then start that Linux device’s session in control mode and open Terminal. View-only mode does not allow terminal input.
  2. Run the printf and whoami commands below in the web terminal. Verify the normal host user and round-trip English/Korean output. Do not use production-changing commands or sensitive files.
  3. Resize the browser and check that stty size changes. Close the shell with exit and reopen it with New terminal.
sh
printf 'SDK_%s_OK\n' LINUX
printf '한글 UTF-8 확인\n'
whoami
stty size
Actual SDK_LINUX_OK response in the web terminal
Actual SDK_LINUX_OK output from printf in the PC web terminal, connected to the public ARM64 Go example in an Ubuntu container. Only the terminal area is captured.

4. Go example and identity persistence

  1. Press Enter in the C console and confirm running=false and clean exit. The web End connection button ends that peer session; it is separate from starting/stopping the SDK worker.
  2. Run the Go example with the same config.json/state_dir. Confirm the same device_id/device_code, then reconnect from the dashboard.
  3. Press Enter to stop the Go example. For later runs, reuse config.json; you do not need to run the configuration helper again.
sh
./bin/go-example config.json
# Press Enter to stop.

5. Verify X11 / Wayland desktop

After installing the capture helper and graphical runtime, set config.mode=auto and an absolute capture_helper path. Run as the logged-in desktop user. A headless machine is terminal-only; a black video is not evidence of desktop support.

  1. X11: open a test editor and verify changing video, pointer, click, drag, scroll and text. Do not force access to an unauthorized display.
  2. Wayland: approve the target screen and remote interaction in the system portal. Test uppercase, symbols and Korean. Text transport may use the device clipboard.
  3. Test Wayland denial separately: it must grant no screen/input. A terminal allowed by host policy may continue, and the host must let the user stop the SDK to end terminal availability too.
GNOME Wayland screen and remote-interaction consent
Actual GNOME portal. Enable Allow Remote Interaction before Share when remote input is needed.

Troubleshooting

SymptomCheck and action
config.json already existsThe helper does not overwrite settings. Restart from that folder with ./bin/embedded-example config.json.
root remote shells are not supportedRun as a normal user without sudo.
state directory must be absolute/privateUse a real absolute path; check ownership, 0700 permissions and symlinks.
another agent owns this identity / already runningStop the other instance cleanly and retry. Never delete live lock/identity files.
libstreamzet.so not foundPlace the matching-ABI library beside the executable and use the supplied rpath command; inspect ldd.
running=true, no device codeEnrollment is asynchronous. Check DNS, HTTPS, CA store, public key and firewall. Do not disable TLS verification.
Example exits immediatelyClosed stdin stops the example. Run in a terminal or retain container -i/-t. A service host must manage SDK lifetime itself.
Wayland screen unavailableCheck login session, portal backend, PipeWire, consent and capture_helper. Terminal success is separate from desktop success.

Acceptance record and support

Record SDK build/ZIP SHA-256, distro/kernel/CPU/glibc, X11/Wayland session, host user, network path, expected/actual result and reproduction steps. End all viewers and confirm SDK Stop/Wait or C Stop completion. Do not attach private enrollment keys or identity.json externally.

Developers: building from source

Use the integration guide for tool setup, configuration and lifecycle when building for another environment or embedding into a host. These paths are relative to the SDK source folder and differ from the prebuilt bin paths above.

sh
cd source
make sdk
./dist/sdk/native/embedded-example ../config.json
# Press Enter, then:
./dist/sdk/native/go-example ../config.json