如何使用命令行和 wmctrl 使窗口大于屏幕以获取巨大的屏幕截图?

如何使用命令行和 wmctrl 使窗口大于屏幕以获取巨大的屏幕截图?

我使用一个程序来制作一张大图像,我必须滚动才能查看。该程序无法保存图像,我也无法访问源代码来修改它。我从程序中获取图像的唯一方法是通过屏幕截图。我的目标是保存全尺寸图像,而不必将各个屏幕截图拼凑在一起。

我正在使用这个脚本尝试截取屏幕截图:

#!/bin/bash
window=$(wmctrl -l | grep "Program$" | awk '{print $1}')
wmctrl -v -i -r $window -e '0,0,0,6030,5828'
wmctrl -i -a $window
import -window $window ~/Desktop/screenshot.png

它使用 wmctrl 获取名为“Program”的窗口的窗口 ID ($window)。然后尝试将窗口大小调整为所需尺寸。它使用 imagemagick (import) 将 screenshot.png 保存在用户的桌面上。除了调整大小步骤外,所有这些都有效。

我可以使用 wmctrl -r -e 调整窗口大小,但大于屏幕尺寸的尺寸不起作用。

我使用的是 Ubuntu 10.04 和 Gnome 桌面。我运行了两个显示器,但我尝试禁用其中一个。

有没有办法将窗口调整得比我的屏幕更大以获得更大的屏幕截图?

第二部分:

感谢 sdaau 的回答,我尝试使用 xrandr 设置屏幕平移,以便获得比我的显示器更大的桌面。

xrandr --output LVDS --panning 2600x2500

此命令使笔记本电脑屏幕平移到 2600x2500 大小的桌面上,即使它一次只能显示 1440x900。要关闭平移,我可以使用类似的命令来设置总大小,并将平移部分设置为零。这让我恢复了原来的笔记本电脑显示行为。

xrandr --fb 1440x900 --output LVDS --panning 0x0

这一切都是通过 xrandr 完成的,不需要任何 Xorg.conf 更改(我的 Ubuntu 系统甚至没有 Xorg.conf)。

我的视频卡似乎只允许大约 650 万像素,即使最大尺寸为 8192x8192。该最大值似乎是任一维度的最大值,但可以绘制的像素数有一个限制,即宽度乘以高度。

调整屏幕大小后,我再次尝试了脚本并截取了一张屏幕截图。但是,屏幕截图完全乱了套。我不确定它是否无法截取屏幕外窗口的屏幕截图,或者它是否无法处理窗口的大尺寸。使用平移显示,窗口应该认为它是可见的,窗口管理器应该认为它是在屏幕上。因此,某个地方有一个像素缓冲区,里面有这些像素,所以应该有办法截取屏幕截图。

也许还有其他截屏方法,可能比导入效果更好。

答案1

刚刚测试了import一个超出/大于屏幕尺寸的窗口;它似乎import可以捕获与大窗口大小相同的图像 - 不幸的是,超出屏幕尺寸的所有像素以及被其他窗口覆盖的所有像素都将是黑色。

因此,也许唯一的方法是使用xrandr放大屏幕尺寸(如“屏幕平移”) - 或者使用其他可以提供更大屏幕尺寸的东西:例如,“如何以高于浏览器支持的分辨率截取浏览器屏幕截图? - 超级用户“注释:

用于Xephyr创建嵌套的 X 会话

Xephyr显然是在sudo apt-get install xserver-xephyrUbuntu 中)

希望这有帮助,
干杯!

编辑:是的,xrandr对我来说,可以使用通常的 printscreen (也可以使用import,只需要足够的空间来容纳终端,这样它就不会与目标窗口重叠),只需注意虚拟尺寸xorg.conf(参见“xrandr:屏幕不能大于”...

相关内容