步骤

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/X0screennumber则几乎总是0.
    • TCP方式: 使用TCP方式连接时, displaynumber为连接的端口减去6000的值, 如果displaynumber为0, 则表示连接到6000端口

权限控制
如果允许主机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

参考

https://blog.csdn.net/zywvvd/article/details/115261426

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐