我需要一个在 X 服务器中带有多个假屏幕的 docker 测试平台,根据手册页xvfb 可以启动具有多种分辨率的多个屏幕,但我只得到屏幕 0。
手册页中的一个例子是
Xvfb:1-屏幕 1 1600x1200x16 该服务器将作为服务器 1 号监听连接,并具有默认屏幕配置(一个屏幕,1280x1024x8),屏幕 1 的深度为 16 1600x1200。
但我只得到默认屏幕 0:
# xvfb-run -s '-screen 1 1600x1200x16' xrandr
xrandr: Failed to get size of gamma for output screen
Screen 0: minimum 1 x 1, current 1280 x 1024, maximum 1280 x 1024
screen connected 1280x1024+0+0 0mm x 0mm
1280x1024 0.00*
奇怪的是,如果我指定一个帧缓冲区目录,我可以在文件系统中看到它:
# mkdir -p /tmp/x && xvfb-run -s '-screen 1 1600x1200x16 -fbdir /tmp/x' ls /tmp/x
Xvfb_screen0 Xvfb_screen1
但如果我看不到它,那对我来说xrandr
毫无用处electron
。
是我做错了什么吗,还是它没有按照我需要的方式运行?
电子示例:
# echo "let { screen, app } = require('electron'); app.on('ready', () => setTimeout(()=>console.log(screen.getAllDisplays()) && app.quit(),1000))" > foo.js
# xvfb-run -s '-screen 0 800x600x8 -screen 1 1920x1080x16' electron --no-sandbox foo.js
// removed errors
[
{
id: 70,
label: '',
bounds: { x: 0, y: 0, width: 800, height: 600 },
workArea: { x: 0, y: 0, width: 800, height: 600 },
accelerometerSupport: 'unknown',
monochrome: false,
colorDepth: 8,
colorSpace: '{primaries:BT709, transfer:SRGB, matrix:RGB, range:FULL}',
depthPerComponent: 8,
size: { width: 800, height: 600 },
displayFrequency: 0,
workAreaSize: { width: 800, height: 600 },
scaleFactor: 1,
rotation: 0,
internal: false,
touchSupport: 'unknown'
}
]
编辑:这是在 Debian Buster 和 Ubuntu Jammy 上运行的 Docker 容器