“无法打开 X 显示”错误是由在无窗口(离屏渲染)模式下运行的 CEF 应用程序产生的

问题描述 投票:0回答:2

[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 存在?我错过了什么或做错了什么?

chromium-embedded
2个回答
0
投票

即使在无窗口模式下,CEF 也依赖于 X11 库... 是我在 CEF 论坛中提出类似帖子时得到的答案。请参阅https://magpcss.org/ceforum/viewtopic.php?f=6&t=16993&sid=5e46cc6bfb909badf63e0aafcfe9413f&p=42879#p42879


0
投票

对我来说,添加

--headless
使得 X 显示消息在 docker 中运行时消失。

© www.soinside.com 2019 - 2024. All rights reserved.