`

转载 cygwin x server 远程桌面

 
阅读更多

 

 

转载自: http://easwy.com/blog/archives/linux-remote-desktop-via-cygwin-x-server/

 

易水博客

关注Linux, Scala, Android, Java, 开源软件和嵌入式系统

 

用cygwin X server实现Linux远程桌面 (for windows)

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

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

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

有很多软件在windows上实现了X server的功能,例如XmanagerHummingbird Exceedcygwin X server,以及Xming X 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 time run 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/

有兴趣可以试一下。

需要说明的是,XWinLogon中包含了部分cygwin的软件包,如果你安装了cygwin,则不能安装此软件(我没有试过,在作者主页这样说明)。

[参考文档]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/linux-remote-desktop-via-cygwin-x-server/

文章的脚注信息由WordPress的wp-posturl插件自动生成

分享到:
评论

相关推荐

    cygwin-x64

    在标题中提到的“cygwin-x64”,指的是Cygwin的64位版本,这适合于运行在64位Windows操作系统上的用户。64位版本相对于32位版本,能够处理更大的内存地址空间,支持更多的处理器寄存器,以及优化针对64位处理器的...

    threadx cygwin skyeye基于2410

    标题中的“threadx cygwin skyeye基于2410”指的是将ThreadX实时操作系统(RTOS)移植到基于Cygwin环境的SkyEye模拟器上,以支持Samsung 2410处理器。ThreadX是一款广泛使用的嵌入式RTOS,Cygwin则是一个在Windows上...

    win7下搭建nfs-server的方法

    win7上搭建nfs服务器一共有三种方法: 1、通过软件hanewin_nfs_server来搭建; 2、通过cygwin+nfs-server的方式搭建; 3、利用win7微软提供的nfs server服务来搭建;

    cygwin 桌面unix

    cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的...

    c++ vnc远程桌面.rar

    标题 "c++ vnc远程桌面.rar" 涉及到的是使用C++编程语言实现的VNC(Virtual Network Computing)远程桌面系统。VNC是一种基于RFB协议的远程桌面技术,允许用户通过网络访问和控制远程计算机的图形界面。在这个项目中...

    udp server.rar_ UDP Server_cygwin_udp server_unix server

    在"udp server.rar_ UDP Server_cygwin_udp server_unix server"这个压缩包中,我们可以看到几个关键的元素: 1. **SERVER.C**:这是一个C语言编写的源代码文件,很可能包含了实现UDP服务器的核心逻辑。在C语言中...

    cygwin.rar x64

    【cygwin.rar x64】是一个针对64位操作系统的Cygwin软件包,它是一个流行的开源工具,用于在Windows环境下提供一个类Linux的环境。Cygwin的主要功能是模拟Linux的POSIX接口,使得许多原生为Linux或Unix的命令行工具...

    DHCP安装程序 for Cygwin

    可以在cygwin环境下,启动DHCP服务,可以单独使用。 配合TFTP协议,可以网络PXE启动。

    cygwin的安装

    XDMCP (X Display Manager Control Protocol) 可以让远程用户登录到本地 X Server,从而远程控制桌面环境。Cygwin/X 支持 XDMCP 协议,使得用户能够方便地建立远程会话。 ##### 显示远程客户端 Cygwin/X 可以用来...

    Windows下运行XServer.pdf

    窗口管理器是XServer上的一个特殊应用,它负责管理窗口的布局、大小调整、移动和关闭等操作,有些甚至提供虚拟桌面和鼠标手势功能。 要让Windows运行远程Linux的GUI程序,你需要在Windows上安装一个XServer软件。...

    cygwin setup-x86_64-2.874.zip

    5. **配置环境**: 安装完成后,可以在开始菜单或桌面快捷方式启动Cygwin的终端(bash shell)。配置环境变量,如PATH,以确保可以顺利运行Cygwin程序。 6. **使用Cygwin**: 一旦安装完成,用户就可以在Windows环境...

    Cygwin User's Guide

    - **同时支持Windows NT和9x系列**:Cygwin的设计考虑到了不同版本的Windows操作系统,使得无论是在较新的NT内核还是较旧的9x内核上,都能获得稳定的性能。 - **权限与安全**:Cygwin提供了一套与Windows集成的安全...

    windows平台下载安装cygwin

    在Windows平台上,为了搭建Hadoop开发环境,Cygwin是一个重要的工具。Cygwin是一个开源软件,它提供了一个类似于Linux的环境,使开发者能够在Windows系统上运行许多原本只能在Unix或Linux环境下执行的命令行工具和...

    cygwin之root权限

    ### Cygwin获取Root权限详解 #### 背景与需求 Cygwin是一个在Windows平台上模拟类Unix环境的强大工具,它提供了大量的GNU和开源工具,使得开发人员可以在Windows上像在Linux环境下那样进行开发工作。然而,在某些...

    Cygwin2.850离线安装包

    Cygwin是一款强大的开源工具,它为Windows操作系统提供了一个类UNIX环境,允许用户在Windows上运行许多GNU/Linux命令行工具和应用程序。Cygwin2.850是该软件的一个特定版本,发布于2014年8月15日。这个离线安装包...

    Cygwin

    **Cygwin详解** Cygwin是一款强大的开源软件工具,它为Windows操作系统提供了一个类Unix的环境,使得用户能够在Windows平台上模拟Linux或Unix的操作环境。这个名称来源于“Cyg”代表Windows下的“Cygwin32”库,而...

    cygwin_lite, 小巧的cygwin虚拟机

    cygwin_lite, 小巧的cygwin虚拟机

    Cygwin 64位免安装版

    Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序...

    Cygwin User Guide(PDF)

    - **支持 Windows NT 和 9x**:Cygwin 支持多种 Windows 版本,包括较老的 Windows 9x。 - **权限与安全**:通过 ntsec 工具实现 NT 安全模型的支持。 - **文件访问**:支持 Linux 文件权限映射至 Windows 文件系统...

Global site tag (gtag.js) - Google Analytics