gpt4 book ai didi

docker - 在 docker 容器内运行 Xephyr

转载 作者:行者123 更新时间:2023-12-02 09:59:43 26 4
gpt4 key购买 nike

我试图在 docker 容器内运行嵌套的 X-server Xephyr,并直接访问 X11 套接字,但我遇到了奇怪的图形错误,我目前无法理解。

Dockerfile 的内容只是

FROM ubuntu:14.04

RUN apt-get update
RUN apt-get install -qqy xserver-xephyr

# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

构建它

sudo docker build -t xephyrtest .

并运行它

sudo docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix xephyrtest Xephyr :1

输出以下内容:

Xephyr unable to use SHM XImages
Initializing built-in extension Generic Event Extension
Initializing built-in extension SHAPE
Initializing built-in extension MIT-SHM
Initializing built-in extension XInputExtension
Initializing built-in extension XTEST
Initializing built-in extension BIG-REQUESTS
Initializing built-in extension SYNC
Initializing built-in extension XKEYBOARD
Initializing built-in extension XC-MISC
Initializing built-in extension SECURITY
Initializing built-in extension XINERAMA
Initializing built-in extension XFIXES
Initializing built-in extension RENDER
Initializing built-in extension RANDR
Initializing built-in extension COMPOSITE
Initializing built-in extension DAMAGE
Initializing built-in extension MIT-SCREEN-SAVER
Initializing built-in extension DOUBLE-BUFFER
Initializing built-in extension RECORD
Initializing built-in extension DPMS
Initializing built-in extension Present
Initializing built-in extension DRI3
Initializing built-in extension X-Resource
Initializing built-in extension XVideo
Initializing built-in extension XVideo-MotionCompensation
Initializing built-in extension SELinux
Initializing built-in extension GLX
[dix] Could not init font path element /usr/share/fonts/X11/cyrillic, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/100dpi/:unscaled, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/75dpi/:unscaled, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/Type1, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/100dpi, removing from list!
[dix] Could not init font path element /usr/share/fonts/X11/75dpi, removing from list!

这里,第一行Xephyr无法使用SHM XImages似乎是最重要的,因为它没有显示在我的Xephyr正常工作的主机上。

尽管会弹出 Xephyr 窗口,但使用 :1 显示屏的应用程序会出现奇怪的故障。例如。 DISPLAY=:1 gedit 看起来像这样(当鼠标在窗口内移动时,输出会快速变化):

enter image description here

SHM XImages 是什么意思以及如何修复它在容器内不可用的问题?

最佳答案

事实证明,自 Docker 1.5 起,使用命令在 docker 容器中运行 Xephyr 实际上非常容易

sudo docker run -e DISPLAY -v /tmp:/tmp --ipc=host --pid=host xephyrtest Xephyr :1

两个附加参数是

  • --ipc=host 允许容器使用与主机相同的 IPC 命名空间,因此也可以访问相同的共享内存段
  • --pid=host 让容器查看(并修改)主机的进程。这是必要的,因为 X 服务器端口锁定是通过 /tmp/.Xi-lock 锁定文件(将 i 替换为您的显示端口)完成的,其中包含该服务器的 pid X 服务器在端口 i 上运行。

您还必须将 -v/tmp/.X11-unix:/tmp/.X11-unix 更改为 -v/tmp:/tmp 才能除了容器内的 X11 unix 套接字之外,还可以访问锁定文件。

虽然这工作得很好,但您必须注意,两个附加参数和对主机的 /tmp 文件夹的访问权限授予容器重要的权限,这在某些情况下可能会带来安全风险。

关于docker - 在 docker 容器内运行 Xephyr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com