[01] 应用程序是在 Docker 中构建和执行的。 Dockerfile如下:
>>>>
FROM ubuntu:xenial
RUN apt-get update -y
RUN apt-get install -y wget
RUN apt-get install -y apt-utils
RUN apt-get install -y python3
RUN apt-get install -y tree
RUN apt-get install build-essential software-properties-common -y
RUN apt-get -y install libgtk2.0-dev
RUN apt-get -y install libgtkglext1-dev
RUN apt-get -y install python3-pip
RUN pip3 install --upgrade pip
RUN apt-get -y install cmake
RUN pip3 install --upgrade cmake
RUN apt-get -y install libnss3-dev
RUN apt-get -y install libxtst6
RUN apt-get -y install libxss1
RUN apt-get -y install libasound2
RUN apt-get -y install libatk-bridge2.0-0
<<<<
the CEF binary being used is
cef_binary_76.1.5+gd8a577c+chromium-76.0.3809.87_linux64/
[02] 启动 docker 时应用程序运行良好 使用 xhost+ 和 -e DISPLAY=.... 如下:
[A] starting docker with bash
xhost +
docker run \
-it \
--rm \
-e DISPLAY=$DISPLAY
--privileged \
-v /tmp/.X11-unix:/tmp/.X11-unix \
...
--network host \
--name $CONTAINER_NAME \
$REQD_IMAGE \
bash
[B] running the application in bash as
onpaint_streamer \
--no-sandbox \
--disable-gpu \
--disable-gpu-compositing \
--enable-begin-frame-scheduling \
--disable-extensions \
--disable-pdf-extension \
--url=file:///test/027/test.html
[03] 当 xhost+ 和 -e DISPLAY=... 时应用程序无法工作 已在[02][A]中删除。以下消息已被转储
+ ./onpaint_streamer --no-sandbox --disable-gpu --disable-gpu-compositing --enable-begin-frame-scheduling --disable-extensions --disable-pdf-extension --opg-fifo-path=/adhyuh/test/027/onpaint_data_fifo --opg-verbose --url=file:///test/027/test.html
d> CefInitialize : status=about_to
[0812/140301.641476:ERROR:browser_main_loop.cc(1504)] Unable to open X display.
d> CefInitialize : status=done
d> MessageLoop : status=started
[0812/140301.641921:FATAL:context.cc(584)] Check failed: CEF_CURRENTLY_ON(content::BrowserThread::UI).
./run_onpaint_data_writer_in_dk.sh: line 32: 20 Trace/breakpoint trap (core dumped) ./$STREAMER_APP --no-sandbox --disable-gpu --disable-gpu-compositing --enable-begin-frame-scheduling --disable-extensions --disable-pdf-extension --url=file:///test/027/test.html
[04] 代码中嵌入的一些其他“标志”是
void SimpleApp::OnContextInitialized() {
//....
CefBrowserSettings browser_settings;
browser_settings.windowless_frame_rate = 30;
CefWindowInfo window_info;
window_info.SetAsWindowless(0);
//....
}
[05] 为什么无窗口 CEF 应用程序需要 xhost 和 DISPLAY 存在?我错过了什么或做错了什么?
即使在无窗口模式下,CEF 也依赖于 X11 库... 是我在 CEF 论坛中提出类似帖子时得到的答案。请参阅https://magpcss.org/ceforum/viewtopic.php?f=6&t=16993&sid=5e46cc6bfb909badf63e0aafcfe9413f&p=42879#p42879
对我来说,添加
--headless
使得 X 显示消息在 docker 中运行时消失。