截取当前用户会话的屏幕截图

截取当前用户会话的屏幕截图

(如果我的术语在这里不太准确,请原谅我)

我设置了一个 cron 作业,用于scrot以不同的时间间隔截取我的桌面屏幕截图。

但是,当我切换用户到另一个帐户(未注销)时,返回的屏幕截图只是锁定屏幕的屏幕截图。

有什么办法可以获取当前用户会话的屏幕截图吗?也就是说实际上屏幕上?

答案1

就 X11 而言,当您切换到另一个用户时,该用户会处于完全不同的显示中。

在您的会话中,如果您执行:

echo $DISPLAY

您将拥有:0第一个虚拟显示器。在第二个用户中,同样会为您提供:1第二个显示器。

您可以使用以下命令查看正在使用的屏幕w

[romano:~] % w  
 11:32:03 up  1:05,  8 users,  load average: 0,10, 0,24, 0,30
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
romano   :0       :0               10:27   ?xdm?   6:25   0.13s gdm-session-wor
romano   pts/1    :0               11:03   26:49   0.10s  0.10s zsh
romano   pts/3    :0               11:21    0.00s  0.12s  0.01s w
default  :1       :1               11:24   ?xdm?   6:25   0.07s gdm-session-wor
default  pts/15   :1               11:24    1:56   0.05s  0.05s bash

能够从一个屏幕截取另一个屏幕的屏幕截图,或者从另一个用户(被“截取”的用户)截取屏幕截图必须发出命令

xhost + 

以启用访问权限(root否则甚至无法执行快照)。之后,您可以执行

DISPLAY=:1 scrot 

来自脚本或其他用户。请注意,如果您拍摄的屏幕不是活动的(显示的),您将看到黑屏或奇怪的事情 --- 谁知道视频缓冲内存中有什么...

现在您需要编写一个脚本来探索所有这些...您原则上应该检测哪个用户处于活动状态(这并不容易 --- 或者简单地拍摄整个屏幕然后丢弃黑色的)并进行截图。

祝你好运!

答案2

您需要将屏幕截图存储在公共可视区域,并且 xserver 会在用户切换时锁定屏幕(虽然没有得到证实,但是一种合理的假设)。您可能需要设置一个 xserver 以将其显示到主目录中的文件中,这样当调用 cron 作业时,您就可以启动 xserver 将屏幕呈现到文件中,而不是显示出来。

答案3

当您切换到其他用户时,您将为新用户打开一个新会话,而第一个用户的旧会话仅在登录时有效。这是 cron 的正常状态,cron 与第一个用户相关联,因此它只会与他的会话一起工作。

我希望你明白我的意思。我的英语不是很好,为了让其他用户也能使用,你必须为第二个用户创建相同的 cron,这样你才能为每个用户拍摄照片。

相关内容