Linux下的GUI图形界面,是分为两部分的。
一部分是X Server,负责处理键盘,鼠标,窗口消息,并接收X Client的请求把要显示的东西显示在屏幕上;
另一部分是X Client,所有的程序都是运行在X client中,然后X Client向X server发送“嘿我要显示一张有关闭按钮的窗口”的请求,X Server处理后,控制我们的显示器显示相应的“图片”。
更多的知识可以查看这里:理解XWindow
X server和X client可以运行在同一台机器上,比如最常见的Ubuntu桌面版。当然我们也可以在两台机器上分别运行X Server和X Client。如果两台都是Linux系统,那就很好办了,因为两边都安装了X Server和X Client,只要把这台机器(本机)的X Server和远程机的X Client连接起来就好了。
不过,如果有一台是Windows的话,也是有办法的——
安一个X Server就好了:Xming X Server for Windows
下载安装后运行,托盘会显示一个X形状态的图标,把鼠标放上去会显示Xming Server:0.0
,意思是已经运行在本地的0.0端口。
有了X Server之后,我们就可以通过SSH连接到另一台Linux机器,运行GUI程序了:
1、首先,要开启Linux上的sshd x11forwarding:
vi /etc/ssh/sshd_config
# 修改其中的转发配置X11Forwarding为yes,如果没有则添加下面一行
X11Forwarding yes
# 重启sshd服务
sudo service sshd restart
2、然后,在Windows上通过SSH连接Linux
Windows上的SSH工具有不少,不过个人还是只推荐Git Bash里带的SSH:Git Bash
下载安装运行Git Bash,启动后首先要配置一下环境变量DISPLAY:
export DISPLAY=localhost:0.0 # 0.0为刚刚托盘处显示的本地X Server端口号
echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
之后就可以通过SSH连接,运行Linux上的GUI程序了。
SSH远程连接有3种模式:
ssh user@192.168.2.2 #默认模式,如果ssh_config文件没有修改过的,默认就是disabled,即不能进行X11转发
ssh -X user@192.168.2.2 #通过untrusted模式进行X11转发,连接不可信,大部分GUI操作会无法进行
ssh -Y user@192.168.2.2 #通过trusted模式进行X11转发,完全信任sshd服务器,可以对GUI进行完全控制
显示,应该用ssh -Y
模式。
连接上之后,就可以运行GUID程序了,比如可以试试vbox
,或者vmware
,gvim
也行
最后,虽然在Linux远程机上安装一些Windows mstsc
支持的远程桌面或者VNC也可以,但是效果和简易程度,都比不上X Window这种方法。