hdmi-test.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/bash
  2. # hdmi test
  3. # HDMI 功能测试脚本
  4. # 用途:检测 HDMI 视频 + 音频输出功能
  5. # 获取 HDMI 接口名称
  6. HDMI_PORT=$(xrandr | grep -oE '^DP[^ ]*|^HDMI[^ ]*' )
  7. if [ -z "$HDMI_PORT" ]; then
  8. echo "❌ 未检测到 HDMI 接口,请检查驱动和连接。"
  9. exit 1
  10. fi
  11. echo "✅ 检测到 HDMI 接口: $HDMI_PORT"
  12. # 检查 HDMI 是否连接
  13. CONNECTED=$(xrandr | grep "^$HDMI_PORT connected")
  14. if [ -z "$CONNECTED" ]; then
  15. echo "❌ HDMI 未连接,请插入 HDMI 显示器。"
  16. exit 1
  17. fi
  18. echo "✅ HDMI 已连接"
  19. echo $HDMI_PORT
  20. # 获取内屏接口(假设 eDP-1 或 LVDS)
  21. INTERNAL_PORT=$(xrandr | grep -E '^eDP|^LVDS' | awk '{print $1}' | head -n 1)
  22. if [ -z "$INTERNAL_PORT" ]; then
  23. echo "⚠ 未检测到内屏接口,可能是台式机。"
  24. else
  25. echo "✅ 内屏接口: $INTERNAL_PORT"
  26. fi
  27. echo $HDMI_PORT
  28. # 视频测试:设置镜像模式
  29. if [ -n "$INTERNAL_PORT" ]; then
  30. echo "▶ 设置镜像模式..."
  31. xrandr --output "$HDMI_PORT" --auto --same-as "$INTERNAL_PORT"
  32. else
  33. echo "▶ 开启 HDMI 输出..."
  34. xrandr --output "$HDMI_PORT" --auto
  35. fi
  36. sleep 2
  37. echo $HDMI_PORT
  38. # 分辨率切换测试
  39. echo "▶ 开始分辨率切换测试..."
  40. MODES=$(xrandr | sed -n "/^$HDMI_PORT/,/^[^ ]/p" | grep -Eo '^[ ]+[0-9]+x[0-9]+' | awk '{print $1}' | sort -u)
  41. for mode in $MODES; do
  42. echo "切换到分辨率 $mode"
  43. xrandr --output "$HDMI_PORT" --mode "$mode"
  44. sleep 2
  45. done
  46. # 音频测试
  47. echo "▶ 检查 HDMI 音频设备..."
  48. HDMI_CARD=$(aplay -l | grep HDMI | head -n 1 | awk -F'[: ,]+' '{print $2}')
  49. HDMI_DEVICE=$(aplay -l | grep HDMI | head -n 1 | awk -F'[: ,]+' '{print $6}')
  50. if [ -n "$HDMI_CARD" ] && [ -n "$HDMI_DEVICE" ]; then
  51. echo "✅ 检测到 HDMI 音频设备: card=$HDMI_CARD, device=$HDMI_DEVICE"
  52. echo "▶ 播放音频测试..."
  53. speaker-test -D hdmi:CARD=$HDMI_CARD,DEV=$HDMI_DEVICE -c 2 -t wav -l 1
  54. else
  55. echo "❌ 未检测到 HDMI 音频设备,请检查声卡驱动。"
  56. fi
  57. echo "✅ HDMI 功能测试完成"