metadata.json claimed MIT while no LICENSE file existed, so the repository had no effective licence at all. It is now GPL-3.0-or-later: the full FSF text in LICENSE, the identifier in metadata.json, and REUSE-style SPDX-FileCopyrightText and SPDX-License-Identifier headers on all 33 source files, which is the convention KDE itself uses. Worth recording that GPL-3.0 is a preference here rather than an obligation. Nothing in the dependency graph forces it: linkctl is MIT and is invoked as a subprocess rather than linked, and the KDE QML modules the applet imports are LGPL. Removed two things that should not ship in a public repository. tests's QML linter had an absolute sandbox path, /tmp/pyside/PySide6/qmllint, baked into its search list; it now looks for Qt's qmllint and PySide6's pyside6-qmllint on PATH and honours a QMLLINT override, and says how to install one when it finds nothing. The systemd unit carried a Documentation= URL pointing at a host that does not exist, and its ExecStart silently assumed a particular checkout directory; the URL is gone and the path is now an obvious PATH/TO/CHECKOUT placeholder next to the comment telling you to edit it. Added a Credits section naming the work this is built on, since the project is mostly glue: linkctl does the camera control, schlarpc's firmware teardown documents the extension-unit protocol, and vrwallace's controller established that the Link 2 needs both pan and tilt axes in a single VIDIOC_S_EXT_CTRLS call, which is the detail the whole thing depends on. Also made the two Python tests executable, matching the other scripts. Audited for operator-specific detail: no credentials, tokens, private hostnames, IP addresses or absolute home paths in any tracked file or anywhere in the history's diffs. Three merge commits do carry Reviewed-on and Reviewed-by trailers naming a private forge, added by the forge at merge time; those are commit metadata rather than file content and are handled separately. Tested: 169 checks across seven suites plus the QML linter, all passing after the header insertion, which confirms it did not disturb the order-sensitive `.pragma library` line in logic.js or the qmldir module definitions. shellcheck clean.
39 lines
1.2 KiB
Desktop File
39 lines
1.2 KiB
Desktop File
# SPDX-FileCopyrightText: 2026 branderson
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
# Run the gamepad bridge as a user service.
|
|
#
|
|
# Install:
|
|
# mkdir -p ~/.config/systemd/user
|
|
# cp contrib/linkctl-gamepad.service ~/.config/systemd/user/
|
|
# # edit ExecStart below to the absolute path of bin/linkctl-gamepad
|
|
# systemctl --user daemon-reload
|
|
# systemctl --user enable --now linkctl-gamepad.service
|
|
#
|
|
# Watch it:
|
|
# journalctl --user -fu linkctl-gamepad.service
|
|
#
|
|
# --wait makes it tolerate the controller being absent or asleep, so the
|
|
# service can stay enabled whether or not the pad is connected.
|
|
|
|
[Unit]
|
|
Description=Insta360 Link gamepad control
|
|
After=graphical-session.target
|
|
PartOf=graphical-session.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
# EDIT THIS. systemd does not search PATH for ExecStart, so it needs the
|
|
# absolute path to your checkout. %h expands to your home directory.
|
|
ExecStart=%h/PATH/TO/CHECKOUT/bin/linkctl-gamepad --wait
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
# The joystick device and the camera are the only things it touches.
|
|
PrivateTmp=true
|
|
ProtectSystem=strict
|
|
ProtectHome=read-only
|
|
NoNewPrivileges=true
|
|
|
|
[Install]
|
|
WantedBy=graphical-session.target
|