Treat LVDS panels as internal displays (#6752)
* Treat LVDS panels as internal displays * Test empty DRM monitor discovery
This commit is contained in:
@@ -2,8 +2,11 @@
|
|||||||
|
|
||||||
# omarchy:summary=Returns true when an external monitor is physically connected.
|
# omarchy:summary=Returns true when an external monitor is physically connected.
|
||||||
|
|
||||||
for status in /sys/class/drm/card*-*/status; do
|
drm_path="${OMARCHY_DRM_PATH:-/sys/class/drm}"
|
||||||
[[ $status == *-eDP-*/status ]] && continue
|
|
||||||
|
for status in "$drm_path"/card*-*/status; do
|
||||||
|
[[ -e $status ]] || continue
|
||||||
|
[[ $status =~ -(eDP|LVDS|DSI)-[^/]+/status$ ]] && continue
|
||||||
[[ $(< $status) == "connected" ]] && exit 0
|
[[ $(< $status) == "connected" ]] && exit 0
|
||||||
done
|
done
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
|
||||||
|
|
||||||
|
test_tmp=$(mktemp -d)
|
||||||
|
trap 'rm -rf "$test_tmp"' EXIT
|
||||||
|
|
||||||
|
drm_path="$test_tmp/drm"
|
||||||
|
|
||||||
|
write_connectors() {
|
||||||
|
rm -rf "$drm_path"
|
||||||
|
mkdir -p "$drm_path"
|
||||||
|
|
||||||
|
local connector state
|
||||||
|
while (( $# )); do
|
||||||
|
connector="$1"
|
||||||
|
state="$2"
|
||||||
|
mkdir -p "$drm_path/card0-$connector"
|
||||||
|
printf '%s\n' "$state" >"$drm_path/card0-$connector/status"
|
||||||
|
shift 2
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
has_external_monitor() {
|
||||||
|
OMARCHY_DRM_PATH="$drm_path" "$ROOT/bin/omarchy-hw-external-monitors"
|
||||||
|
}
|
||||||
|
|
||||||
|
write_connectors
|
||||||
|
set +e
|
||||||
|
empty_error=$(has_external_monitor 2>&1 >/dev/null)
|
||||||
|
empty_status=$?
|
||||||
|
set -e
|
||||||
|
|
||||||
|
(( empty_status != 0 )) || fail "an empty DRM tree has no external display"
|
||||||
|
[[ -z $empty_error ]] || fail "an empty DRM tree is handled quietly" "$empty_error"
|
||||||
|
pass "physical monitor detection handles an empty DRM tree"
|
||||||
|
|
||||||
|
for connector in eDP-1 LVDS-1 DSI-1; do
|
||||||
|
write_connectors "$connector" connected
|
||||||
|
|
||||||
|
if has_external_monitor; then
|
||||||
|
fail "$connector is treated as an internal display"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
pass "physical monitor detection ignores common internal panel connectors"
|
||||||
|
|
||||||
|
write_connectors LVDS-1 connected DP-1 connected
|
||||||
|
has_external_monitor || fail "external display is found alongside an LVDS panel"
|
||||||
|
pass "physical monitor detection finds an external display alongside an LVDS panel"
|
||||||
|
|
||||||
|
write_connectors eDP-1 connected HDMI-A-1 disconnected
|
||||||
|
if has_external_monitor; then
|
||||||
|
fail "a disconnected external display is not reported as connected"
|
||||||
|
fi
|
||||||
|
pass "physical monitor detection ignores disconnected external displays"
|
||||||
|
|
||||||
|
write_connectors DP-1 connected
|
||||||
|
has_external_monitor || fail "external-only systems still report a connected display"
|
||||||
|
pass "physical monitor detection still supports external-only systems"
|
||||||
Reference in New Issue
Block a user