sda*_*aau 5 gnome xorg compiz screenshot
我经常需要截取比当前显示的桌面大的窗口。我在 Ubuntu 11.04 上,gnome-about说版本:2.32.1;compiz --versionCompiz 0.9.4.0 说——我有四个虚拟桌面/工作区,它们是这样安排的:


上面的图像是通过移动到每个单独的工作区,并通过 PrintScreen 键(即gnome-screenshot. (我知道有更好的获取firefox镜头的方法,例如“页面保护程序”插件 - 以上只是作为通用超大窗口的示例)。
编辑:我显然在这里使用了错误的命名法(通过xorg找到- 获取当前虚拟桌面 - 号码/名称/标签/id? - Unix 和 Linux) - 事实证明,在上面的例子中,我仍然只有一个工作区; 相反,改变的是视口 - 这是wmctrl -d每个“虚拟桌面”上显示的内容:
$ wmctrl -d 0 * DG:2048x1200 VP:0,0 WA:0,1 1024x598 工作区 1 $ wmctrl -d 0 * DG:2048x1200 VP:0,600 WA:0,1 1024x598 工作区 1 $ wmctrl -d 0 * DG:2048x1200 VP:1024,0 WA:0,1 1024x598 工作区 1 $ wmctrl -d 0 * DG:2048x1200 VP:1024,600 WA:0,1 1024x598 工作区 1
wmctrl -o 1024,0
显然,移动到每个虚拟桌面,截取屏幕截图并将它们拼接在一起 - 最后剪切应用程序窗口 - 有点乏味,所以我在徘徊是否有一个工具(最好是命令行)可以让我选择一个窗口比当前桌面还大,一口气截取其全部内容。这里也可能有两种情况:
第一种情况是可能的,如果不是以任何其他方式,然后手动(如我上面所做的那样)-对于第二种情况,我想应用程序应该可以将窗口短暂地“移动”到总数全桌面区域 - 或者创建一个未在屏幕上显示的“虚拟”图形上下文,并在那里渲染窗口(尽管我不知道足够的细节来确定)。
到目前为止,我已经尝试了以下工具:
gnome-screenshotxwd scrotimport (ImageMagick)并且它们都将只捕获整个应用程序窗口的一个“角落”,该窗口显示在当前桌面上(在如上所示的情况下)。当尝试捕获“root”或“全屏”时,所有这些都只捕获当前呈现的桌面(而不是所有虚拟桌面的总面积)。
我也尝试过shutter(0.87.2 Rev.1071),虽然我发现从0.86.4版本开始的信息,“你现在可以捕获所有虚拟桌面。快门会通过所有这些,给每个人拍照并将它们组合成一个大屏幕截图”-我确实尝试单击“捕获所有工作区”-但它只拍摄了当前工作区/桌面的快照;窗口捕获同样会在当前桌面的限制处剪切(或失败并显示“截屏时出错:可能无法抓取鼠标指针或所选区域无效。 ”如果窗口完全位于当前桌面以外的虚拟桌面中一)。
然后我读到有一个截图插件compiz- 因为这里compiz管理虚拟桌面,我认为它可以处理整个区域 - 但那里没有设置(在 CompizConfig 设置管理器中),但是:“启用插件”,一个输出目录,以及一个按钮,用于为“启动矩形屏幕截图”启用和设置热键——显然你唯一能做的就是用鼠标拖动来指定一个矩形区域,我怀疑该插件是否有助于一次性捕获整个区域.
因此,我想问一些关于工具的建议,可以:
我更喜欢在内存中处理这些东西的东西 - 我自己可以想出更糟糕的东西:例如bash发送按键以更改桌面(或仅通过wmctrl)的脚本,并在那里获取单独的屏幕截图 - 但这会很痛苦使用,特别是因为我会在捕获屏幕截图时在视觉上暴露于“桌面切换”......如果没有任何完整的程序,建议 C/Perl/Python API 可以访问所有/任何虚拟机台式机也很棒。
好的,找到了 X windows 的这个:
\n\nFVWM 论坛 \xe2\x80\xa2 查看主题 - 在另一个视口上缩略图窗口
\n\n\n\n\n至于为什么无法访问窗口(即,当它与当前视口不在同一桌面/页面上时对其拍照)是因为不在当前页面上的窗口未映射。当人们更改页面/桌面时,情况就是如此——窗口未映射,并且当前视口上的窗口被重新映射。
\n
所以,我想这意味着我想要的东西是不可能的?尽管有两种解决方法:
\n\nxrandr增加(四个)视口的虚拟大小这对我有用 - 首先查询以查看您想要的输出,然后执行:
\n\n$ xrandr -q\nScreen 0: minimum 320 x 200, current 1024 x 600, maximum 4096 x 4096\nLVDS1 connected 1024x600+0+0 (normal left inverted right x axis y axis) 0mm x 0mm\n 1024x600 60.0*+\n 800x600 60.3 56.2 \n 640x480 59.9 \nVGA1 disconnected (normal left inverted right x axis y axis)\n\n$ xrandr --output LVDS1 --panning 1600x768\nRun Code Online (Sandbox Code Playgroud)\n\n...另请参见X/Config/Resolution - Ubuntu Wiki
\n\nxvfb虚拟渲染通过x11 - 远程离屏渲染 - 服务器故障得到这个,另请参阅Xvfb - 维基百科,免费百科全书的示例。这对我有用 - 每个命令都在自己的终端中(因为其中一些是服务)
\n\n# start xvfb as display 1 - note the "screen 0" there refers to "its own" screen 0; should set it to 24-bit color\n\nXvfb :1 -screen 0 1600x1200x24 -pixdepths 3 -fp /usr/share/fonts/X11/Type1\n\n# start metacity on display 1 (would start gdm, but [Bug #598848: gdm no longer works with xvfb](https://bugs.launchpad.net/bugs/598848)\n# needed to we have title bars, and possibility to move windows around \n\nDISPLAY=:1 metacity\n\n# start application (here web-browser arora) again on display 1\n\nDISPLAY=:1 arora\n\n# start vnc server, which will bridge display 1 to port 5900\n# note - this command exists, however starts a server in background \n\nx11vnc -display :1 -bg -nopw -listen localhost -xkb\n\n# start vnc viewer on port 5900 - so we can see display 1:\n# note also - when vncviewer exits, it also will kill the x11vnc server\n\nvncviewer -FullColor=1 localhost:5900\nRun Code Online (Sandbox Code Playgroud)\n\n这里的问题是,并非操作系统的所有部分都已初始化 - 因此没有窗口装饰,只有基本的 X 字体;不过,应用程序可能会找到自己的字体,如下所示:
\n\n
xvfb对我来说看起来几乎是理想的 - 因为我基本上可以设置一个“隐形”环境,我想要多大就多大,并直接从中截取屏幕截图(使用xwd)。问题是我无法在“我的”DISPLAY=:0 上有一个窗口,然后将其切换到“虚拟”DISPLAY=:1 进行屏幕截图,然后将其返回到 DISPLAY=:0。然后必须专门设置一个应用程序xvfb;如果发生这种情况,您需要更多的大小 - 那么上面的整个链需要重新启动。
另一方面,我发现使用 4 个工作区和大视口(鼠标在视口内移动)有点令人困惑 - 话又说回来,可以动态更改尺寸,不需要重新启动;另外,我可以使用任何常用的屏幕截图工具(但我仍然需要切换视口)。
\n\n不用说,我仍然很想听到一种可能的命令行解决方案,可以一次性完成这种屏幕截图:)
小智 4
在我的 FreeBSD 工作站上,我创建了一个 bash 脚本来捕获多个虚拟工作区,然后通过 ImageMagic“蒙太奇”运行结果来缝合它们。这是 bash 脚本:
#!/usr/local/bin/bash
dnum=$(xdotool get_num_desktops)
desk=0
while [[ "$desk" -lt "$dnum" ]];
do
xdotool set_desktop $desk;
sleep 2;
maim --format png /dev/stdout > ~/capture/desktop$desk.png;
desk=$((desk+1));
done
Run Code Online (Sandbox Code Playgroud)
这是我在 ~/capture/ 目录中运行的命令,将它们拼接在一起:
montage desktop*.png -tile 10x1 -geometry 1920x2160+1+1 workspaces.png
Run Code Online (Sandbox Code Playgroud)
显然,人们会为自己的系统更改-tile 和-geometry。;)
对于此解决方案,需要安装 bash、maim(或等效工具)、xdotool 和 ImageMagick montage。华泰