转自:http://blog.csdn.net/shaoguangleo/article/details/6589816

Windows远程登陆Linux桌面方法


Putty

第一种:putty。其实这个工具并不是桌面客户端,它只不过是一个远程登陆Linux的命令提示工具,但是我们知道,在Linux中,命令基本上就是一切,所以用这个客户端还是能够做到你想要的任何事情。

不过很可惜,用命令你不能聊天,用命令你不能用浏览器上网,用命令你不能看电影,所以我们仍然需要图形的桌面环境。

Cygwin

第二种:cygwin。这个工具能够做很多事情,登陆Linux桌面只是其中一件。关于这个软件的教程,网上有个达人已经写的非常详细了,详情看这里。这个工具在Linux端是不需要任何配置的。另外要说明的是,你的Linux桌面环境,如果是KDE,那么打开窗口的命令是startkde,如果你不装这个,它会说你的命令无效;如果你装的是Gnome,那么应该使用的命令是gnome-session,详情可以查阅Gnome官方网站。

Xming

第三种:Xming。我估计这是最简单的登陆Linux桌面的方式了。可以到Xming的网站下载Xming软件,因为是Windows软件,所以安装非常简单。安装完成后会有两个快捷方式,一个是Xming,这个是做服务器的,一个是XLaunch,当你启动XLaunch的时候会自动启动服务器。

使用方法也是非常简单的,双击XLaunch图标打开,选择OneWindow-下一步-选择Start a porgram -下一步-输入gnome-session(或者startkde,取决于你的桌面软件)-选择Using PuTTY-输入主机地址、用户名和密码-下一步-下一步-这时候可以选择保存一下快捷方式,以后就不用每次输入了-下一步。完成了,这时候就可以看到桌面了。

开启ssh服务

注:所有上述软件都是几乎SSh协议,如果Linux没有开启这个协议的话,那么是无法连接到桌面的。可以用这样的方法打开SSh服务,在终端中输入ntsysv命令,在打开的窗口中找到SSHD服务,确保SSHD被选中,如果没有则按空格选中,按确定退出:

telnet

1。基础知识
linux提供服务是由运行在后台的守护程序(daemon)来执行的。
守护进程的工作就是打开1个端口(port),等待(listen)进入的连接。在C/S模式中,如果客户提请了1个连接,守护进程就创建(fork)子进程来响应这个连接,而父进程继续监听其他服务的请求。
但是,对于系统所提供的每1个服务,如果都必须运行1个监听某个端口连接发生的守护程序,那么通常意味着系统资源的浪费。为此,引入“扩展的网络守护进程服务程序”xinetd(xinetd internet daemon)。telnet服务也是由xinetd守护的。

2。检测telnet、telnet-server的rpm包是否安装
OS:RedHat9

[root@localhost root]#rpm -qa telnet
telnet-0.17-25
//telnet*.rpm是默认安装的//
[root@localhost root]#rpm -qa telnet-server

//telnet*.rpm是默认没有安装的//

3。安装telnet-server
第3张盘上有telnet-server-0.17-25.i386.rpm
[root@localhost root]#rpm -ivh telnet-server*.i386.rpm

4。修改telnet服务配置文件
vi /etc/xinetd.d/telnet
service telnet
{
disable = yes
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}

将disable=yes行前加#,或者改为disable=no
PS:
安装telnet-server后,系统才有文件/usr/sbin/in.telnetd

5。重新启动xinetd守护进程
由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd
[root@localhost root]#service xinetd restart

[root@localhost root]#/etc/init.d/xinetd restart

6。关闭系统的防火墙
linux系统默认的防火墙是“high”

命令行界面CLI:
[root@localhost root]# setup
选择:“firewall configuration”
选择:security level——“no firewall”

7。测试
telnet IP

QUOTE:
Red Hat Linux release 9 (Shrike)
Kernel 2.4.20-8 on an i686
login:
出现,就OK了!

8。telnet默认开机启动
1)。命令ntsysv
找到telnet,用空格键激活(*)服务
2)。命令chkconfig
chkconfig –add telnet
chkconfig telnet on
3)。图形用户界面GUI
redhat-conhat-config-services

“主菜单”——“系统设置”——“服务器设置”——“服务”

PS:
由于telnet登陆时是明文传送密码,所以不安全,建议使用ssh(secure shell)替代!
windows下一般用F-Secure SSH ,puttySSH

Xshell

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。

  Xshell 和SecureCRT的比较:

  Screen下的会话不会闪屏,而且可以回滚,这个功能太无敌了Script的执行顺序可以调整,SecureCRT的这个功能实在太呆可以同时发送指令到多个session,这个也不错键盘映射的兼容性要好一些,不用去自己改映射可以展现tunnel等的情况支持布局切换,像gnome-terminal缺憾是对Unicode制表符支持不够好,内置的sftp不怎么好使(该公司有另外的xftp)许可相对便宜,对个人、教育用户是免费的!XShell 和Putty& Pietty的比较:

  支持ZModem协议,putty虽有leputty据说可以实现,但我一直没成功 :(Session保存在文件中而非注册表,管理方便支持tab、自定义脚本、保存密码、多机管理…putty是自由软件,和商用的XShell比较不是很合适。putty也有很多插件可以实现部分有缺憾的功能,用起来会麻烦一些就是了。个人平常还是以putty为主,功能够用,速度飞快。大量机器的管理还是XShell合适。

  注意,XShell在商业环境使用下是需要买许可的。

SecureCRT

基本定义

  SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的远程系统的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输。有流行CRTTelnet客户机的所有特点,包括:自动注册、对不同主机保持不同的特性、打印功能、颜色设置、可变屏幕尺寸、用户定义的键位图和优良的VT100,VT102,VT220和ANSI竞争.能从命令行中运行或从浏览器中运行.其它特点包括文本手稿、易于使用的工具条、用户的键位图编辑器、可定制的ANSI颜色等.SecureCRT的SSH协议支持DES,3DES和RC4密码和密码与RSA鉴别.

概念解释

  SSH的英文全称是 Secure Shell。

  传统的网络服务程序,如:ftp 和telnet 在本质上都是不安全的,因为它们在网络上用明文传送口令和数据别有用心的人非常容易就可以截获这些口令和数据。而通过使用 SSH客户端与服务器端通讯时,用户名及口令均进行了加密,有效防止了对口令的窃听。同时通过 SSH的数据传输是经过压缩的,所以可以提高数据的传输速度,既然如此我们为什么不使用它呢。SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x 和 2.x。至于具体如何安装服务器端,普通用户就不需要关心了

putty

简介

  Putty

  随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程。在各种远

  

程登录工具中,Putty是

  出色的工具之一。

  Putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具。

  用它来远程管理Linux十分好用,其主要优点如下:

  ◆ 完全免费;

  ◆ 在Windows9x/NT/2000下运行的都非常好;

  ◆ 全面支持ssh1和ssh2;

  ◆ 绿色软件,无需安装,下载后在桌面建个快捷方式即可使用;

  ◆ 体积很小,仅364KB(0.54 beta版本);

  ◆ 操作简单,所有的操作都在一个控制面板中实现。

操作指南

  使用简介:

  

图1 Putty配置界面

把Putty下载到机器上,双击putty.exe,就出现如图1的配置界面。

  选择“Session”,在“Host Name (or IP address)”输入框中输入欲访问的主机名或IP,比如server1或192.168.9.4。端口号(Port)根据使用的协议有所区别,ssh默认使用22,telnet默认使用23,rlogin默认使用513。

  在“Protocol”单选栏中选择使用的协议,一般是telnet或ssh,这取决于服务器提供的服务。

  在“Saved Session”输入栏中输入任务的名字,单击“Save”按钮,就可以把任务配置保存起来了。

  配置完成后单击“Open”按钮,出现如图2的登录界面,就可以使用Putty连接Linux主机了。

  

图2 使用Putty登录界面

pietty

PieTTY 是由林弘德(Hung-TeLin, piaip)以PuTTY 源代码为基础,在 Windows 上发展的 Telnet/SSH 安全远端连线程式,修正与完整支援亚洲语系字符,可切换多种 Unicode 字符显示方式,提供简易 scp 上传界面,并增加透明视窗、无边框模式等视觉效果。PieTTY 与 PuTTY 同样采用 MIT License,但 PieTTY 目前并没有释出源代码,如果您有非常高度的安全需求,请自行斟酌是否使用 PieTTY。

 

VNC

VNC (Virtual Network Computing)是虚拟网络计算机的缩写。VNC是一款优秀的远程控制工具软件,由著名的AT&T的欧洲研究实验室开发的。VNC是在基于UNIX和Linux操作系统的免费的开放源码软件,远程控制能力强大,高效实用,其性能可以和Windows和MAC中的任何远程控制软件媲美。 在Linux中,VNC包括以下四各命令:vncserver,vncviewer,vncpasswd,和vncconnect。大多数情况下我只需要其中的两个命令:vncserver和vncviewer。

 

简介

  VNC基本上是属于一种显示系统,也就是说他能将完整的窗口界面通过网络,传输到另一台计算机的屏幕上. Windows服务器中包含的"Terminal Server"、Symantec公司开发的收费软件PCAnywhere、近期流行的Teamviewer、国内的协通XT800、快递通KDT都是属于这种原理的设计,同时这些软件又在VNC的原理基础上做了各自相应改进,提高了易用性、连通率和可穿透内网(Teamviewer、协通XT800、KDT).

特点

  同样可能远程连入UNIX、Linux进行图形化操作的还有流行的Xmanager,VNC与之相比——两者工作原理不一样,后者是远程连入操作系统,所有操作在UNIX、Linux主机服务端进行,即使操作过程中“本地电脑与操作主机网络断开”,也不影响操作的顺利进行;而后者(Xmanager)是通过端口将主机服务器的UI界面引导到本地电脑进行展现,如操作过程出现“本地电脑与操作主机网络断开”,操作将中断失败!如果操作都进行的工作任务非常重要,不能中断,如ORACLE RAC实施,结果是灾难性的!更重要的是,VNC是免费的、开源的,Xmanager你一定是用的破解注册版的。

组成部分

  VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer);另外一部分是服务器端的应用程序(vncserver)。VNC的基本运行原理和一些Windows下的远程控制软件很相象。VNC的服务器端应用程序在UNIX和Linux操作系统中适应性很强,图形用户界面十分友好,看上去和Windows下的软件界面也很类似。在任何安装了客户端的应用程序(vncviewer)的Linux平台的计算机都能十分方便的和安装了服务器端的应用程序(vncserver)的计算机相互连接。另外,服务器端 (vncserver)还内建了Java Web接口,这样用户通过服务器端对其他计算机的操作就能通过Netscape显示出来了,这样的操作过程和显示方式比较直观方便。

命令描述

  vncserver

  此服务程序必须在在主(或遥控)计算机上运行。你只能作为使用者(不需要根用户身份)使用此项服务。

  vncviewer

  本地应用程序,用于远程接入运行vncserver的计算机并显示其环境。你需要知道远程计算机的IP地址和vncserver设定的密码。

  vncpasswd

  vncserver的密码设置工具。vncserver服务程序没有设置密码将不能运行(好习惯)。如果你没有设置,运行vncserver时它会提示你输入一个密码。所以,一般我不会单独运行这个命令来设置密码。

  vncconnect

  告诉vncserver连接到远程一个运行vncviewer的计算机的IP和端口号。这样我就可以避免给其他人一个接入的密码。

  Xvnc

  一个vnc“主控”程序,一般来说不需要直接运行。(vncserver和vncviewer实际上是Xvnc的脚本)

  查找所有可用的选项,运行:

  Xvnc –help

出于安全的考虑,一般不建议直接以超级用户帐号运行vncserver程序。如果你需要超级用户的环境,请以一般用户登录后再使用su命令登录到超级用户帐号。

Vnc配置(阿斌提供)

打开ssh ,root登陆

sudo service  iptables stop

vncserver :1

关闭

打开ssh,zzb登陆

vncserver :2

 

 

 

要关闭的话需先看清各自的用户权限

 

 

 

 

&——————————————————————————

环境:RedHat Linux 5企业版。

Xwindows:gnome (红帽默认安装的图形界面)

 

尽管我们可以使用SSH连接远程通过字符界面来操作Linux,但是对于更多熟悉图形人来说是很不方便的,因此开启Linux的远程桌面还是很有必要的。目前有两种比较流行的方式:XDM(X display manager)方案和VNC方案,而我个人比较倾向于VNC方案,一是因为VNC方案配置起来相对比较容易,二是VNC方案支持多种连接方式,比如通过浏览器访问Linux桌面,免去需要安装客户端的麻烦。

 

接下来进入具体配置说明:

 

一,确认及安装VNCSERVER。

 

1,首先确认你服务器是否配置了VNCSERVER,可以在命令行下敲入以下命令查看:

 

[root@localhost: ~]#rpm -qa |grep vnc

 

vnc-server-4.1.2-14.el5    #返回VNCSEVER服务器端版本说明你已经安装了VNCSERVER。

 

2,如果没有安装VNCSEVER,那么从光盘找到安装包进行安装。

 

首先将光盘挂载(也叫解压)到某个目录这里是在/var/ftp/pub/下面建立了rhel5-64目录

 

mount -o looprhel-server-5.3-x86_64-dvd.iso /var/ftp/pub/rhel5-64/

 

然后在/var/ftp/pub/rhel5-64/Server目录下找到vnc-server-4.1.2-14.el5.x86_64.rpm安装包,使用RPM命令直接安装;

 

rpm -ivh vnc-server-4.1.2-14.el5.x86_64.rpm

 

 

二,开始配置VNCSERVER

 

1,启动VNCSERVER,第一次启动VNCSERVER会提示输入密码,这里分为管理员账户及普通账户,启动方式略有所不同。

 

管理员:

[root@localhost /]# vncserver

 

You will require a password to access yourdesktops.

 

Password: 123456            #输入vnc 连接密码

 

Verify: 123456                 #确认vnc密码

 

xauth: creating new authority file/root/.Xauthority

 

New ‘localhost.localdomain:1 (root)’desktop is localhost.localdomain:1

 

Creating default startup script/root/.vnc/xstartup

Starting applications specified in/root/.vnc/xstartup

Log file is/root/.vnc/localhost.localdomain:1.log

 

 

普通用户:

 

[root@localhost /]#su leo    #leo 是用户名

[leo@localhost /]$ vncserver

 

You will require a password to access yourdesktops.

 

Password: 123456            #输入vnc 连接密码

 

Verify: 123456                 #确认vnc密码

 

xauth: creating new authority file /home/leo/.Xauthority

 

New ‘localhost.localdomain:2 (leo)’ desktopis localhost.localdomain:2

 

Creating default startup script /home/leo/.vnc/xstartup

Starting applications specified in /home/leo/.vnc/xstartup

Log file is /home/leo/.vnc/localhost.localdomain:2.log

 

#这里要注意:每个用户都可以启动自己的VNCSERVER远程桌面,同时每个用户可以启动多个VNCSERVER远程桌面,它们用ip加端口号:ip:1、ip:2、ip:3 来标识、区分,使用同一端口会使另外登录的用户自动退出。另,VNCSERVER的大部分配置文件及日志文件都在用户home目录下.vnc目录下。

 

用户可以自定义启动号码如:

 

[leo@localhost /]$ vncserver :2        #注意:2前面一定要有空格。

A VNC server is already running as :2

 

三,相关桌面配置,RedHat Linux支持两种图形模式:KDE模式和gnome模式。

 

1,你的RH使用的什么图形模式这个一般只有登录到图形界面查看一下才能知道,或者通过ps -A命令列出所有当前运行的程序,看看有没有KDE或者gnome字样来判断一下。

 

如果你是gnome桌面,那么你需要修改/root/.vnc/xstartup的配置文件。

 

[root@localhost .vnc]# vi xstartup

 

#!/bin/sh

 

# Uncomment the following two lines fornormal desktop:

 

# unset SESSION_MANAGER        #将此行的注释去掉

 

# exec /etc/X11/xinit/xinitrc        #将此行的注释去掉

 

[ -x /etc/vnc/xstartup ] && exec/etc/vnc/xstartup

 

[ -r $HOME/.Xresources ] && xrdb$HOME/.Xresources

 

xsetroot -solid grey

 

vncconfig -iconic &

 

xterm -geometry 80×24+10+10 -ls -title“$VNCDESKTOP Desktop” &

 

gnome-session gnome           #添加这一句是连接时使用gnome 桌面环境

 

twm &

 

设置修改完毕最好是重启一次系统,否则设置不会生效。我采用的方法是杀死VNCSERVER进程再重运行VNCSERVER。

 

[root@localhost .vnc]#vncserver -kill:1      #这里你启动vncserver时是什么端口号要对应上。

[root@localhost .vnc]#vncserver :1           #重启VNCSERVER,注意:1前面一定要有空格。

 

2,设置用户信息及分辨率。

 

[root@localhost: ~]#vi/etc/sysconfig/vncservers

 

# The VNCSERVERS variable is a list ofdisplay:user pairs.

 

#

 

# Uncomment the lines below to start a VNCserver on display :2

 

# as my ‘myusername’ (adjust this to yourown). You will also

 

# need to set a VNC password; run ‘manvncpasswd’ to see how

 

# to do that.

 

#

 

# DO NOT RUN THIS SERVICE if your localarea network is

 

# untrusted! For a secure way of using VNC,see

 

#<URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html >.

 

# Use “-nolisten tcp” to prevent Xconnections to your VNC server via TCP.

 

# Use “-nohttpd” to prevent web-based VNCclients connecting.

 

# Use “-localhost” to prevent remote VNCclients connecting except when

 

# doing so through a secure tunnel. See the“-via” option in the

 

# `man vncviewer’ manual page.

 

VNCSERVERS=”1:root 2:leo”            #此处添加用户,一般只添加一个1:root也就行了。

 

VNCSERVERARGS[1]=”-geometry 800×600-nolisten tcp -nohttpd -localhost”

VNCSERVERARGS[2]=”-geometry 1024×768-nolisten tcp -nohttpd -localhost”

 

#注意:上面是分别设置的root和leo两个用户的分辨率,注意是用端口号区分的。

 

另外也可以通过命令行临时修改分辨率及色深,这种方式重启后就会丢失,这里暂时用不到,命令如下:

 

[root@localhost: ~]#vncserver -geometry 800×600        #设置vncserver的分辨率   

 

[root@localhost: ~]#vncserver -depth16           #设置vncserver的色深

 

到这里VNCSERVER服务器端就配置完成了。

 

四,客户端连接及使用。

 

1,访问方式

a、在linux下,运行vncviewer命令即可,服务器地址的写法形如192.168.1.11:1

b、在windows下,运行windows版本的vncviewer即可,用法与linux下相近。

c、用浏览器(平台无关),作为javaapplet来实现,以形如http://192.168.1.11:5801 的方式来启动 (vnc 端口从5800 开始依次类推,一般会是5800,5900)

 

以下为一些常识:

 

2,修改密码

 

运行vncpasswd即可

 

3,停止vncserver

 

#vncserver -kill :1

#vncserver -kill :2

 

注意到vncserver只能由启动它的用户来关闭,即时是root也不能关闭其它用户开启的vncserver,只能用kill命令暴力杀死进程。

 

4,稳定性设置

 

vncserver默认在多个客户机连接同一个vncserver的显示端口时,vncserver端口旧连接,而为新连接服务,可通过-dontdisconnect拒绝新连接请求而保持旧的连接。

 

5,同一个显示器可以连接多个客户机

 

#vncserver -alwaysshared

 

6,重启服务

 

service vncserver restart

 

7,让系统启动时自动启动VNCSERVER。

 

使用VNC连接登录到RedHat Linux图形界面,点击“系统”——“管理”——“服务器设置”——“服务”,在“后台服务”中找到VNCSERVER后勾选它,点击保存即可。

 

 

 

 

解决连接不上问题的方法:

1、防火墙开启  不能连接

关闭防火墙    service  iptables stop

查看防火墙状态   service iptables status

查看进程     ps axf | grepvnc/iptables

XManager

 Xmanager 是全新标准的跨平台集成解决方案。它是一个一站式解决方案,这个软件包含有以下一些产品:Xmanager3D(OpenGL),Xshell,Xftp和Xlpd。

  Xmanager PCX Server

  Xmanager是一个运行于MS Windows平台上的高性能的X window服务器。你可以在你的本地PC上同时运行Unix/Linux和Windows图形应用程序。

  Xshell

  Xshell是一个用于MS Windows平台的强大的SSH,TELNET,和RLOGIN终端仿真软件。它使得用户能轻松和安全地从WindowsPC上访问Unix/Linux主机。

  Xftp

  Xftp是一个用于MS Windows平台的强大的FTP和SFTP文件传输程序。Xftp让你能安全地在Unix/Linux和Windows PC之间传输文件。

  Xlpd

  Xlpd是一个用于MS Windows平台的LPD(行式打印机虚拟后台程序)应用程序。安装了Xlpd后,你的带有打印机的本地PC就成为了一个打印服务器,来自不同远程系统的打印任务都能在网络环境中得到请求和处理。(共享软件)

  Xstart

  Xstart是一个窗口化的登陆界面,要求填入session,host,protocol,user name, password。可进行远程登陆。

Xmanager 配置

我用的是RedHat Enterprise Linux 5.4和最新的Xmanager Enterprise3.0。首先先来了解一下什么是Xmanager。Xmanager全称Netsarang Xmanager,是国外一套非常优秀的远程监控软件。在UNIX/Linux和Windows网络环境中,Xmanager是最好的连通解决方案。我推荐大家下载Enterprise版本,企业版带的工具更多功能更强大。我们通过Xmanager连接Linux远程桌面进行图形化管理其实就是利用了Xmanager套装里面的Xbrowser程序。当然Linux远程图形化管理除了Xbrowser,还有同样优秀的VNC。下面介绍用Xbrowser连接Linux远程桌面的详细配置。都是我亲自测试过的,放心往下看吧!

一、如果你查过网上的资料你就会发现:RedHatEnterprise Linux 5与RedHatEnterprise Linux 4对于Xmanager的配置是不同的,前者没有/etc/X11/gdm/这个目录,它的gdm的配置文件放在/usr/share/gdm/custom.conf。

其实网上的写错了!!这里不是custom.conf,而是defaults.conf!反正我的RedHatEnterprise Linux 5.4是这样的,可能其它5系列版本不一样也没数的。

在/usr/share/gdm/defaults.conf里确保有以下几句配置(我在最后面直接加了这几句):

Enable=true
DisplaysPerHost=10
Port=177

二、在/etc/inittab里把默认级别改为5:
id:5:initdefault:

再把最后一句里
x:5:respawn:/etc/X11/prefdm -nodaemon
改成
x:5:respawn:/usr/sbin/gdm(注意这里是sbin,不是bin,网上的又错了,害得我前几次都没能成功,妈的!还好我后来自己发现了这个问题。)

三、让Root登陆Xmanager

以上修改之后,root用户还不能通过Xmanager远程登录Linux,还要继续修改/usr/share/gdm/defaults.conf文件,在[security]字段里开启以下两项:
AllowRoot=true
AllowRemoteRoot=true
我发现AllowRemoteRoot这一项可以不开启,看我的配置,它还是false,如下图:

四、开启Linux防火墙的177 UDP端口。

Xmanager连接gdm用的是UDP的177端口,所以防火墙上一定要打开这个端口,如下图:

  最后是重启系统。这样就小功告成了!在Windows系统上运行xmanager3里的Xbrowser程序,在里面新建一个Xmanager Session,在Host这里输入ip地址,其它配置都不要改变(包括端口号),确定退出。

  然后双击这个New Xmanager Session,进入登录界面,输入用户名和密码以后就可以登录到Linux的远程桌面了。

  最后再给大家几个用于检测和测试的Linux命令:

lsof -i:177
查看是否运行成功了!

etc/hosts
查看ip。有的时候连接不上可能是因为你的hosts文件里配置的IP地址不对。

/usr/sbin/gdm-restart
重启gdm。

Xming + PuTTY 在Windows下远程Linux主机使用图形界面的程序

2008-04-1813:31

一、原理
Linux/Unix的X Window具有网络透明性。X Window系统里有一个统一的Server来负责各个程序与显示器、键盘和鼠标等输入输出设备的交互,每个有GUI的应用程序都通过网络协议与Server进行交互。所以对于任何一个应用程序,本地运行和远程运行的差别仅仅是X Server的地址不同,别的没有差别。所以在Windows运行一个X Server,就可以很方便的远程运行有GUI的Linux应用了。同时,OpenSSH具有X转发功能,可以将Linux主机的X程序通过SSH的管道转发给客户端。于是,通过PuTTY到主机,再将接收到的由主机转发来的X程序的交互交给在本地Windows系统下运行的X Server来管理和显示,原则上说,这就可以实现远程使用Linux的GUI程序。

主机上需要的配置:
#vi /etc/ssh/sshd_config
取消这一行的注释——如果没有这一行则手动添加之:
X11Forwrding yes
这样配置的作用就是允许SSH的X转发。其实本质上说,这样做是有一定安全风险的,SSH并不能绝对的保证你数据的安全性,不过,一般情况下,这也够了。

二、安装Xming
需要在本地Windows上运行一个X Server。选择有很多:Cygwin下的X Server恐怕是最著名的,但是为了这么一个小小的事情去安装一个“相对巨大”的Cygwin,似乎有些夸张;除了Cygwin,还有两个著名的商业软件可以选用,Xwin32和Xmanager,上学期IC实验用的就是Xmanager,感觉很流畅很好用,不过,虽然Xmanager可以试用,但是终究还是商业软件;还有一个选择,就是这里要讲的,开源软件Xming。

Xming是一个配置简单而功能强大的开源X Server,可以运行在M$的XP/2003/Vista操作系统下。
Xming的主页:http://www.straightrunning.com/XmingNotes/
Xming的SourceForge页面:http://sourceforge.net/projects/xming/

从SourceForge下载Xming-setup.exe(最新的版本是6.9.0.31),在本地安装。
第一次运行时使用开始菜单里面的XLaunch来启动,产生一个初始的配置文件。对于简单的使用来说,不需要任何特殊的配置,一切使用默认即可。Xming的具体配置和使用可以参考Xming的Manual。
需要记住的是下图中标示出的“Display number”中的数字,此处使用默认的0。


启动完成后,在托盘区会出现一个“X”形状的图标,这表示Xming已经在运行了,将鼠标悬停上去,能看到当前使用的“Display number”。

三、配置PuTTY
Windows下有很多支持SSH/Telnet等远程登录协议的客户端,比如SecureCRT、XShell、PuTTY等,甚至大家用来登录BBS灌水用的FTerm都带有SSH的功能,只不过不如PuTTY这样的软件专业和强大罢了。

我用的是著名的免费的PuTTY,相信很多人的选择也跟我一样。因此,就不再赘述PuTTY的配置和使用了。这里要说的,是添加PuTTY对X转发的支持。运行PuTTY,在配置界面,选择“Connection-SSh-X11”,选中“Enable X11forwarding”,“X display location”中填上上一步中“Display number”中的数字(此处就是“localhost:0”)。

然后连接登录远程主机,看上去一切正常的样子。

四、问题及解决之道
于是试着运行一下emacs吧!
嘿!图形界面果然出来了,只是,咋看不到文字,全是些方块啊?!

看看终端的输出信息:
-bash-2.05b$ emacs
Warning: Cannot convert string "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*" to type FontStruct
Warning: Cannot convert string "-*-helvetica-medium-r-*–*-120-*-*-*-*-iso8859-1" to type FontStruct
哦,原来是Xming没有相应的字体!
去Xming的主页查查manual,可以为Xming添加Windows的系统字体,也可以使用Xming提供的字体。

使用Xming提供的字体是很简单的,从Xming的SourceForge页面下载xming-fonts-setup.exe(最新版本是7.3.0.15),安装到Xming的安装路径下即可。我的Xming安装路径是D:\Program\Xming\,则安装字体之后的字体路径就是D:\Program\Xming\fonts\。经测试,这样安装字体后,运行emacs字体能正常显示了。

如果不想安装字体,自然也可以让Xming使用Windows的系统字体。可是怎么配置呢?
还记得Linux下是怎么添加字体的么?对了,要为字体生成cache文件,使用的工具就是mkfontscale。
为此,从Xming的SourceForge页面下载Xming-tools-and-clients,解压缩到Xming的安装路径。切换到Windows的的cmd(命令提示符),cd到Xming的目录,执行以下命令:
>mkfontscale C:/WINDOWS/Fonts
>mkfontscale -b -s -l C:/WINDOWS/Fonts   #ignore the 'Couldn't…fon' messages
然后编辑|Xming安装路径下的font-dirs文件,添加字体路径:
C:\WINDOWS\Fonts
记住:虽然是在Windows下,注意区分大小写仍然是个好习惯。

OK!再来试试,嘿,这下子emacs是不是正常多了呢?

小小的Tips:用你的防火墙阻止Xming访问网络。因为,这样的一个X Server本质是不安全的,而且,你并不需要它联网,因为你只是在本机使用而已。

感受:Xming总体来说还是不如Xmanager,运行的流畅程度还是有不小的差距,尤其是鼠标的移动,感觉一顿一顿的,纵然是在局域网内,情况也没有好特别多。

 

使用cygwin X server实现Linux远程桌面 (forwindows)

 

在windows上访问linux有多种方法:

对于习惯使用命令行的人来说,可以使用终端的方式进行访问,也就是通过telnet, ssh等方法远程登录到linux主机,对其进行访问。至于登录软件,既可以使用windows自带的命令行界面,也可以使用专门的终端软件,例如putty, secureCRT等。其中putty是免费软件,而secureCRT并不是。

对于习惯使用图形界面的人来说,更希望以图形界面的方式来访问linux主机。主要有以下几种方法:

·        使用vnc技术。网上这方面的文档很多,我也写过一篇:用VNC实现远程桌面共享(支持Windows,Linux, …)

·        在windows上提供一个X server,linux主机上X client程序通过XDMCP协议 (X Display Manager Control Protocol)使自己显示在windows上。

今天我主要介绍第二种方法。

有很多软件在windows上实现了X server的功能,例如Xmanager,HummingbirdExceed,cygwinX server,以及XmingX Server for Windows。前两个都是商业软件,需要付费使用;cygwin和Xming是免费软件。本文主要介绍如何使用cygwin X实现Linux的远程桌面。关于Xming X server的使用请参见其主页。

先调动一下大家的积极性,看看最终的效果图:

点击查看大图

[ 背景知识 ]

网络上有很多关于X的背景知识,如果你想对X了解的深入一些,去网上搜索一下吧。

这里是王垠写的”理解Xwindow“,介绍了X server, X client, 窗口管理器,桌面环境相关的知识,读一下对理解本文也有帮助。

好了,现在我们开始配置。

[ 安装cygwin ]

Cygwin项目的目的是在windows主机上提供一个类UNIX的环境,网络也有很多相关的资料。大家可以看一下这一篇:Cygwin使用指南,这篇文章在网络上流行比较广,作者未知,上面提供的仅是其中一个链接。

如果你的计算机上还没有cygwin,首先需要安装它。

这个过程很简单,先到cygwin的主页去下载setup.exe,然后使用setup.exe进行安装。在安装的过程中需要选择要安装的组件,此时需要把X server组件选上。

在这里有一个安装指南,虽然是英文的,不过看抓图就可以了。

选择X server组件时,其实只需要选择xorg-x11-base,选中它之后,其它相关组件会自动被选中。

在安装cygwin时,记得把expect这个软件装上,它位于interpreters类别下面。我会在后面的章节中说明为什么要安装这个组件。

[ 运行cygwin X server]

在运行X server前,先假定一下我们的组网。

我们假设X server运行在一台windows XP计算机上,此机器的IP地址是192.168.190.91。

我们的Linux主机上将运行X client程序,它的IP地址是192.168.190.15。

在你的安装目录中找到c:\cygwin\usr\X11R6\bin\startxwin.bat(假设你把cygwin安装在c:\cygwin目录),双击它就会启动X server,同时会启动一个终端(这个终端运行在Windows本地),效果如下图:

点击查看大图

现在,我们要允许远程的X client对X server进行访问,因此,在终端中输入下面的命令,

xhost + 192.168.190.15

接下来,我们要到X client所在的计算机上进行配置,使用telnet或ssh登录Linux主机(192.168.190.15),然后运行下面的命令,

export DISPLAY=192.168.190.91:0.0

xterm &

gvim &

上面第一条命令设置DISPLAY变量,它表示X客户端将使用192.168.190.91上的0.0来显示自己。192.168.190.91是运行cygwin X server的Windows计算机(它的防火墙要打开X server所监听的端口,通常为6000)。

后面两条命令则在Linux主机上(192.168.190.15)启动了两个程序,一个是xterm,另外一个是gvim,我们发现这两个程序启动后,并没有显示在Linux主机上,相反,它们显示在了windows主机上。下图是执行完上述命令的效果图,我使用putty远程登录到Linux主机上,然后执行上述命令:

点击查看大图

用这种方法,你可以在Linux主机上运行任何图形程序,并把它显示到windows上。

如果你想把诸如KDE、GNOME这样的桌面环境也显示到windows上,就需要做些调整。

[ 运行桌面环境 ]

在此我以KDE桌面为例。要把KDE桌面环境显示到windows上的X server中,需要更改一下X server的启动批处理。

首先备份一下c:\cygwin\usr\X11R6\bin\startxwin.bat,然后使用文本编辑器打开此文件,找到下面这行:

%RUN% XWin -multiwindow -clipboard -silent-dup-error

去掉”-multiwindow“参数:

%RUN% XWin -clipboard -silent-dup-error

我们通常不需要启动一个xterm窗口,因此找到下面这行:

%RUN% xterm -e /usr/bin/bash –l

把它注释掉:

REM %RUN% xterm -e /usr/bin/bash –l

好了,批处理文件改完了。

回想一下上面的操作,在启动了X server后,我们执行了xhost命令来设置允许哪些计算机连接到X server,现在我们可以在配置文件中设置它。打开一个cygwin窗口,输入下面的命令:

echo "192.168.190.15" >> /etc/X0.hosts

上面的命令会在/etc/X0.hosts文件中加入你想允许的X client,你可以在此文件中加入你的X客户端。因为我们使用的DISPLAY是0,所以在文件/etc/X0.hosts中增加;如果使用DISPLAY 1,则需要修改文件/etc/X1.hosts文件。现在启动X server后,192.168.190.15就被自动允许接入了。

现在我们再次双击startxwin.bat批处理,执行后就会出现一个丑陋的空白窗口,这就是所谓的根窗口。之所以是空白的,是因为现在还没有运行任何窗口管理器。别急,我们使用telnet或ssh远程登录Linux主机,执行命令:

startkde &

哈哈~~~本文开头所展示的KDE窗口出来了!!!现在你在KDE中运行任何程序,它们都运行在Linux主机上,却把结果显示在Windows主机上。

[ 创建快捷方式 ]

在上面的操作中,启动X server后,需要使用telnet或ssh登录到Linux主机,才能启动自己想要的X client程序,有没有更简单的方法?

现在我们就需要用到expect软件了。这是一个如此有用的软件,以至于我忍不住要在这里插一段广告。

Expect为用户提供一种机制,使用户能够自动执行一些交互式的任务。例如,通常我们在使用telnet的时候,都需要手动输入用户名、密码才能登录。而使用Expect,我们就可以实现全自动的telnet交互,不需用户干预。Expect由Don Libes开发,基于TCL内核,它的主页在http://expect.nist.gov/。

广告时间结束,我们继续。我使用expect编写了如下的TCL/EXPECT脚本,它可以使用ssh自动登录到指定Linux主机,然后启动我们需要的程序。程序如下:

#! /bin/expect -f

 

# Change these variable to yours

set user {easwy}

set host {192.168.190.15}

set xserver {192.168.190.91}

set password {123456}

set program {startkde}

 

set timeout 5

set done 0

 

spawn ssh "$user@$host"

 

while {!$done} {

    expect {

        "*(yes/no)?*"{

            # If the 1st timerun ssh, it will prompt continue or not

            # answer yes

            exp_send"yes\n"

        }

        "assword*" {

            # Answer password

            exp_send"$password\n"

        }

        "\$*" {

            # Exit the loop

            incr done

        }

        "#*" {

            # Exit the loop

            incr done

        }

        timeout {

            # Timeout

            exp_send_user"Login timeout, please check!"

        }

    }

}

 

# Set DISPLAY environment variable

exp_send "export DISPLAY=$xserver:0\n"

 

# Start your program

exp_send "nohup $program &\n"

expect -regexp {\[[0-9]*\] [0-9]*}

exp_send "\n"

 

# Finished

把上面的内容保存为一个文件,例如,保存为cygwin的~/login.exp。注意:把脚本起始处的5个变量替换成你自己的,只需要替换大括号中间的内容。使用telnet的朋友请自行修改此脚本。

下面我们再改一下c:\cygwin\usr\X11R6\bin\startxwin.bat文件,在此文件的最后增加:

REM Start your X client program

%CYGWIN_ROOT%\bin\run -p /bin expect -f ~/login.exp

我们使用expect来执行刚才保存的~/login.exp。

现在,我们右击startxwin.bat文件,选择“发送到桌面快捷方式”。以后,只要你双击此快捷方式,就能立刻在Windows上使用Linux主机上的程序了。

我们再来看一个有趣的例子。

点击查看大图

在上图中共开了三个终端,它们分别运行在不同的主机上,却都在Windows主机上进行输入输出。这就是X window的魅力了,如果你愿意,你还可以把其它Windows及Linux主机上的程序显示到这个X server中,正所谓一”桥”飞架南北,天堑变通途。

在本文完成后,经网友jiachunyu介绍,才知道有一个名为XWinLogon的软件,它也是使用cygwin的X server实现Linux的远程桌面。相比之下,它的安装和使用都简单了很多。这个软件的主页在:http://sourceforge.net/projects/xwinlogon/

或者

http://www.calcmaster.net/visual-c++/xwinlogon/

有兴趣可以试一下。

上述方法大多经过试验。

如果各位有更好的方法,请告诉我一声。