环境介绍
- 客户端:win10(xmanager,xshell)
- 服务器:Ubuntu18(nvidia-docker,ssh)
- docker容器:Ubuntu18(ssh)
已经实现客户端远程ssh连接服务器和各个容器,三方ssh配置均正常
服务器端配置:
sudo vim /etc/ssh/sshd_config
设置X11Forwarding yes
然后:
sudo vim /etc/ssh/ssh_config
将ForwardAgent、ForwardX11、ForwardX11Trusted设为yes
最后重启:
service ssh restart
允许所有用户访问X11服务
sudo apt-get install xserver-xorg x11-xserver-utils
xhost +
客户端配置
win10客户端需要和服务器在同一网络下(其实我不是很清楚,我实现的是服务器在校园网,win10客户端在内网)
xshell连接服务器,xmanager不用做什么配置,可以自动监听
在服务器上启动新的docker容器:
sudo nvidia-docker run -it \
--privileged --name ubuntu-test\
--restart=always \
-v /home/phy/public_data:/data:ro \
-v /home/phy/output:/output \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /etc/localtime:/etc/localtime:ro \
-e DISPLAY=unix$DISPLAY \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--net=host \
410-pytorch:base bash\
- 其中的『-v /tmp/.X11-unix:/tmp/.X11-unix』参数就是将服务器上X11的unix套接字共享到了容器里面。因为每个unix套接字实际上就是系统/tmp/.X11-unix目录下面依据套接字编号命名的一个特殊文件。
- –net=host参数省了很多需要配置的步骤,它直接把服务器的端口共享给了该容器,不需要作服务器和容器之间的端口映射。如果容器内的ssh端口设置为22,那么客户端直接连接服务器的22端口即可。这样顺便解决了容器内不能git clone 的问题
在容器中测试:运行图形化界面
apt install xarclock
xarclock
不出意外的话,这时候win10客户端就会出现图形界面啦!