Compare commits

...
Author SHA1 Message Date
pc-heiniandClaude Fable 5.1 981eb11b6d fix(console): pass TERM/COLORTERM through flatpak-spawn --host
Build and Publish HeiniRemote Agent Flatpak / build (push) Successful in 7m16s
flatpak-spawn --host does not forward the caller's environment; the host
login shell started without TERM (tput errors, integer test on empty
LINES/COLUMNS in the profile scripts).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jkHZhr7ZzHGGuE2bJQmGa
2026-09-22 01:32:51 +02:00
pc-heini b33494d399 Revert "ci: cache cargo registry and target between Flatpak builds"
Build and Publish HeiniRemote Agent Flatpak / build (push) Successful in 7m17s
This reverts commit 11def894e2.
2026-09-22 01:12:24 +02:00
pc-heiniandClaude Fable 5.1 11def894e2 ci: cache cargo registry and target between Flatpak builds
Build and Publish HeiniRemote Agent Flatpak / build (push) Failing after 6m7s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jkHZhr7ZzHGGuE2bJQmGa
2026-09-22 01:02:22 +02:00
pc-heiniandClaude Fable 5.1 da04640fdf fix(console): host-side PTY via script(1) so the host shell has a named tty and a controlling terminal
Build and Publish HeiniRemote Agent Flatpak / build (push) Successful in 8m37s
The PTY the agent allocates lives in the sandbox's devpts; on the host the
forwarded fd cannot be named (`tty` fails, no controlling terminal, tools
that open /dev/tty break). script(1) gives the login shell a host PTY and
relays through the forwarded one. Also picks up upstream main (frame-burst
fix).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jkHZhr7ZzHGGuE2bJQmGa
2026-09-22 00:43:01 +02:00
pc-heiniandClaude Fable 5.1 537d3b8aa8 chore: trigger rebuild for upstream f8c509b
Build and Publish HeiniRemote Agent Flatpak / build (push) Successful in 7m53s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jkHZhr7ZzHGGuE2bJQmGa
2026-09-21 21:04:20 +02:00
pc-heiniandClaude Fable 5.1 de18d439e5 chore: trigger rebuild for upstream eac11e0; correct README rebuild note
Build and Publish HeiniRemote Agent Flatpak / build (push) Successful in 6m59s
The workflow ignores README pushes, so the previous note was wrong.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jkHZhr7ZzHGGuE2bJQmGa
2026-09-21 20:30:04 +02:00
pc-heiniandClaude Fable 5.1 05105a6532 docs: note how to trigger a rebuild (and trigger one)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jkHZhr7ZzHGGuE2bJQmGa
2026-09-21 20:11:16 +02:00
pc-heini c879df948c docs: unit description matches the customer-facing name 2026-09-21 04:41:26 +02:00
pc-heiniandClaude Fable 5.1 5d23699ec9 feat: German customer-facing desktop entry and AppStream metadata
Build and Publish HeiniRemote Agent Flatpak / build (push) Successful in 7m32s
Launcher shows "PC-Heini Fernwartung" with a plain-language description of
what the program does (remote support after the user's consent) instead of
the internal "HeiniRemote Agent — connects this machine to a HeiniRemote
server". English translations via Name[en]/xml:lang. Keywords make it
findable via PC-Heini, pcheini, Fernwartung, Fernhilfe, Support, HeiniRemote.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:41:11 +02:00
pc-heiniandClaude Fable 5.1 5afb133f89 build: bump freedesktop runtime 24.08 -> 25.08
Build and Publish HeiniRemote Agent Flatpak / build (push) Successful in 7m12s
24.08 ships libpipewire/gst-plugin-pipewire 1.2.4, whose buffer negotiation
fails against KWin 6.7 + PipeWire 1.6.9 hosts (pipewiresrc: error alloc
buffers). 25.08 (libpipewire 1.4.9) was verified working on openSUSE Kalpa
via flatpak run --runtime-version=25.08; the host only needs the PipeWire
daemon, so older hosts (Mint 22, PipeWire 1.0) stay compatible.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-20 23:06:04 +02:00
pc-heiniandClaude Fable 5.1 c2a25b6d5c docs: note that the repo must be public for Flatpak to reach the OSTree repo
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bc367PQmRJroxWQu5zZTQm
2026-09-20 22:24:14 +02:00
6 changed files with 68 additions and 18 deletions

No files matched your search

+8 -5
View File
@@ -30,10 +30,13 @@ jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
# ubuntu:24.04 matches the freedesktop 24.08 runtime closely enough # ubuntu:24.04 (glibc 2.39, GStreamer 1.24) is older than the
# (glibc 2.39, GStreamer 1.24) that the cargo-built binary runs # freedesktop 25.08 runtime (glibc 2.41, GStreamer 1.26), so the
# unmodified inside the runtime. Privileged so Flatpak's bwrap works # cargo-built binary runs unmodified inside the runtime (same sonames,
# where needed (runtime install triggers). # forward-compatible symbol versions). 25.08 is required: 24.08 ships
# libpipewire 1.2 whose buffer negotiation fails against KWin 6.7 /
# PipeWire 1.6 hosts ("pipewiresrc: error alloc buffers"). Privileged
# so Flatpak's bwrap works where needed (runtime install triggers).
image: ubuntu:24.04 image: ubuntu:24.04
options: --privileged options: --privileged
steps: steps:
@@ -120,7 +123,7 @@ jobs:
if: steps.check.outputs.build == 'true' if: steps.check.outputs.build == 'true'
run: | run: |
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install -y flathub org.freedesktop.Platform//24.08 org.freedesktop.Sdk//24.08 flatpak install -y flathub org.freedesktop.Platform//25.08 org.freedesktop.Sdk//25.08
- name: Stamp version into AppStream metadata - name: Stamp version into AppStream metadata
if: steps.check.outputs.build == 'true' if: steps.check.outputs.build == 'true'
+11 -2
View File
@@ -3,7 +3,8 @@
Flatpak packaging for the [HeiniRemote](https://git.pc-heini.de/pc-heini/HeiniRemote) Flatpak packaging for the [HeiniRemote](https://git.pc-heini.de/pc-heini/HeiniRemote)
customer agent (`de.pc_heini.HeiniRemoteAgent`) — an additional distribution customer agent (`de.pc_heini.HeiniRemoteAgent`) — an additional distribution
channel next to the plain release binary, with all dependencies (GStreamer, channel next to the plain release binary, with all dependencies (GStreamer,
libnice, wl-clipboard, …) pinned inside the freedesktop 24.08 runtime. libnice, wl-clipboard, …) pinned inside the freedesktop 25.08 runtime (24.08 ships libpipewire 1.2,
whose buffer negotiation fails against KWin 6.7 / PipeWire 1.6 hosts).
Same setup as [o3de-flatpak](https://git.pc-heini.de/pc-heini/o3de-flatpak): Same setup as [o3de-flatpak](https://git.pc-heini.de/pc-heini/o3de-flatpak):
a Gitea Action builds the Flatpak **without** `flatpak-builder` (no bubblewrap a Gitea Action builds the Flatpak **without** `flatpak-builder` (no bubblewrap
@@ -14,6 +15,12 @@ repackaging a prebuilt archive.
## Install ## Install
> **Note:** this repository must stay **public**. Flatpak fetches the OSTree
> repo from the raw `pages` branch without any credentials — with the repo set
> to private, `flatpak remote-add` / `flatpak install` fail with a 404.
> (The agent's source lives in the private HeiniRemote repo; only the built
> binary is published here.)
From the Flatpak remote (gets updates via `flatpak update`): From the Flatpak remote (gets updates via `flatpak update`):
```sh ```sh
@@ -54,7 +61,7 @@ user unit wrapping `flatpak run`:
```ini ```ini
# ~/.config/systemd/user/heiniremote-agent.service # ~/.config/systemd/user/heiniremote-agent.service
[Unit] [Unit]
Description=HeiniRemote agent (Flatpak) Description=PC-Heini Fernwartung (HeiniRemote Agent, Flatpak)
After=graphical-session.target After=graphical-session.target
[Service] [Service]
@@ -93,3 +100,5 @@ StatusNotifier names for the tray icon.
| `heiniremote-wrapper.sh` | Entry point: host-shell `$SHELL` override + config adoption. | | `heiniremote-wrapper.sh` | Entry point: host-shell `$SHELL` override + config adoption. |
| `host-shell.sh` | `flatpak-spawn --host` bridge for the PTY console. | | `host-shell.sh` | `flatpak-spawn --host` bridge for the PTY console. |
| `de.pc_heini.HeiniRemoteAgent.*` | Desktop file, AppStream metainfo (version stamped by CI), icon. | | `de.pc_heini.HeiniRemoteAgent.*` | Desktop file, AppStream metainfo (version stamped by CI), icon. |
Builds track the newest upstream `main` commit. To rebuild before the nightly check, push a change to a packaging file (README, docs, LICENSE and .gitignore are ignored by the workflow) or run the workflow manually via `workflow_dispatch`.
+7 -3
View File
@@ -1,9 +1,13 @@
[Desktop Entry] [Desktop Entry]
Type=Application Type=Application
Name=HeiniRemote Agent Name=PC-Heini Fernwartung
Comment=Remote maintenance agent — connects this machine to a HeiniRemote server Name[en]=PC-Heini Remote Support
GenericName=Fernwartung
GenericName[en]=Remote Support
Comment=Erlaubt PC-Heini, diesen Computer nach Ihrer Zustimmung aus der Ferne zu warten
Comment[en]=Lets PC-Heini service this computer remotely, after you grant access
Exec=heiniremote-wrapper.sh Exec=heiniremote-wrapper.sh
Icon=de.pc_heini.HeiniRemoteAgent Icon=de.pc_heini.HeiniRemoteAgent
Terminal=false Terminal=false
Categories=Network;RemoteAccess; Categories=Network;RemoteAccess;
Keywords=remote;support;fernwartung; Keywords=PC-Heini;pcheini;pc heini;Heini;Fernwartung;Fernzugriff;Fernhilfe;Support;Hilfe;HeiniRemote;remote;
+26 -6
View File
@@ -3,14 +3,34 @@
<id>de.pc_heini.HeiniRemoteAgent</id> <id>de.pc_heini.HeiniRemoteAgent</id>
<metadata_license>CC0-1.0</metadata_license> <metadata_license>CC0-1.0</metadata_license>
<project_license>proprietary</project_license> <project_license>proprietary</project_license>
<name>HeiniRemote Agent</name> <name>PC-Heini Fernwartung</name>
<summary>Remote maintenance agent for HeiniRemote</summary> <name xml:lang="en">PC-Heini Remote Support</name>
<summary>Fernwartung Ihres Computers durch PC-Heini</summary>
<summary xml:lang="en">Remote support for your computer by PC-Heini</summary>
<description> <description>
<p> <p>
Customer-side agent for HeiniRemote: Wayland screen capture and input Mit diesem Programm kann PC-Heini Ihren Computer aus der Ferne warten:
injection via xdg-desktop-portal, plus a PTY rescue console, streamed Bildschirm ansehen, Maus und Tastatur bedienen und bei Bedarf eine
over WebRTC to the HeiniRemote management console. Requires a HeiniRemote Konsole nutzen. Nichts passiert ohne Ihre Zustimmung: Vor jeder Sitzung
server URL and device token (agent.toml). fragt Ihr System, ob der Bildschirm freigegeben werden darf.
</p>
<p>
Die Verbindung ist Ende-zu-Ende verschlüsselt und läuft über den
Fernwartungsserver von PC-Heini. Das Programm läuft unauffällig im
Hintergrund und zeigt ein Symbol in der Leiste, solange es aktiv ist.
</p>
</description>
<description xml:lang="en">
<p>
This program lets PC-Heini service your computer remotely: view the
screen, operate mouse and keyboard and, if needed, use a console.
Nothing happens without your consent: before every session your system
asks whether the screen may be shared.
</p>
<p>
The connection is end-to-end encrypted and goes through PC-Heini's
remote support server. The program runs quietly in the background and
shows a tray icon while it is active.
</p> </p>
</description> </description>
<launchable type="desktop-id">de.pc_heini.HeiniRemoteAgent.desktop</launchable> <launchable type="desktop-id">de.pc_heini.HeiniRemoteAgent.desktop</launchable>
+13 -1
View File
@@ -9,9 +9,21 @@
# The inner resolution runs ON THE HOST: flatpak-spawn forwards the sandbox # The inner resolution runs ON THE HOST: flatpak-spawn forwards the sandbox
# environment, so $SHELL would still point at this script — resolve the user's # environment, so $SHELL would still point at this script — resolve the user's
# real login shell from passwd instead and fix up $SHELL before exec'ing it. # real login shell from passwd instead and fix up $SHELL before exec'ing it.
exec flatpak-spawn --host /bin/sh -c ' #
# The PTY itself was allocated inside the sandbox (its own devpts instance),
# so on the host the forwarded fd cannot be named (`tty` fails, no
# controlling terminal, tools that open /dev/tty break). script(1) allocates a
# second, host-side PTY for the shell and relays through the forwarded one;
# util-linux >= 2.35 also passes window-size changes along.
# flatpak-spawn --host does not forward the caller's environment: without
# --env the host shell starts with no TERM at all (login scripts then fail
# in tput and in integer tests on the empty LINES/COLUMNS).
exec flatpak-spawn --host --env=TERM="${TERM:-xterm-256color}" --env=COLORTERM=truecolor /bin/sh -c '
shell="$(getent passwd "$(id -un)" | cut -d: -f7)" shell="$(getent passwd "$(id -un)" | cut -d: -f7)"
[ -x "$shell" ] || shell=/bin/sh [ -x "$shell" ] || shell=/bin/sh
export SHELL="$shell" export SHELL="$shell"
if command -v script >/dev/null 2>&1; then
exec script -q -e -c "exec \"$shell\" -l" /dev/null
fi
exec "$shell" -l exec "$shell" -l
' '
+3 -1
View File
@@ -16,7 +16,7 @@ set -euo pipefail
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
APP_ID=de.pc_heini.HeiniRemoteAgent APP_ID=de.pc_heini.HeiniRemoteAgent
RUNTIME_VER=24.08 RUNTIME_VER=25.08
BRANCH=stable BRANCH=stable
AGENT_BIN="${AGENT_BIN:?set AGENT_BIN to the compiled heiniremote-agent}" AGENT_BIN="${AGENT_BIN:?set AGENT_BIN to the compiled heiniremote-agent}"
WL_DIR="${WL_CLIPBOARD_DIR:-/usr/bin}" WL_DIR="${WL_CLIPBOARD_DIR:-/usr/bin}"
@@ -72,3 +72,5 @@ flatpak build-export --disable-sandbox repo build-dir "$BRANCH"
flatpak build-update-repo repo --title="HeiniRemote Agent" --prune --prune-depth=1 flatpak build-update-repo repo --title="HeiniRemote Agent" --prune --prune-depth=1
echo ">> done: ./repo" echo ">> done: ./repo"
# Touched to trigger a rebuild against upstream f8c509b (2026-09-21).