系統尚未啟動用戶會話時,常規截圖工具(gnome-screenshot, flameshot, spectacle)均無法工作。本文揭示利用 X Server 權限機制,在 GDM/LightDM/SDDM/KDM 等任意顯示管理器登錄界面實現高清截圖的通用技術原理與標準化操作流程。
DISPLAY (如 :0) 指明服務器地址,XAUTHORITY 指向包含 MIT-MAGIC-COOKIE-1 的認證文件。| 顯示管理器 | 典型 XAUTHORITY 路徑 |
|---|---|
| GDM (GNOME) | /run/user/0/gdm/Xauthority 或 /var/lib/gdm/:0.Xauth |
| LightDM (Ubuntu/Xfce) | /var/run/lightdm/root/:0 或 /var/lib/lightdm/.Xauthority |
| SDDM (KDE Plasma) | /var/run/sddm/{uuid} 或 /var/lib/sddm/.Xauthority |
| KDM (舊 KDE) | /var/run/kdm/A:0- |
| MDM (Mint) | /var/lib/mdm/:0.Xauth |
#!/bin/bash
# get_dm_xauthority.sh - 輸出當前登錄界面的 XAUTHORITY 路徑
# 1. 找出擁有 :0 顯示的進程 (通常是 DM 自身)
dm_pid=$(ps -eo pid,cmd | awk '/[:0].*(gdm|lightdm|sddm|kdm|mdm)-binary/ {print $1; exit}')
if [[ -z "$dm_pid" ]]; then
# 兜底:嘗試常見路徑
for f in \
/run/user/0/gdm/Xauthority \
/var/lib/gdm/:0.Xauth \
/var/run/lightdm/root/:0 \
/var/lib/lightdm/.Xauthority \
/var/run/sddm/* \
/var/lib/sddm/.Xauthority \
/var/lib/mdm/:0.Xauth; do
[[ -f "$f" ]] && { echo "$f"; exit 0; }
done
echo "ERROR: Cannot locate DM Xauthority" >&2
exit 1
fi
# 2. 從進程環境變量讀取 XAUTHORITY
xauth_file=$(grep -z XAUTHORITY /proc/"$dm_pid"/environ 2>/dev/null | cut -d= -f2-)
if [[ -n "$xauth_file" && -f "$xauth_file" ]]; then
echo "$xauth_file"
exit 0
fi
# 3. 最後嘗試常見路徑 (同上)
...
# 1. 切換到登錄界面所在的虛擬終端 (通常 VT7 或 VT1)
chvt 7 # 或 1,取決於發行版
# 2. 給 DM 一點繪製時間
sleep 3
# 3. 獲取 XAUTHORITY (使用上述腳本或手動指定)
export XAUTHORITY=$(./get_dm_xauthority.sh)
export DISPLAY=:0
# 4. 使用 xwd 抓取根窗口,轉換為 PNG
xwd -root -silent | convert - /tmp/login_screen_$(date +%F_%H%M%S).png
# 5. 完成
echo "Screenshot saved to /tmp/login_screen_*.png"
chvt N:切換到第 N 個虛擬終端 (VT),登錄界面通常在 VT1 (systemd) 或 VT7 (傳統)。xwd -root:X Window Dump,捕獲根窗口像素數據(需正確 XAUTHORITY)。convert (ImageMagick):將 xwd 格式轉換為 PNG/JPG 等通用格式。# 方法 1:查看包含 dm 關鍵字的進程
ps -eo pid,cmd | grep -E '(gdm|lightdm|sddm|kdm|mdm)-binary' | grep -v grep
# 方法 2:systemd 服務狀態
systemctl status display-manager.service
# 輸出中 Loaded 行顯示實際單元名,如 gdm.service, sddm.service
# 方法 3:檢查 /etc/X11/default-display-manager
cat /etc/X11/default-display-manager
# /usr/sbin/gdm3 等
#!/bin/bash
# login_screenshot.sh - 一鍵截取登錄界面
set -euo pipefail
OUT_DIR="/root/login_screenshots"
mkdir -p "$OUT_DIR"
TIMESTAMP=$(date +%F_%H%M%S)
OUT_FILE="$OUT_DIR/login_${TIMESTAMP}.png"
# 1. 定位 XAUTHORITY
XAUTH_FILE=""
for f in \
/run/user/0/gdm/Xauthority \
/var/lib/gdm/:0.Xauth \
/var/run/lightdm/root/:0 \
/var/lib/lightdm/.Xauthority \
/var/run/sddm/* \
/var/lib/sddm/.Xauthority \
/var/lib/mdm/:0.Xauth; do
if [[ -f "$f" ]]; then
XAUTH_FILE="$f"
break
fi
done
if [[ -z "$XAUTH_FILE" ]]; then
echo "ERROR: Xauthority not found" >&2
exit 1
fi
# 2. 切換 VT (嘗試 1, 7)
for vt in 1 7; do
chvt "$vt"
sleep 2
# 3. 嘗試截圖
if XAUTHORITY="$XAUTH_FILE" DISPLAY=:0 xwd -root -silent 2>/dev/null | convert - "$OUT_FILE" 2>/dev/null; then
[[ -s "$OUT_FILE" ]] && { echo "SUCCESS: $OUT_FILE"; exit 0; }
fi
done
echo "FAILED: All VT attempts exhausted" >&2
exit 1
使用:chmod +x login_screenshot.sh && sudo ./login_screenshot.sh
若系統運行 Wayland (GNOME 默認),X11 工具鏈失效。改用:
grim (需 wlroots 支持):grim /tmp/login.png (需在 Wayland 會話內)。dbus-send --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Screenshot (GNOME 專用)。

ps -eo pid,cmd | grep dm → /proc/PID/environ → 常見路徑兜底。chvt 切換 VT → xwd -root 抓取 → convert 轉檔。grim 或宿主級截圖。掌握此技巧,無論是文檔編寫、故障留證、安全審計,登錄界面截圖都將成為您指尖可得的能力。
CentOS 6.5 安裝無線網卡驅動 (Realtek RTL8188CE) 完整編譯教學
Linux 不同用戶間複製檔案兩大實用方法(/tmp 中轉 / scp 本地傳輸)
traceroute 追蹤網路路徑:Linux/Windows 差異、TTL 原理、三次探測、參數全表、防火牆導致星號、DNS 解析延遲、跳數限制、IDC 故障回報
Linux 中文字符亂碼徹底解決:字體、輸入法、Locale 三位一體配置
Ubuntu 13.10 搶先安裝 Linux 3.12 核心:下載官方 .deb 套件直接安裝
Linux VirtualBox 安裝 Windows 8.1 報錯 0x000000C4 解決:啟用 CMPXCHG16B CPU 指令支援