1、背景
在上一篇博客(Windows转发Linux系统的X11(一):By XMing)中,笔者展示了如何使用XMing来实现X11 server的转发,但是在文章的最后,笔者提到,在使用XMing转发某些大型GUI程序(例如Spyder)时,就会产生奔溃错误(The X11 connection broke (error 1). Did the X11 server die?):
笔者猜测,这可能是XMing程序对于这种大型的GUI程序转发存在一些缺陷。
解决这个问题的一个方法,就是使用MobaXterm自带的内置X11 forwarding工具来实现Linux GUI的转发。
2.Windows (Client端)设置
2.1安装Mobaxterm
在Mobaxterm的官网MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download上下载一个免费版本的Mobaxterm,然后安装。
这里不多赘述,一步一步往下就好。
2.2设置Mobaxterm
点击Session->SSH,在Remote host中输入Linux服务器IP,如A.A.A.A,点击“OK”,输入用户名和密码,连接到Linux服务器。
2.3查看Mobaxterm的监听端口设置
一般来说,此时,Mobaxterm右上角的标致已经亮了,表示此时Mobaxterm已经在监听X11 server了,(如果没亮请点击这个标志来启动监听服务)。启动后,鼠标放到这个标志上,右键,可以看到Mobaxterm的所有监听端口:
找到Windows主机对应的IP(上面红色遮挡的IP及端口),记下IP及后面的端口号,例如:
B.B.B.B:0.0
3.Linux (Server端)设置
这里的设置和上一篇博客(Windows转发Linux系统的X11(一):By XMing)中关于Linux设置一样。
3.1 ssh/sshd配置设置
进入Linux,使用管理员(root)权限进行如下操作:
[root@xxx]vi /etc/ssh/ssh_config
将ssh_config中和X11相关条目进行如下设置(注意记得去掉前面的注释符号):
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
为了保险起见,将sshd_config(注意和ssh_config不是一个文件)中的相关内容也进行改变:
[root@xxx]vi /etc/ssh/sshd_config
AllowAgentForwarding yes
X11Forwarding yes
编辑完成后,重启sshd服务:
systemctrl restart sshd
3.2 添加DISPLAY变量设置
将DISPLAY变量增加到bash环境中。
a.假如想让所有用户都生效,则编辑/etc/profile文件;
[root@xxx]vi /etc/profile
增加如下内容:
if [[ -n $SSH_CONNECTION ]]; then
export DISPLAY="B.B.B.B:0.0" #这里Windows IP即为能够前面安装了Mobaxterm的windows的IP
fi
注意千万不要将去掉if语句,这将会导致Linux系统图形界面/xrdp远程界面无法登录或闪退。
source一下/etc/profile 使得环境变量生效,或者重新打开一个terminal登录进Linux
[root@xxx]source /etc/profile
b.假如只想让某个用户生效,那么编辑该用户~目录下的.bashrc文件
[someone@xxx]vi ~/.bashrc
if [[ -n $SSH_CONNECTION ]]; then
export DISPLAY="B.B.B.B:0.0" #这里Windows IP即为能够前面安装了Mobaxterm的windows的IP
fi
注意千万不要将去掉if语句,这将会导致Linux系统图形界面/xrdp远程界面无法登录或闪退。
source一下~/.bashrc使得环境变量生效,或者重新打开一个terminal登录进Linux
[someone@xxx]source ~/.bashrc
注:也可以不适用系统变量SSH_CONNECTION,直接在~/.ssh/rc中编辑export命令使得环境变量DISPLAY生效,这儿不再赘述。
4.打开Spyder
在Windows MobaXterm连接中输入Spyder打开:
[someone@xxx]sypder &