Desktop-mode external display blackout diagnosis and remediation - #30
Merged
Conversation
Covers the docked desktop-mode gap from #29: display_blackout.sh now inspects connected non-eDP connectors in a KWin session, matches each display's EDID md5 against the stored KWin output policy, and classifies a declared physical-black symptom with a healthy deck-side link as FULLSCREEN_SYNC_POLICY_GAP or SYNC_POLICY_ALREADY_PINNED. A guarded rem_external_display.sh behind --fix-external-display-blackout pins adaptive sync off via kscreen-doctor with config backup and live plus persisted verification. A connected-but-disabled internal panel no longer shadows the external diagnosis. Field-validated on a Jupiter LCD in a docked KWin session where fullscreen VRR engagement blanked a 1080p60 monitor with zero deck-side DRM events; vrrpolicy.never stopped the blanking and persisted per-EDID. Closes #29 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V1n18hseXF7gTZPEPbWJhH
Owner
Author
Code reviewFound 2 issues:
🤖 Generated with Claude Code - If this code review was useful, please react with 👍. Otherwise, react with 👎. |
An unreadable KWin output policy (missing config, no matching edidHash, no md5sum) was classified as SYNC_POLICY_ALREADY_PINNED, steering users away from the fix exactly on first occurrence; it now reports a distinct SYNC_POLICY_UNDETERMINED that recommends the reversible remediation. Per-connector policy state is tracked across all external displays so a pinned display cannot mask an unpinned one, and the internal and external assessments are independent so an extended desktop reports both. rem_external_display.sh VERIFY is scoped to each targeted output (live per-Output stanza, persistence per-EDID) so a policy already pinned elsewhere or a stale entry can no longer false-pass. Tests cover the undetermined path and the scoping contract. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V1n18hseXF7gTZPEPbWJhH
Owner
Author
|
Both review findings addressed in 91b14b4: an unreadable policy now reports |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #29.
What
display_blackout.sh: new read-only "External display / desktop session" section. Enumerates connected non-eDP connectors, detects an active KWin session, matches each display's EDID md5 against the stored policy inkwinoutputconfig.json, and reports the per-displayvrrPolicy. With--display-blackdeclared and a healthy deck-side path it emits:EXTERNAL_BLACKOUT_SIGNATURE: FULLSCREEN_SYNC_POLICY_GAP— adaptive sync not pinned; recommends the new remediationEXTERNAL_BLACKOUT_SIGNATURE: SYNC_POLICY_ALREADY_PINNED— routes investigation to the dock segment/cable/monitorrem_external_display.sh(new, behind--fix-external-display-blackout): prechecks (symptom declared, KWin active, Wayland socket, external connector present), backs upkwinoutputconfig.json, applieskscreen-doctor output.<name>.vrrpolicy.neverthrough the session user, verifies both live state and per-EDID persistence. Same safety contract as the internal-panel remediation — no power/brightness/clock writes.LIVE_RENDER_TO_PHYSICAL_SCANOUT_GAP, shadowing the external diagnosis. The internal signature now requires the panel to be enabled in the output configuration.Testing
tests/test_runner.sh: all 33 tests pass. New Test 32 (fixture-driven signature classification incl. the disabled-panel shadowing regression) and Test 33 (remediation safety contract + flag wiring). Module count check updated 21→22.SYNC_POLICY_ALREADY_PINNED; remediation ran its full precheck→backup→execute→verify lifecycle as root with session routing viarunuser. This is the same unit where fullscreen VRR engagement caused repeated monitor blanking with provably zero deck-side DRM events (DP+KMS debug enabled during active blanking), and wherevrrpolicy.neverstopped it.🤖 Generated with Claude Code
https://claude.ai/code/session_01V1n18hseXF7gTZPEPbWJhH