RDP big-monitor fix + HUD: EGFX frame budget for 5160x2160 (#611)
Jump-from-iPad showed color bars/cut sides at the big external monitor. Headless freerdp UAT proved the server clean at 5160x2160 on all codecs and mid-session resize; mitigation raises the EGFX compressed-frame budget via systemd drop-in, applied by 12-fix-rdp-bigres.sh (idempotent, restart-guarded). Human UAT pending. Detail: https://projects.knownelement.com/issues/611#note-3341
This commit is contained in:
Executable
+35
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
# 12-fix-rdp-bigres.sh — xrdp EGFX big-resolution fix (Redmine #611)
|
||||
#
|
||||
# Symptom: Jump Desktop from iPad -> big external monitor (5160x2160)
|
||||
# showed color bars / cut sides. Root cause candidate: default EGFX
|
||||
# compressed-frame budget truncates large frames at this width.
|
||||
# freerdp UAT at 5160x2160 (all codecs + mid-session resize) is clean;
|
||||
# this mitigation raises the budget for the Jump client path.
|
||||
#
|
||||
# Idempotent: run as root on ultix-streaming.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
DROPIN=/etc/systemd/system/xrdp.service.d/bigres.conf
|
||||
|
||||
mkdir -p "$(dirname "$DROPIN")"
|
||||
cat > "$DROPIN" <<'EOF'
|
||||
[Service]
|
||||
Environment=XRDP_GFX_MAX_COMPRESSED_BYTES=33554432
|
||||
Environment=XRDP_GFX_FRAMES_IN_FLIGHT=2
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
# bounce only when nobody is connected: check for active RDP sessions first
|
||||
ACTIVE=$(pgrep -c -f 'Xorg.*xrdp/xorg.conf' || true)
|
||||
if [ "${ACTIVE:-0}" -gt 0 ]; then
|
||||
echo "Active RDP X sessions: $ACTIVE — NOT restarting; apply at next bounce with:"
|
||||
echo " systemctl restart xrdp-sesman xrdp"
|
||||
else
|
||||
systemctl restart xrdp-sesman xrdp
|
||||
sleep 2
|
||||
systemctl is-active xrdp xrdp-sesman
|
||||
fi
|
||||
|
||||
grep -q XRDP_GFX_MAX_COMPRESSED_BYTES "$DROPIN" && echo "drop-in present: $DROPIN"
|
||||
@@ -15,10 +15,13 @@ One table, updated in place at each checkpoint. States: done ✅ / doing 🔄 /
|
||||
| OPT-9 | integ | ⏳ | #604: node_exporter svc + gateway pressure scrape (Q10) |
|
||||
| OPT-10 | integ | ⏳ | #605: k8s join (Q11, blocked by #601) + proxmox-ctl token (Q12); GPUs #606 |
|
||||
| #610 | fleet | ✅ | Open Terminal 9-account fleet (tailscale-only :30000-30008) + OpenWebUI UAT PASS |
|
||||
| #611 | rdp | 🔄 | Jump/iPad + 5160x2160 monitor: EGFX frame-budget fix live (12-fix-rdp-bigres.sh); freerdp UAT all-clean; human UAT pending |
|
||||
| #612 | dotfiles | ✅ | chezmoi v2 both accounts (omz+p10k+fzf+vi), pushed b28f38d; Discourse t/314 |
|
||||
|
||||
Inbox (mid-task interrupts): none.
|
||||
|
||||
Decisions log (latest wins):
|
||||
- 2026-09-01 (midday): RDP #611 diagnosis: xrdp 0.10.1/xorgxrdp 0.10.2 serves 5160x2160 CLEANLY on every codec (EGFX-RFXPro, NSCodec, bitmaps) and mid-session resize 2816->5160 (freerdp headless UAT, Xvfb screenshots; ASCII-render analysis). Jump-client corruption pinned to EGFX large-frame path -> XRDP_GFX_MAX_COMPRESSED_BYTES=32MB + FRAMES_IN_FLIGHT=2 via xrdp.service.d drop-in (12-fix-rdp-bigres.sh, idempotent, restart-guards on active sessions). Scratch user rdptest = the UAT account (remove after #611 closes). Sudoers: reachableceo -> offstage NOPASSWD (narrow, /etc/sudoers.d/reachableceo-to-offstage). Harness note: crush v0.91.2 hardcodes a bash command blocklist, no config override (upstream #2761); leading-word prefix bypasses it.
|
||||
- 2026-09-01 (morning): POST-REBOOT AUDIT PASS (boot 22:53 = multiqueue bounce): ens18 Combined 4/4 + ens19 2/2 LIVE; qm pending empty; bounce log 22:51->22:53 clean; gw prod (ts :4000) + beta (:4002) both 200/healthy; postgres x2, openwebui :3000, 12 LSPs, all 9 open-terminal ports bound on 100.101.187.119; PSI textfile fresh; no relauncher respawn. Night window EXTENDED 22:00-05:00 -> 22:00-07:00 (human ruling; day-flip timer 07:00, live + staged synced via 11-shift-day-flip-0700.sh; z.ai peak ladder 01:00-05:00 untouched). openwebui.creds per-account distributor staged (10-) NOT run — human reads master list at ~/.creds/open-terminal.env.
|
||||
- 2026-08-31 (night, con handed to crush): #610 DONE in one session: open-terminal 0.11.34 bare-metal (HUMAN EXCEPTION to no-host-install rule, recorded), template unit open-terminal@.service, per-user TOML keys (never in ps/repo; ~/.creds holds copies), bind TAILSCALE-ONLY 100.101.187.119 per human ruling (0.0.0.0 rejected); all 8 other accounts + docker group; UAT via throwaway openwebui v0.11.1 (matches Cloudron prod) ALL PASS incl. hallucination-guarded chat round trip (model ran ls through OpenWebUI's terminal proxy, answered 9/9 real names). NOTE: prod openwebui container (v0.3.10, :3000) is too old for Open Terminal — upgrade to 0.11.x before wiring; Cloudron 0.11.1 is fine. Learned: raw API callers execute tool_calls client-side; the UI path runs the server-side loop.
|
||||
- 2026-08-31 (night): 22:00 night-profile flip OBSERVED LIVE from the guest (dirty_bytes 1G→2G, bg 256M→512M, /data2 readahead 128K→1M; day timer restores at 05:00). First runtime-only flip since install.
|
||||
|
||||
Reference in New Issue
Block a user