首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Docker运行图形应用程序时修复X错误: BadAccess、BadDrawable、BadShmSeg?

如何在使用Docker运行图形应用程序时修复X错误: BadAccess、BadDrawable、BadShmSeg?
EN

Ask Ubuntu用户
提问于 2020-05-09 09:45:44
回答 1查看 5.6K关注 0票数 5

我正在运行Ubuntu伙伴20.04 LTS。我已经在这个系统上安装了Docker。我需要运行Ubuntu20.04LTS不再可用的FreeMat 4.2,因为Ubuntu20.04LTS不推荐Qt4。

我做了以下工作:

代码语言:javascript
复制
sudo apt-get install docker.io
sudo usermod -a -G docker $USER
# reboot

mkdir ~/docker-freemat
cat > ~/docker-freemat/Dockerfile << EOF
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y freemat
CMD freemat
EOF

docker build -t ubuntu:freemat ~/docker-freemat

要从容器中运行FreeMat,我使用以下命令:

代码语言:javascript
复制
docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user="$(id --user):$(id --group)" ubuntu:freemat

但是FreeMat窗口是非功能性的,相反,它看起来是:

终端输出如下

代码语言:javascript
复制
X Error: BadAccess (attempt to access private resource denied) 10
  Extension:    130 (MIT-SHM)
  Minor opcode: 1 (X_ShmAttach)
  Resource id:  0x14e
X Error: BadShmSeg (invalid shared segment parameter) 128
  Extension:    130 (MIT-SHM)
  Minor opcode: 5 (X_ShmCreatePixmap)
  Resource id:  0x3200014
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 62 (X_CopyArea)
  Resource id:  0x3200015
...

如何消除这一错误,并使应用程序窗口显示正常和充分的功能?

一些注意事项:

  1. 在Dockerfile中将18.04更改为16.04甚至14.04并不会改变任何事情
  2. 安装Docker 来自docker.com不会改变任何事情
EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2020-05-22 07:41:54

您可以设置选择 --ipc=host,以使对接器容器能够与主机进程通信,还可以访问共享内存。

启动图形应用程序的命令如下所示:

docker run --ipc=host -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user="$(id --user):$(id --group)" ubuntu:freemat

并将显示应用程序窗口:

麻省理工学院_SHM实际上是通过共享内存传递XImages和一些像素映射的扩展。因此,如果容器无法访问它,则几乎不能打开任何图形应用程序。

如果您关心安全性,可以使用--cap-drop删除某些功能,如声明的这里

票数 9
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1237400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档