捕获服务器屏幕配置如下,出现屏幕捕获但捕获的比例不是16:9,是由于显卡的原因吗?
做过 :
cvt 1920 1080 60
xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
xrandr --addmode screen 1920x1080_60.00
xrandr --output screen --mode 1920x1080_60.00
这是输出hwinfo --framebuffer
02: None 00.0: 11001 VESA Framebuffer
[Created at bios.459]
Unique ID: rdCR.mCUP8WwEfLD
Hardware Class: framebuffer
Model: "Matrox MGA-G200"
Vendor: "Matrox"
Device: "MGA-G200"
SubVendor: "Matrox Graphics Inc."
SubDevice:
Revision: "00"
Memory Size: 16 MB
Memory Range: 0x00000000-0x00ffffff (rw)
Mode 0x0301: 640x480 (+640), 8 bits
Mode 0x0310: 640x480 (+1280), 15 bits
Mode 0x0311: 640x480 (+1280), 16 bits
Mode 0x0312: 640x480 (+2560), 24 bits
Mode 0x0300: 640x400 (+640), 8 bits
Mode 0x0303: 800x600 (+800), 8 bits
Mode 0x0313: 800x600 (+1600), 15 bits
Mode 0x0314: 800x600 (+1600), 16 bits
Mode 0x0315: 800x600 (+3200), 24 bits
Mode 0x0305: 1024x768 (+1024), 8 bits
Mode 0x0316: 1024x768 (+2048), 15 bits
Mode 0x0317: 1024x768 (+2048), 16 bits
Mode 0x0318: 1024x768 (+4096), 24 bits
Mode 0x0307: 1280x1024 (+1280), 8 bits
Mode 0x0319: 1280x1024 (+2560), 15 bits
Mode 0x031a: 1280x1024 (+2560), 16 bits
Mode 0x031b: 1280x1024 (+5120), 24 bits
Mode 0x031c: 1600x1200 (+3200), 15 bits
Mode 0x031d: 1600x1200 (+3200), 16 bits
Mode 0x031e: 1600x1200 (+6400), 24 bits
Config Status: cfg=new, avail=yes, need=no, active=unknown
xrandr
输出:
Screen 0: minimum 1 x 1, current 1920 x 1080, maximum 1920 x 1080
screen connected 1920x1080+0+0 0mm x 0mm
1920x1080 0.00*
跑Xvfb :0 -screen 0 1920x1080x24 &
用红色表示的部分应该是 1280px 长(右侧不应该显示黑色),里面的内容会显示,但比例不正确
答案1
Xvfb
不是一个电子设备安全协会帧缓冲区,但是虚拟的帧缓冲区 X 服务器。
man Xvfb
说:
描述
Xvfb 是一个 X 服务器,可以在没有显示硬件和物理输入设备的计算机上运行。它使用虚拟内存模拟哑帧缓冲区。
该服务器的主要用途是服务器测试。任何深度的 fb 代码都可以使用该服务器来执行,而不需要支持所需深度的真实硬件。 X 社区发现了 Xvfb 的许多其他新颖用途,包括针对不寻常的深度和屏幕配置测试客户端、使用 Xvfb 作为后台渲染引擎进行批处理、负载测试、作为将 X 服务器移植到新平台的辅助工具,以及提供一种不引人注目的方式来运行那些并不真正需要 X 服务器但又坚持拥有一个应用程序的应用程序。
换句话说,Xvfb
根本不使用您的显卡,因此您的捕获率问题不可能是由它引起的。
请注意,在您的xrandr
输出中,屏幕的物理尺寸列为0mm x 0mm
。如果应用程序使用此信息来确定所选分辨率中的像素是正方形还是拉长矩形,这些值可能会导致奇怪的结果。应用程序可能会回退到旧硬件上使用的默认比率(可能是 4:3?),或者尝试除以零,然后执行一些完全奇怪的操作。
在评论中,您提到这一切的目的是捕获 CSS 动画。如果是因为您无法直接访问工作站上托管动画的网络服务器,但该服务器可以,那么还有其他方法那问题。 (另一个很好的例子XY问题.)
例如,您可以使用 SSH 的动态端口转发:
1.) 通过动态端口转发从工作站到服务器建立 SSH 连接。您可以自由选择端口号:在本例中我将使用 1234。
workstation$ ssh -D 1234 direxit@server
server$
这将使您的 SSH 客户端创建一个 SOCKS 代理,其入站端位于工作站上的指定端口,出站端位于服务器上 SSH 连接的另一端。
2.) 返回工作站,将浏览器配置为使用位于 上的 SOCKS 代理(localhost
端口号为您在上一步中选择的端口号)。这将使所有传出连接首先通过 SSH 连接到达服务器,并且从那里到他们的实际目的地。
3.) 如果使用 Firefox,请转至about:config
并设置network.proxy.socks_remote_dns
为true
,以便 DNS 解析也将通过 SOCKS 代理进行。对于其他浏览器,hosts
如果无法在您的工作站上直接解析,则可能需要将站点的 IP 地址和主机名添加到您的工作站的文件中。
4.) 现在您可以直接在工作站上进行捕获,浏览器完全在本地运行(因此显示延迟最小),但浏览器的网络连接通过远程服务器路由(因此托管 CSS 动画的系统会将您的浏览器连接视为来自服务器)。
5.) 完成后,请记住从浏览器中删除 SOCKS 代理配置设置,否则一旦带有动态转发的 SSH 连接终止,浏览器将无法连接到任何内容。