Wayland环境下通过xwayland支持docker图形界面

2023-05-16

写在前面

在之前的文章里已经讲解了怎么直接在docker中使用wayland支持图形界面(docker内外都使用wayland),文章链接:

使用Docker安装ROS2 (ros-humble) 并开启对Wayland的支持

指令为:

docker run -it --privileged \
           -v <host_src>:<container_src>:rw \
           -e XDG_RUNTIME_DIR=/tmp \
           -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
           -v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
           -e QT_QPA_PLATFORM=wayland \
           --name <local_container_name> <container>:<tag> <build_command>

然后就可以在docker中打开图形界面了。

然而,目前有一些软件不支持wayland、配置麻烦或者无法启动,所以本文介绍一种通过xwayland的方式在docker中使用X11渲染图形界面(docker外使用wayland,docker内使用X11)。

注意:这个方法使用了xwayland转换,一些软件可能依然无法使用,可以尝试其它方法如x11docker

Xwayland

xwayland可以理解为一个桥,可以在wayland上提供一个X11的接口。

xwayland的安装非常简单,可以自行搜索,对于大多数发行版都可以通过包管理器直接安装。

运行方式

说到这里可能有些抽象,到底在哪里用wayland,哪里用X11?一句话概括为:

主机(运行wayland)-> xwayland -> 主机:/tmp/.X11-unix -> docker:/tmp/.X11-unix -> docker(X11环境)

启动docker

xhost +

docker run -it --privileged \
    --env=LOCAL_USER_ID="$(id -u)" \
    -v <host_src>:<container_src>:rw \
    -v /tmp/.X11-unix:/tmp/.X11-unix:ro \
    -e DISPLAY=$DISPLAY \
    --name=<local_container_name> <container>:<tag> <build_command>

-v <host_src>:<container_src>:rw将主机的<host_src>路径映射到docker的<container_src>路径
<local_container_name>是给容器命的名字
<container>:<tag>是镜像的名称,可以通过docker images查看,如px4io/px4-dev-ros-noetic

注意xhost +是不安全的,可以通过配置用户组的方法只允许本地用户使用,感兴趣请自行查找

然后就可以使用了,比如我们打开gazebo

gazebo运行正常
正常打开并显示。

可能出现的问题

权限错误

Authorization required, but no authorization protocol specified

这个错误可能并不是因为没有给予权限,而是没有使用正确的DISPLAY参数。

处理方法:

  1. 尝试xhost +打开权限,然后测试问题是否解决。如果解决了,考虑用户组的配置问题,比如当前用户是否加入docker用户组或者有没有指定--env=LOCAL_USER_ID="$(id -u)"
  2. 可能是没有指定-e DISPLAY=$DISPLAY或者配置错误,检查主机是不是有$DISPLAY参数,然后docker有没有设置成相同的参数,如果确认一致或者没有这个参数,可以尝试从1开始递增尝试DISPLAY参数,如-e DISPLAY=:1

X11应用模糊

这个问题严格意义上讲和本文的主题并没有关系,只是为了避免出现应用模糊之后费时研究docker或者wayland或者X11的问题,但是其实并不需要这么复杂(仅对于KDE plasma桌面,版本>=5.26)

在KDE plasma桌面下进入设置 -> Display and Monitor -> Display Configuration,Legacy Application (X11) 这一项要设置成Apply scaling themselves,如图:

KDE Settings
由于并没有在其它桌面上测试,不清楚在其它桌面上需要配置哪些参数,如果读者测试成功,欢迎评论区分享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wayland环境下通过xwayland支持docker图形界面 的相关文章

随机推荐

  • 【VINS-Fusion入门之一】让系统跑起来

    转载自 xff1a https blog csdn net wangbaodong070411209 article details 86551370 VINS Fusion入门之一 让系统跑起来 北络 2019 01 19 13 18 1
  • 单片机: 自定义串口通信协议的实现(转载)

    转载自 xff1a https blog csdn net nk test article details 50240933 自定义串口通信协议的实现 weixin 33885253 2017 01 18 21 11 00 1926 收藏
  • pelco协议及其实现的简单认识

    转载自 xff1a https blog csdn net subfate article details 36644419 pelco协议及其实现的简单认识 李迟 2014 07 03 13 50 49 6272 收藏 10 分类专栏 x
  • PELCO-D与PELCO-P协议介绍

    转载自 xff1a https blog csdn net wodexiaobaitu article details 43018249 PELCO D与PELCO P协议介绍 wodexiaobaitu 2015 01 22 13 26
  • 开源HTTP解析器---http-parser和fast-http

    转载自 xff1a https www cnblogs com arnoldlu p 6497837 html 开源HTTP解析器 http parser和fast http 由于项目中遇到需要发送http请求 xff0c 然后再解析接收到
  • OpenBTS和硬件平台搭建

    OPENBTS安装 目标 项目使用OpenBTS进行GSM系统仿真 xff0c 用BladeRF进行硬件搭建收发平台 所用软硬件版本 Ubuntu 14 04 LTS OpenBTS v 4 0 0 xff1b BladeRF Gnu Ra
  • OpenBTS for bladeRF代码修改

    首先从https github com Nuand dev 上 git clone 下来下载打包的文件 xff0c 接着到本地dev目录下执行 clone sh下载OpenBTS以及它的其他依赖的安装包 这里在openbts文件夹Trasc
  • 通信协议/通讯协议 有哪些?包含哪些分类?

    通讯和通信的区别 xff1f 1 通信 与 通讯 傻傻分得清 传统意义上的 通讯 主要指电话 电报 电传 通讯的 讯 指消息 xff08 Message xff09 媒体讯息通过通讯网络从一端传递到另外一端 媒体讯息的内容主要是话音 文字
  • 增强现实入门实战,使用ArUco标记实现增强现实

    点击上方 AI算法修炼营 xff0c 选择加星标或 置顶 标题以下 xff0c 全是干货 在本文中 xff0c 我们将介绍ArUco标记以及如何使用OpenCV将其用于简单的增强现实任务 xff0c 具体形式如下图的视频所示 一 什么是Ar
  • 停车位检测新数据集、新方法,精准又快速(含视频解读)

    点击上方 AI算法修炼营 xff0c 选择 星标 公众号 精选作品 xff0c 第一时间送达 本文是一篇关于停车位检测的文章 xff0c 文章的视频有详细解读 xff0c 文章的创新点就是在圆形描述器来回归定点坐标 地址 xff1a htt
  • available()方法的使用总结

    先看看API的说明 xff1a public int available throws IOException 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取 xff08 或跳过 xff09 的估计字节数 下一个调用可能是同一个线程
  • simpleBGC32-软件代码开源

    simpleBGC32官方只提供了硬件开源 xff0c 导致市场上有大量的v1 3版的硬件电路板用于飞机云台 xff0c 通过烧录官方给的hex文件实现基本功能 但是由于针对simpleBGC32的软件代码没有开源 xff0c 所以很多需要
  • Gazebo环境下VIO SLAM系统实现

    Gazebo环境下VIO SLAM系统实现 Gazebo环境下VIO SLAM系统实现简介0 准备工作1 搭建gazebo环境1 1 相机1 2 IMU 2 VINS MONO2 1 安装及make2 2 参数修改2 3 外参标定2 3 1
  • 滤波学习理解----EKF(一)

    最近回到slam方向了 xff0c 所以有时间整理一下最近的收获 最复杂也是最简单的模块 滤波 引入 那么滤波是什么呢 xff1f 滤波就是由于观测observation xff08 OB xff09 天生具备的误差和噪声 当有多个信号源观
  • 在VMware里装Kali Linux选graphical install后黑屏解决方案

    我用的是VMware 16 xff0c 装Kali Linux 2020 xff0c 选graphical install后黑屏 其实不管选哪个都黑屏 一开始按照网上的netsh winsock reset xff0c 虚拟打印机 xff0
  • USB移动存储设备上安装Kali Linux(独立系统 非Live 非虚拟机)Standalone Kali Linux + grub2 + luks加密

    前言 本文分享的是在USB移动设备上安装Kali Linux独立系统 非Live版 xff01 非虚拟机版 xff01 非Live版 xff01 非虚拟机版 xff01 非Live版 xff01 非虚拟机版 xff01 这里的USB设备包括
  • 简单git多人协同

    git网上的资料非常多 xff0c 本文只希望能提供一个简单直观的使用教程 xff0c 可能不严谨 如果本文有任何问题 xff0c 请及时指正 git简介 本章介绍git的基本概念 xff0c 了解git就可以跳过 什么是git xff1f
  • Arch 安装 Visual Studio Code(支持Wayland)

    文章目录 安装vscode在Wayland下模糊的解决方法在Wayland下无法使用输入法的解决方法 安装vscode 虽然官网下载一般是首先 xff0c 但是比较复杂 xff0c 所以推荐使用AUR xff1a yay S visual
  • 安装并使用NoMachine

    1 进入NoMachine官网下载NoMachine安装包 2 安装NoMachine xff0c 一路到底 xff0c 不需更改其他设置 xff08 安装目录随意 xff09 3 下载IP扫描工具 xff1a Advanced IP Sc
  • Wayland环境下通过xwayland支持docker图形界面

    写在前面 在之前的文章里已经讲解了怎么直接在docker中使用wayland支持图形界面 xff08 docker内外都使用wayland xff09 xff0c 文章链接 xff1a 使用Docker安装ROS2 ros humble 并