X11协议+ win10的MobaXterm软件:访问远程主机中的docker容器的图形界面
X windows, X, 或X11 协议X windows, X, 或X11 ,是一种协议。有server和client。X server 管理硬件,捕捉键鼠输入,并告知client根据client指示的需求,具体完成绘制的动作,包括用什么驱动程序等。client是应用程序,管理逻辑,他想绘制图形,就会告诉X server需求, 比如在在某坐标,画一个多大,什么颜色的什么图形当Linux需要图形
文章目录
步骤
docker操作
https://www.jb51.net/LINUXjishu/234709.html
进入docker。
修改/etc/ssh/sshd_config文件
首先要配置ssh协议,允许X11转发:
vim /etc/ssh/sshd_config
修改里面的如下内容:
X11Forwarding yes # 允许X11转发
X11UseLocalhost no # 不要让它走localhost,可能导致转发失败
AddressFamily inet # 使用Ipv4,有的地方可能ipv6不行
PasswordAuthentication yes # 允许用密码登录
PermitRootLogin yes #允许root用户登录
重启ssh服务
修改好后,要重启才能生效
/etc/init.d/ssh restart
service ssh restart
xhost + 提供权限
运行命令:
xhost+
windows端MobaXterm操作
MobaXterm是一个开源免费的软件,自带X server。
常见的方案是xshell 或putty 做终端,xming或xmanager做x server,一共需要两个软件,现在我们mobaXterm一个就够了。(实际是因为我用xshell + xming一直不成功,主机可以,但docker容器不行)
下载MobaXterm,打开local terminal。
运行ssh连接命令
ssh username@your_ip -X -p your_port
运行带有图形界面的程序
直接运行相关程序,就可以显示在本地windows了,就是交互有点慢,但至少能用。
比如:
gedit
如果没有就可以
apt-get install gedit
补充背景知识
X windows, X, 或X11 协议
- X windows, X, 或X11 ,是一种协议。
- 有server和client。
- X server 管理硬件,
- 捕捉键鼠输入,并告知client
- 根据client指示的需求,具体完成绘制的动作,包括用什么驱动程序等。
- client是应用程序,管理逻辑,
- 他想绘制图形,就会告诉X server需求, 比如在在某坐标,画一个多大,什么颜色的什么图形
- 当Linux需要图形界面的时候,就需要一个X server。(windows自带图形界面,而linux只有需要的时候才有)
- 如果需要远程连接linux服务器,并在本地windows系统下显示图形界面,则需要本地windows中安装X server。
linux中的DISPLAY环境变量、权限控制
用mobaxterm的话就不用管这个了
参考此文
DISPLAY用来设置将图形显示到何处,格式为:
hostname: displaynumber.screennumber
- hostname指Xserver所在的主机主机名或者ip地址,图形将显示在这一机器上。
- 可以是启动了图形界面的Linux/Unix机器, 也可以是安装了Exceed, X-Deep/32等Windows平台运行的Xserver的Windows机器.
- hostname 可以省略(但他后面的冒号不能省略)。如果省略则默认本机为默认的hostname。
- 有两种方式连接到Xserver:unix socket 和 tcp
- unix socket方式: 如果Host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver, 而不是TCP方式.
- 使用unix socket方式连接时,displaynumber表示连接的unix socket的路径, 如果displaynumber为0, 则表示连接到 /tmp/.X11-unix/X0 , screennumber则几乎总是0.
- TCP方式: 使用TCP方式连接时, displaynumber为连接的端口减去6000的值, 如果displaynumber为0, 则表示连接到6000端口
- unix socket方式: 如果Host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver, 而不是TCP方式.
权限控制
如果允许主机foo使用我这个X Server,可以使用"xhost +foo";
如果不允许主机foo使 用我这个X Server,可以使用"xhost -foo";
如果允许任何主机使用我这个X Server,简单的"xhost +"即可;
反之,"xhost -"将禁止任何主机使用我这个X Server
其他可能的操作(之前的笔记,不用管)
export DISPLAY=localhost:10.0
echo $DISPLAY
gedit
xhost +
vim /etc/ssh/sshd_config
首先把X11UseLocalhost 设为no。 就是这个有用!!
AddressFamily inet
/etc/init.d/ssh restart
service ssh restart
参考
更多推荐
所有评论(0)