如何在登录界面截屏?

如何在登录界面截屏?
我不想在虚拟机中重新安装我的Ubuntu。

1我首先要找的是能够捕捉X输出的东西。在搜索“screenshot xserver”时,我找到了Linuxquestions.org上的这个答案 - Lekensteyn
这个相关的讨论可能会有所帮助:http://superuser.com/q/290432/120246 - Waldir Leoncio
我已经分享了一个脚本来完成这个任务,在这个网址http://askubuntu.com/questions/177067/capture-login-screen-not-sucssecful/447564#447564。 - Nafis Ahmad
9个回答

这篇博客可能会有所帮助: http://ptspts.blogspot.com/2010/02/how-to-create-screen-shot-of-gdm-login.html 安装ImageMagick以进行下面的图像文件格式转换:
sudo apt-get install imagemagick

创建一个辅助脚本:
echo 'DISPLAY=:0 XAUTHORITY=/var/lib/gdm/:0.Xauth xwd -root' >/tmp/shot.sh

确保您的登录屏幕处于活动状态(注销或重新启动计算机,并等待直到看到登录屏幕)。 以文本模式登录(按下Ctrl-Alt-F1),或使用SSH。 通过运行以下命令创建屏幕截图:
sudo bash /tmp/shot.sh >/tmp/shot.xwd

你现在可以登录了(首先按Ctrl-AltF7返回到GDM登录界面)。 将屏幕截图转换为JPEG和/或PNG格式。
convert -quality 50 /tmp/shot.xwd /tmp/shot.jpg
convert /tmp/shot.xwd /tmp/shot.png

在您喜欢的图像查看器中查看屏幕截图。

4最终我使用了sudo sh -c 'sleep 5s; xwd -display :0 -root | convert - screenshot.png',从虚拟控制台切换到登录屏幕,在5秒的休眠期间完成截图并转换为screenshot.png文件。 - ændrük
3我为lightdm做了一些调整。$ echo 'DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 xwd -root' >/tmp/shot.sh - popey

对于11.10和Lightdm及更高版本

您可以尝试在终端中运行unity-greeter --test-mode。它会在会话中显示登录屏幕。然后,您可以像通常使用其他应用程序一样对登录屏幕进行截图。

enter image description here


但这太泛泛了,任何修改都看不到。有没有办法测试当前的修改? - Ubuntuser
@Ubuntuser 据我所知是没有的。你正在测试哪个修改? - jokerdino
我正在测试指纹识别器。在登录界面和锁屏界面上显示得很好。我想要同时截取两个界面的屏幕截图。 - Ubuntuser
@Ubuntuser 我猜你所做的修改直接影响了lightdm而不是Unity-greeter?我不确定。我只是在推测。你可能想要提一个新问题。 - jokerdino

你可以试试这个:
gnome-screenshot -d 10

你不需要安装任何东西,只需输入命令并锁定屏幕,屏幕将在命令执行后的10秒内截图。
更重要的是,该命令将锁定屏幕,将截图复制到剪贴板,然后再次解锁屏幕。全部自动完成。
gnome-screensaver-command -l && sleep 2 && gnome-screenshot -c && loginctl unlock-session

screenshot of Ubuntu lock screen


3这绝对是我找到的最简单的解决方案。 - Caustic
1尝试了一切却一无所获,这些简单的指令终于解决了我的问题。非常感谢你。 - thiggy01
登录屏幕不是锁定屏幕。 - Roi

在终端中输入以下内容:
dm-tool add-nested-seat --fullscreen

就这样!像往常一样截屏吧。
按下Alt + F4关闭您登录屏幕的全屏窗口。

真美啊!天才! - Anwar
我也可以确认这个技巧在Ubuntu 18.10上完美运行。我认为这个技巧比shell脚本更简单、更快速。谢谢@afriend。 - Ade Malsasa Akbar

适用于 Ubuntu 14.04

上面的答案在我的Ubuntu 14.04中无效- 我搜索了一下,找到了这个可行的方法。

  1. 安装ImageMagick

    sudo apt-get install imagemagick
    
  2. 在您的主目录中创建一个名为shot.sh的文件,最好放在您的主文件夹中,并将以下代码粘贴到其中:

    chvt 7;
    sleep 5s;
    DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 xwd -root -out ~/screenshot.xwd;
    convert ~/screenshot.xwd ~/screenshot.png;
    rm ~/screenshot.xwd
    
  3. 使其可执行

    sudo chmod +x shot.sh
    
  4. 退出系统。按下Ctrl+Alt+F1进入控制台(tty1)并登录。使用以下命令运行脚本:

    sudo ./shot.sh
    
它会将您带回登录屏幕的图形界面(chvt 7),并在五秒后将截图保存在您的主目录中,文件名为screenshot.png。
这是我的:

enter image description here

来源:如何在Ubuntu Linux中截取登录屏幕的截图


我可以确认这个shell脚本在Ubuntu 18.10 Cosmic Cuttlefish和Unity 7.5.0上仍然有效。我可以一次成功地截屏。谢谢@Parto。 - Ade Malsasa Akbar

只是想提一下,在Ubuntu 10.04 LTS上做这个的时候,我遇到了很多问题 - 这是我的解决方案:
我在A机器上,通过ssh登录到B机器:
myusername@pcA:~$ ssh pcB
myusername@pcB's password: 
Linux pcB 2.6.32-44-generic #98-Ubuntu SMP Mon Sep 24 17:32:45 UTC 2012 i686 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/

myusername@pcB:~$ 

然后,我进行了几次尝试来截取屏幕截图,但都失败了。问题可以归结为xwininfo无法探测窗口状态。
myusername@pcB:~$  xwininfo
xwininfo:  unable to open display ''

myusername@pcB:~$ sudo xwininfo
[sudo] password for myusername: 
xwininfo:  unable to open display ''

myusername@pcB:~$ DISPLAY=:0.0 xwininfo
No protocol specified
xwininfo:  unable to open display ':0.0'

myusername@pcB:~$ DISPLAY=:0 xwininfo
No protocol specified
xwininfo:  unable to open display ':0'

嗯,事实证明,通过ssh定位X窗口的正确调用方式是DISPLAY=:0.0 sudo xwininfo ... - 也就是说,先设置DISPLAY=:0.0环境变量,然后再执行sudo命令,最后才是相应的X命令。
myusername@pcB:~$ DISPLAY=:0 sudo xwininfo

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

myusername@pcB:~$ DISPLAY=:0.0 sudo xwininfo -root

xwininfo: Window id: 0x109 (the root window) (has no name)

  Absolute upper-left X:  0
  Absolute upper-left Y:  0
  Relative upper-left X:  0
  Relative upper-left Y:  0
  Width: 1366
  Height: 768
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: ForgetGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +0+0  -0+0  -0-0  +0-0
  -geometry 1366x768+0+0

现在我们知道xwininfo可以探测状态,通过xwd也可以轻松地捕获屏幕截图,没有任何问题。
myusername@pcB:~$ DISPLAY=:0.0 sudo xwd -root > /tmp/shot.xwd

谢谢,这帮助我找到了gdm3正在使用的DISPLAY。然而,您的解决方案无法访问gdm使用的DISPLAY,因为您没有设置XAUTHORITY变量,导致出现“xwd: unable to open display: 0.0”错误。 - thiggy01

在 Lubuntu 20.04 中,您可以使用 jokerdino's answer 的 SDDM 版本,并调整主题。运行此命令以在会话中显示登录界面:
sddm-greeter --test-mode --theme /usr/share/sddm/themes/lubuntu

按下打印屏幕键,选择您想要的区域并保存。无需退出登录。

对于使用GDM3作为显示管理器的Ubuntu

我修改了@Niroshan、@Parto和@sdaau给出的答案,使其适用于像19.04(Disco Dingo)和20.04(Focal Fossa)这样的最新版本的Ubuntu。如下所示,这是一个非常简单的过程。

首先,您需要安装imagemagick软件包,其中包含在脚本中使用的所有程序来进行截图。

sudo apt install imagemagick

其次,您需要创建一个文件并粘贴脚本的内容,将虚拟控制台更改为gdm3的tty,等待10秒钟,当图像加载到屏幕上时,以所需格式对整个窗口进行截图。
#!/usr/bin/env bash
chvt 1
sleep 10
DISPLAY=:0.0 \
XAUTHORITY=/run/user/125/gdm/Xauthority \
import -window root gdm_shot.png

如你所见,这个脚本将$DISPLAY变量设置为gdm3使用的显示器号码,并将$XAUTHORITY变量设置为gdm3用于访问其X服务器的文件。与之前的答案有些不同,因为gdm3更改了显示器号码和存储其Xauthority文件的位置,这个问题有点棘手。
我们使用了imagemagick的import命令,而不是xwd,因为它不仅可以截屏,还可以一次性将其转换为.jpg或.png等格式。
最后,在将脚本设置为可执行文件(例如chmod +x gdm_screenshot.sh)之后,您需要退出当前的gnome会话,并进入任何可用的控制台(tty),例如按下Ctrl+Alt+F2。然后,您需要登陆并以root的身份运行脚本,使用sudo ./gdm_screenshot.sh
在运行脚本的目录中,您将得到一个GDM3屏幕的.png图像文件。
这是我第一次运行此脚本时拍摄的截图。

enter image description here


在Ubuntu 22.10(以及可能的一些早期版本)中,gdm3允许您通过键盘进行屏幕截图。@thiggy01或任何人:你知道这些截图图像文件可能放在哪里吗? - rphair

我编辑了"/etc/mdm/Init/Default"并添加了以下内容: scrot -d 5 -e 'mv $f /root' & 在"exit 0"这一行之前。
下次登录时,我数到五,嘟嘟声响起,然后我就可以在"/root"目录中找到我的截图了。