#!/bin/bash
# ============================================================================
#  igpu-check.sh —— 核显启用状态一键检测（改完 BIOS 后跑这个）
#  用法：bash igpu-check.sh
#  判读：
#    · 出现 "Intel ... VGA/Display" → 核显已在 OS 里枚举（BIOS 已开启）
#    · 出现 i915 模块 + card0(i915) → 驱动已加载，主板 HDMI/DP 口可用
#    · 仍只有 NVIDIA 一张卡         → 核显在 BIOS 里还是关的（Auto 常见结果）
# ============================================================================
PW=yueling408
SUDO() { printf '%s\n' "$PW" | sudo -S -p '' "$@"; }

echo "===== 1. 引导方式 ====="
if [ -d /sys/firmware/efi ]; then
    echo "UEFI ✓（尔英要求：11 代起核显必须 UEFI/GPT）"
else
    echo "Legacy BIOS ✗ —— 按尔英说明，此模式下核显不可用"
fi
SUDO parted -l 2>/dev/null | grep -m1 "Partition Table" | sed 's/^/  /'

echo "===== 2. PCI 显示设备 ====="
lspci -nn | grep -Ei "vga|3d controller|display" | sed 's/^/  /' || echo "  无"
if lspci -nn | grep -qi "\[8086:"; then
    lspci -nn | grep -Ei "vga|display" | grep -qi "\[8086:" \
        && echo "  → 检测到 Intel 显示设备 ✓" \
        || echo "  → 有 Intel 芯片组设备，但没有 Intel 显示设备（核显仍关着）"
fi

echo "===== 3. 显卡驱动模块 ====="
lsmod | grep -E "^(i915|xe|nvidia|nvidia_drm) " | sed 's/^/  /' || true
lsmod | grep -q "^i915 " && echo "  → i915 已加载 ✓" || echo "  → i915 未加载（核显未启用）"
dmesg 2>/dev/null | grep -iE "i915|intel.*(graphics|display)" | head -3 | sed 's/^/  dmesg: /'

echo "===== 4. DRM 卡与接口状态 ====="
for d in /sys/class/drm/card[0-9]; do
    n=$(basename "$d")
    drv=$(basename "$(readlink -f "$d/device/driver" 2>/dev/null)" 2>/dev/null)
    ven=$(cat "$d/device/vendor" 2>/dev/null)
    case "$ven" in 0x8086) who=Intel;; 0x10de) who=NVIDIA;; *) who=其他;; esac
    echo "  $n  driver=$drv  vendor=$ven ($who)"
done
for s in /sys/class/drm/card*-*/status; do
    printf "    %-28s %s\n" "$(basename "$(dirname "$s")")" "$(cat "$s")"
done 2>/dev/null | sort

echo "===== 5. 当前控制台帧缓冲与显存 ====="
echo "  fb0: $(cat /sys/class/graphics/fb0/name 2>/dev/null) $(cat /sys/class/graphics/fb0/virtual_size 2>/dev/null)"
echo "  控制台字体: $(grep -E '^FONTFACE|^FONTSIZE' /etc/default/console-setup | tr '\n' ' ')"
echo -n "  控制台网格: "; tmux list-clients -F '#{client_width}x#{client_height}' 2>/dev/null | head -1
nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader 2>/dev/null | sed 's/^/  显存: /'
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv,noheader 2>/dev/null | sed 's/^/  计算进程: /' | head -5

echo "===== 结论 ====="
if lspci -nn | grep -Ei "vga|display" | grep -qi "\[8086:"; then
    echo "  核显已在系统中出现 → 主板 HDMI/DP 口插线即可出画面（唯一例外：BIOS 里 Primary Display 仍指向独显时，POST 画面可能仍在独显口）"
else
    echo "  核显未出现 → BIOS 里仍是关闭状态。需设：Internal Graphics / iGPU Multi-Monitor = Enabled，"
    echo "  并把 Primary Display 设为 IGFX（或 Auto + 开启多显共存），保存重启后再跑本脚本。"
fi
