(如果我的术语在这里不太准确,请原谅我)
我设置了一个 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,这样你才能为每个用户拍摄照片。