萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 登入畫面截圖終極技巧:XAUTHORITY 與 chvt 實戰詳解

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

登入管理器進程識別

登入畫面截圖效果

核心命令序列(需 root 權限)

# 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

關鍵變數:XAUTHORITY 路徑對照表

不同登入管理器(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
LightDMUbuntu 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
LXDMLXDE 發行版/var/run/lxdm/lxdm-:0.auth

如何精準識別當前系統使用的 DM?

方法一:檢查 systemd 服務狀態(最可靠)

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

方法二:查找含「dm」的進程

ps aux | grep -E '(gdm|lightdm|sddm|mdm|lxdm)' | grep -v grep
# 輸出範例:
# root      1234  0.0  0.5  ... gdm
# 確認為 GDM

方法三:檢查 /etc/X11/default-display-manager

cat /etc/X11/default-display-manager
# 輸出:/usr/sbin/gdm3  → GDM

完整自動化腳本(自動偵測 DM、截圖、轉檔)

#!/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"

進階:Wayland 環境下的登入畫面截圖

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 專用)
  • 或在 GRUB 參數加入 nomodeset 強制 X11 模式(僅測試用)。

避坑指南

常見錯誤原因解決
Xlib: connection to ":0.0" refused by serverXAUTHORITY 路徑錯誤或權限不足確認檔案存在、root 可讀、DM 確實運行
xwd: unable to open displayDISPLAY 變數錯誤或 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)獲得高清截圖。將此技巧封裝為腳本納入文檔庫,下次撰寫安裝教學、主題美化記錄時不再煩惱。

copyright © 萬盛學電腦網 all rights reserved