在圖形登入管理器(GDM、LightDM、SDDM、MDM 等)畫面截圖,屬於「系統尚未完全啟動、用戶會話未建立」的特殊場景。常規截圖工具(gnome-screenshot、Spectacle、flameshot)皆失效。本文揭示核心關鍵——正確的 XAUTHORITY 權威檔路徑,搭配 chvt 切換虛擬終端、xwd 截取根視窗、convert 轉檔,讓你在任何發行版的登入畫面都能精準截圖。


# 1. 切換到登入畫面所在的虛擬終端(通常是 VT7 或 VT8)
chvt 8
# 2. 給予畫面繪製緩衝時間
sleep 5
# 3. 關鍵:指定正確的 XAUTHORITY,截取根視窗
DISPLAY=:0.0 XAUTHORITY=/var/lib/gdm/:0.Xauth xwd -root > /tmp/shot.xwd
# 4. 轉換為通用格式(PNG)
convert /tmp/shot.xwd /tmp/login_screen.png
不同登入管理器(Display Manager, DM)的權威檔路徑不同,**必須根據實際運行的 DM 調整**
| 顯示管理器 | 典型發行版 | XAUTHORITY 路徑範例 |
|---|---|---|
| GDM (GNOME) | Ubuntu 17.10+、Fedora、RHEL 8+、Debian GNOME | /run/user/125/gdm/Xauthority 或 /var/lib/gdm/:0.Xauth |
| LightDM | Ubuntu 17.04 前、Xubuntu、Lubuntu、Linux Mint Xfce | /var/run/lightdm/root/:0 或 /var/lib/lightdm/.Xauthority |
| SDDM (KDE) | Kubuntu、KDE Neon、openSUSE、Fedora KDE | /var/run/sddm/{random}.xauth 或 /var/lib/sddm/.Xauthority |
| MDM (Mint Display Manager) | Linux Mint (舊版) | /var/lib/mdm/:0.Xauth |
| LXDM | LXDE 發行版 | /var/run/lxdm/lxdm-:0.auth |
systemctl status display-manager.service
# 輸出範例:
# ● display-manager.service - GNOME Display Manager
# Loaded: loaded (/usr/lib/systemd/system/gdm.service; enabled)
# Active: active (running) since ...
# 即可確認是 GDM
ps aux | grep -E '(gdm|lightdm|sddm|mdm|lxdm)' | grep -v grep
# 輸出範例:
# root 1234 0.0 0.5 ... gdm
# 確認為 GDM
cat /etc/X11/default-display-manager
# 輸出:/usr/sbin/gdm3 → GDM
#!/bin/bash
# login_screenshot.sh - 需 root 執行
set -euo pipefail
# 1. 自動偵測 DM 並決定 XAUTHORITY
detect_xauthority() {
local dm
dm=$(systemctl show -p Id display-manager.service --value 2>/dev/null | sed 's/\.service$//')
case "$dm" in
gdm|gdm3) echo "/run/user/125/gdm/Xauthority" ;;
lightdm) echo "/var/run/lightdm/root/:0" ;;
sddm) ls /var/run/sddm/*.xauth 2>/dev/null | head -1 ;;
mdm) echo "/var/lib/mdm/:0.Xauth" ;;
lxdm) echo "/var/run/lxdm/lxdm-:0.auth" ;;
*) echo "/var/lib/gdm/:0.Xauth" ;; # 回退
esac
}
XAUTH=$(detect_xauthority)
[[ -f $XAUTH ]] || { echo "ERROR: Xauthority not found at $XAUTH"; exit 1; }
# 2. 切換 VT(嘗試 7, 8, 1)
for vt in 7 8 1; do
chvt "$vt"
sleep 3
if DISPLAY=:0.0 XAUTHORITY="$XAUTH" xwd -root -silent > /tmp/shot.xwd 2>/dev/null; then
break
fi
done
# 3. 轉檔
convert /tmp/shot.xwd "/tmp/login_screen_$(date +%F_%H-%M-%S).png"
echo "Screenshot saved to /tmp/login_screen_*.png"
GNOME/KDE 預設已遷移至 Wayland,XWayland 相容層仍支援上述 X11 指令,**但若 DM 純 Wayland(無 XWayland)則需改用**:
grim(需 wlroots 協議支援)dbus-send --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Screenshot(GNOME 專用)nomodeset 強制 X11 模式(僅測試用)。| 常見錯誤 | 原因 | 解決 |
|---|---|---|
Xlib: connection to ":0.0" refused by server | XAUTHORITY 路徑錯誤或權限不足 | 確認檔案存在、root 可讀、DM 確實運行 |
xwd: unable to open display | DISPLAY 變數錯誤或 VT 未切換正確 | 嘗試 DISPLAY=:0、切換 VT 1/7/8 |
| 截圖全黑 | 顯卡驅動/合成器問題 | 嘗試 xwd -root -display :0.0、關閉 compositing |
| VirtualBox/VMware 客體機截圖失敗 | 虛擬顯卡無根視窗 | 改用宿主機截圖工具、或啟用 3D 加速 |
登入畫面截圖的核心難點在於XAUTHORITY 權威檔的精準定位。掌握 systemctl status display-manager 偵測 DM、對照路徑表設定 XAUTHORITY、搭配 chvt 切換虛擬終端、xwd -root 截取根視窗,即可在任何主流 Linux 發行版的登入介面(GDM/LightDM/SDDM/MDM)獲得高清截圖。將此技巧封裝為腳本納入文檔庫,下次撰寫安裝教學、主題美化記錄時不再煩惱。