Xauthority 用于在 docker 容器中进行 python 绘图

Xauthority 用于在 docker 容器中进行 python 绘图

我试图了解如何运行一个运行 X11 服务器的 docker 容器,以便在编写一些 python 代码时可以进行可视化,并找到了很多答案。

我发现了很多问题和很多答案,但即使有些提供了解决方案,大多数对于像我这样的新手来说解释也不够标准。所以我无法让它在我的具体情况下工作。

那么有人可以帮我理解为什么这不起作用吗?

$> XSOCK=/tmp/.X11-unix
$> XAUTH=/tmp/.docker.xauth
$> xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
$> sudo docker run --name my_name \
                 -v $XSOCK:$XSOCK \
                 -v $XAUTH:$XAUTH \
                 -e DISPLAY=$DISPLAY \
                 -e XAUTHORITY=$XAUTH \
                 -it b9d09a81e708

这是当我尝试使用以下命令创建图形时出现的错误matplotlib

In [1]: import matplotlib.pyplot as plt
In [2]: plt.figure()
--------------------------------------------------------------------
TclError                                  Traceback (most recent call last)

...

TclError: couldn't connect to display "localhost:10.0"

这是我目前对这一系列命令的理解:

  1. XSOCK通过创建一个包含本地计算机上套接字路径的新变量并使用标志挂载它,将本地计算机上现有的 X11 套接字连接到 docker 容器中的套接字-v

  2. 通过在本地计算机上创建一个包含套接字路径的新变量并使用标志挂载它来创建一个新套接字/tmp/.docker.xauth(该文件当前不存在)。XAUTH-v

  3. 使用xauth命令列出本地计算机上的当前显示(以数字格式),使用该sed命令更改它们,然后将它们添加回刚刚创建的新套接字文件中。

  4. 运行 docker 映像并在本地计算机上创建新变量DISPLAY和 ,XAUTHORITY其值为DISPLAY和。XAUTH

以下是我仍然无法理解的事情:

  1. 新创建的socket有什么/tmp/.docker.xauth用呢?

  2. 该命令有什么xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -作用?尤其:

    A。该sed部分的用途是什么?它如何将 的输出更改xauth nlist $DISPLAY为 的输入xauth -f $XAUTH nmerge -

    b.-的末尾是什么xauth -f $XAUTH nmerge -

  3. 这些命令中的任何一个都可以直接在 Dockerfile 内部完成,这样连接到它时就不会产生所有这些开销吗?

谢谢

相关内容