honour per-host recording flags and explain a missing recording (#1121)

The session recording section offers a recording path, a filename template and
four content toggles, but the backend overwrote five of the six on every
connection. A host could set none of them and get no indication why.

Location and filename genuinely are not the host's to choose — recordings are
indexed by them for playback and the backend refuses to read outside its
recordings directory — so drop those two inputs rather than keep pretending they
apply. The content flags are a host-level decision, so default them instead of
forcing them.

That still leaves the reported case, where guacd writes the file somewhere the
backend cannot see it. The warning now reports both paths and names the two env
vars that align them, which is otherwise guesswork for a split-container setup.

Closes Termix-SSH/Support#1041
This commit is contained in:
ZacharyZcR
2026-07-28 01:49:01 +08:00
committed by GitHub
parent 94a072b76d
commit 1d26f820c6
6 changed files with 106 additions and 65 deletions
@@ -859,26 +859,6 @@ export function HostEditorRdpTab({
}
>
<div className="flex flex-col gap-4 py-3">
<div className="flex flex-col gap-1.5">
<label className="text-[10px] font-bold uppercase tracking-widest text-muted-foreground">
{t("hosts.guac.recordingPath")}
</label>
<Input
placeholder="/var/lib/termix/recordings"
value={form.guacamoleConfig["recording-path"] ?? ""}
onChange={(e) => setGuacField("recording-path", e.target.value)}
/>
</div>
<div className="flex flex-col gap-1.5">
<label className="text-[10px] font-bold uppercase tracking-widest text-muted-foreground">
{t("hosts.guac.recordingName")}
</label>
<Input
placeholder="${GUAC_USERNAME}-${GUAC_DATE}-${GUAC_TIME}"
value={form.guacamoleConfig["recording-name"] ?? ""}
onChange={(e) => setGuacField("recording-name", e.target.value)}
/>
</div>
<SettingRow
label={t("hosts.guac.createPathIfMissing")}
description={t("hosts.guac.createPathIfMissingDesc")}
@@ -1418,26 +1398,6 @@ export function HostEditorVncTab({
}
>
<div className="flex flex-col gap-4 py-3">
<div className="flex flex-col gap-1.5">
<label className="text-[10px] font-bold uppercase tracking-widest text-muted-foreground">
{t("hosts.guac.recordingPath")}
</label>
<Input
placeholder="/var/lib/termix/recordings"
value={form.guacamoleConfig["recording-path"] ?? ""}
onChange={(e) => setGuacField("recording-path", e.target.value)}
/>
</div>
<div className="flex flex-col gap-1.5">
<label className="text-[10px] font-bold uppercase tracking-widest text-muted-foreground">
{t("hosts.guac.recordingName")}
</label>
<Input
placeholder="${GUAC_USERNAME}-${GUAC_DATE}-${GUAC_TIME}"
value={form.guacamoleConfig["recording-name"] ?? ""}
onChange={(e) => setGuacField("recording-name", e.target.value)}
/>
</div>
<SettingRow
label={t("hosts.guac.createPathIfMissing")}
description={t("hosts.guac.createPathIfMissingDesc")}
@@ -1889,26 +1849,6 @@ export function HostEditorTelnetTab({
}
>
<div className="flex flex-col gap-4 py-3">
<div className="flex flex-col gap-1.5">
<label className="text-[10px] font-bold uppercase tracking-widest text-muted-foreground">
{t("hosts.guac.recordingPath")}
</label>
<Input
placeholder="/var/lib/termix/recordings"
value={form.guacamoleConfig["recording-path"] ?? ""}
onChange={(e) => setGuacField("recording-path", e.target.value)}
/>
</div>
<div className="flex flex-col gap-1.5">
<label className="text-[10px] font-bold uppercase tracking-widest text-muted-foreground">
{t("hosts.guac.recordingName")}
</label>
<Input
placeholder="${GUAC_USERNAME}-${GUAC_DATE}-${GUAC_TIME}"
value={form.guacamoleConfig["recording-name"] ?? ""}
onChange={(e) => setGuacField("recording-name", e.target.value)}
/>
</div>
<SettingRow
label={t("hosts.guac.createPathIfMissing")}
description={t("hosts.guac.createPathIfMissingDesc")}