使用FFmpeg录制Docker化LXDE桌面时出现黑屏问题求助
看起来你在Docker容器里用FFmpeg录制LXDE桌面时碰到了黑屏的麻烦,我来帮你梳理下可能的问题点和对应的解决办法:
一、先排查最关键的xstartup配置问题
你的Dockerfile里复制了xstartup到/root/.vnc/xstartup,但如果这个文件没有正确启动LXDE会话,那VNC连接后其实没有真正加载桌面环境,录屏自然是黑屏。
请确保你的xstartup内容包含启动LXDE的命令,参考正确配置:
#!/bin/sh xrdb $HOME/.Xresources xsetroot -solid grey export XKL_XMODMAP_DISABLE=1 autocutsel -fork # 关键:启动LXDE桌面会话 startlxde &
你已经执行了chmod +x /root/.vnc/xstartup,但最好再确认下权限是755,避免因为权限不足无法执行。
二、确认DISPLAY环境变量的传递与X服务器状态
虽然你尝试了
DISPLAY=:1 ffmpeg...,但可以先验证X服务器是否正常运行:
在容器内执行:xset q -display :1如果能输出X服务器的状态信息,说明
:1这个显示是正常的;如果报错,那VNC服务器可能没正确启动,去查看/root/.vnc/*.log日志找具体错误(比如端口占用、依赖缺失)。确保FFmpeg运行时的环境确实指向VNC的显示:
你可以在启动容器的命令里提前导出DISPLAY变量,比如修改docker run命令:docker run -it --rm -v /data:/data -p 5901:5901 -e USER=root ubuntudsktp bash -c "export DISPLAY=:1 && vncserver :1 -geometry 1280x800 -depth 24 && tail -F /root/.vnc/*.log"之后在VNC客户端登录后执行FFmpeg命令,就不需要再手动指定DISPLAY了。
三、调整FFmpeg的录屏参数
试试明确指定录屏的分辨率(和你VNC启动的-geometry一致),避免分辨率不匹配导致的黑屏:
ffmpeg -f x11grab -video_size 1280x800 -i :1.0 -c:v libvpx-vp9 output.webm
如果还是不行,可以加上-draw_mouse 0(可选,关闭鼠标录制)或者指定帧率-r 25,看看是否能解决。
四、关于glxinfo报错的说明
你执行glxinfo | grep "OpenGL renderer"时报错无法打开显示,这是因为TightVNC Server默认不支持GLX(OpenGL扩展),这个问题和录屏黑屏没有直接关联,如果你不需要硬件加速的话,可以暂时忽略;如果需要GLX支持,你可能需要换用支持GLX的VNC服务器(比如TurboVNC),不过这对录屏来说不是必须的。
最后一步:查看VNC日志定位问题
去容器里查看/root/.vnc/*.log的内容,看看有没有LXDE启动失败、X服务器初始化错误之类的日志,这些信息能帮你快速定位根本问题。
备注:内容来源于stack exchange,提问作者Itzik.B

