使用FFmpeg录制Docker化LXDE桌面时出现黑屏问题求助
我创建了一个包含LXDE和TightVNCServer的Docker镜像,Dockerfile内容如下:
# Pull base image. FROM ubuntu # Install LXDE and VNC server. RUN apt-get update RUN apt-get install -y xvfb RUN DEBIAN_FRONTEND=noninteractive apt-get install -y lxde-core lxterminal tightvncserver RUN rm -rf /var/lib/apt/lists/* RUN touch /root/.Xresources RUN touch /root/.Xauthority COPY xstartup /root/.vnc/xstartup RUN chmod +x /root/.vnc/xstartup #Install Node.js & npm # Define working directory. WORKDIR /data COPY * /data RUN apt-get install -y ffmpeg
我通过以下命令运行容器:
docker run -it --rm -v /data:/data -p 5901:5901 -e USER=root ubuntudsktp bash -c "vncserver :1 -geometry 1280x800 -depth 24 && tail -F /root/.vnc/*.log"
登录容器的VNC后,执行命令ffmpeg -f x11grab -i :1.0 output.webm录制全屏,但生成的视频为全黑屏。运行glxinfo | grep "OpenGL renderer"时提示"Error: unable to open display",尝试添加DISPLAY=:1前缀执行录制命令,结果仍相同。请问我遗漏了什么配置?
确认VNC会话的DISPLAY环境变量
先在VNC终端执行echo $DISPLAY,正常应输出:1。如果不是,执行export DISPLAY=:1后再运行ffmpeg命令,确保命令关联到正确的X11显示。修复xstartup配置
检查/root/.vnc/xstartup内容,确保包含以下关键配置,保证LXDE正确关联VNC的显示:#!/bin/sh xrdb $HOME/.Xresources xsetroot -solid grey export DISPLAY=:1 startlxde &该文件已有可执行权限,VNC启动时会自动加载这个配置初始化桌面环境。
用Xvfb提供底层X11帧缓冲
调整容器启动命令,先启动Xvfb创建带帧缓冲的X11显示,再启动VNC:docker run -it --rm -v /data:/data -p 5901:5901 -e USER=root ubuntudsktp bash -c "Xvfb :1 -screen 0 1280x800x24 & vncserver :1 -geometry 1280x800 -depth 24 -localhost no && tail -F /root/.vnc/*.log"这样x11grab能捕获到完整的桌面画面,避免黑屏。
优化ffmpeg录制参数
指定帧率和分辨率(与VNC启动参数一致),确保捕获区域正确:ffmpeg -f x11grab -r 25 -s 1280x800 -i :1.0 output.webm解决glxinfo的显示问题
安装图形工具和OpenGL库:apt-get install -y mesa-utils libgl1-mesa-glx设置好DISPLAY变量后执行
glxinfo | grep "OpenGL renderer",会看到软件渲染器信息,说明图形环境正常。
内容的提问来源于stack exchange,提问作者Itzik.B

