Macos通过SSH连接显示docker容器的GUI界面(ROS1小乌龟为例)

发布于 2023-07-28  332 次阅读


1 软硬件设置

  • Macbook M1 pro
  • docker - ubuntu18.04

2 配置远程服务器(ubuntu18.04)

2.1 安装工具包

docker exec -it 容器名称 /bin/sh
apt update
apt install openssh-server
apt install x11-apps
apt install vim
passwd   // 给root账号赋予密码

2.2 配置SSH服务端

vim /etc/ssh/sshd_config
# 修改以下内容,端口可以自己设置,默认是22,和启动容器的映射端口对应
PermitRootLogin yes
X11Forwarding yes

2.3 重启服务

/etc/init.d/ssh restart

2.4 连接docker测试

ssh -p docker端口 root@远程IP

3 本地Macos配置

3.1 安装Xquartz

Xquartz官网

3.2 Xquartz设置

  1. XQuartz -> 偏好设置 -> 安全性 -> 勾选“允许从网络客户端连接” -> 退出程序;
  2. 终端键入 xhost + ip(注意两者之间的空格)重新启动 XQuartz;为远程主机添加权限 或者xhost +为所有IP添加权限
  3. ssh -XY root@0.0.0.0 -p 6100
  4. netstat -an | grep -F 6100 查看

xquartz操作后需要重启。

3.3 docker进入

在 run 或 exec 容器时加入-e DISPLAY=host.docker.internal:0参数,比如我这里通过对一个现有的,已经安装过 xarclock 时钟小程序的容器 toyOS 执行docker exec -ite DISPLAY=host.docker.internal:0 toyOS /usr/bin/xarclock,就会在我的本地出现一个小时钟的GUI程序;

例如:

docker exec -ite DISPLAY=host.docker.internal:0 ub18.04-orb-slam2 /bin/bash

3.4 测试ros小乌龟

tmux设置三个终端

如下图所示:

file

也可以在docker内部执行,设置环境变量指定显示端口:

export DISPLAY=host.docker.internal:0  

本当の声を響かせてよ