从XRDP客户端在docker容器中运行GUI应用程序
我有两台机器, 机器A:system ubuntu 20.04(显示:0) 机器B:系统windows 10 在机器A中,我使用以下命令创建docker容器:从XRDP客户端在docker容器中运行GUI应用程序,docker,opencv,Docker,Opencv,我有两台机器, 机器A:system ubuntu 20.04(显示:0) 机器B:系统windows 10 在机器A中,我使用以下命令创建docker容器: docker run --rm -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $(pwd):/home/walid/notebooks opencv bash walid@admins:~$ sudo docker exec -it -e DISPLAY=$DIS
docker run --rm -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $(pwd):/home/walid/notebooks opencv bash
walid@admins:~$ sudo docker exec -it -e DISPLAY=$DISPLAY open bash
docker容器安装了Visual Studio代码和OpenCV,我在容器bash中运行以下命令:
docker exec -it $containerId bash
在容器内,我进入笔记本文件夹并运行以下命令:
code . # to launch the visual studio code
结果;VisualStudio代码将打开
python read.py # to open a video capture with OpenCV
结果;好,视频捕获打开
现在打开机器B;我使用远程桌面连接
连接到机器B,当我进入容器打开Visual Studio code时,什么都没有打开,当我尝试python read.py
时,我得到一个错误无法连接到显示器:10.0
我知道我哪里做错了:
(base) adminsst@admins:~$ xhost
access control enabled, only authorized clients can connect
SI:localuser:adminsst
(base) adminsst@admins:~$ sudo su
root@admins:/home/adminsst# xhost
No protocol specified
xhost: unable to open display ":10.0"
当我在sudo su
中运行容器时,它不工作,但当我sudo docker运行时……
它工作
但是现在,当我登录到服务器中的另一个用户(机器A)并执行同样的操作时,我认为它不再工作,我将得到相同的错误无法连接到display:11.0
解决方案1
以下是我所做的解决方案,它对我很有效:
首先,如果在新用户中运行以下命令,您将获得:
walid@admins:~$ xhost
access control enabled, only authorized clients can connect
现在再次运行this one以获得以下结果:
walid@admins:~$ xhost +local:
non-network local connections being added to access control list
要启动GUI应用程序,您需要将新显示传递给容器,因为每次登录时都会更改该显示以解决此问题,只需运行以下命令:
docker run --rm -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $(pwd):/home/walid/notebooks opencv bash
walid@admins:~$ sudo docker exec -it -e DISPLAY=$DISPLAY open bash
现在您可以毫无问题地启动GUI应用程序了,但每次登录时,您都应该在启动容器之前执行以下命令xhost+local:
,如果有人对此有解决方案,请告诉我
解决方案2
请参阅以下url
还有更多有用的解决方案
--------
我面临的另一件事是,即使我执行上述步骤,有时也不起作用,我只需通过以下操作将docker容器中的显示ID更改为与本地机器ID相同的ID:
首先通过以下方式计算出本地机器显示ID
echo$DISPLAY
然后在docker容器中执行以下操作
$DISPLAY=:ID
Windows远程桌面与Linux x-server不同。您需要在Windows上安装x-server。也许这有帮助