Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 登錄界面截圖終極技巧:跨顯示管理器通用方案

編輯:關於 Linux

系統尚未啟動用戶會話時,常規截圖工具(gnome-screenshot, flameshot, spectacle)均無法工作。本文揭示利用 X Server 權限機制,在 GDM/LightDM/SDDM/KDM 等任意顯示管理器登錄界面實現高清截圖的通用技術原理與標準化操作流程。

一、核心原理:XAUTHORITY 與 DISPLAY

  • X Client 連接 X Server 需要兩個憑證:DISPLAY (如 :0) 指明服務器地址,XAUTHORITY 指向包含 MIT-MAGIC-COOKIE-1 的認證文件。
  • 顯示管理器啟動時會為自己的 X 會話生成唯一認證文件,路徑因 DM 而異:
顯示管理器典型 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

二、通用定位腳本:自動識別當前 DM 的認證文件

#!/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. 最後嘗試常見路徑 (同上)
...

三、標準截圖命令序列(Root 權限執行)

# 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 環境下的替代方案

若系統運行 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 專用)。
  • 虛擬機/遠程桌面:在 Hypervisor/VNC 客戶端直接截圖宿主畫面。

登錄界面進程識別示例

登錄界面截圖效果圖

七、總結

  1. 核心鑰匙:正確的 XAUTHORITY 文件 + DISPLAY=:0 + Root 權限。
  2. 通用定位策略:ps -eo pid,cmd | grep dm → /proc/PID/environ → 常見路徑兜底。
  3. 工具鏈:chvt 切換 VT → xwd -root 抓取 → convert 轉檔。
  4. Wayland 環境需用 grim 或宿主級截圖。

掌握此技巧,無論是文檔編寫、故障留證、安全審計,登錄界面截圖都將成為您指尖可得的能力。

Copyright © Windows教程網 All Rights Reserved