在linux系统中使用windows应用程序打开本地文件

 

原创文章,转载请注明出处。

written by:zengyi   2009-10-26

 

       是不是觉得这个题目很迷惑呢?完整一点的说法是:在linux上双击一个文件,比如后缀为doc的Word文档,调用的程序是远程windows上的office Word来打开,此时linux上边不需要安装OpenOffice等可以打开doc的应用程序。这样说应该更好理解了吧。

 

先来一张效果图吧:

 

效果图

  

  

    1. 先介绍下需要的工具吧:

        操作系统:Ubuntu 8.04 (or fedora)、  windows server 2003

        机器两台:一台安装linux,一台安装windows (当然也可以用虚拟机,不过为了更形象模拟,建议用两台机器)

        软件: rdesktop、seamlessrdp (这两个在网上都比较容易找到,具体的安装说明这也不多介绍)

 

    2. rdesktop及seamlessrdp的配置

        scuwolf 在他的博客http://scuwolf.72pines.com/archives/5中对这两者的具体配置说明的比较详细,在这我直接搬来了一部分(scuwolf兄,如果觉得有侵权嫌疑,请速与我联系,将会在第一时间删除)。

 

     <1> 配置debian
        下载rdesktop: sudo apt-get install desktop;
     <2>.配置windows xp
        (1)下载seamlessrdp,解压至c:/seamlessrdp;
        (2)远程桌面:在“控制面版”的“系统”,“远程”,勾上“允许用户远程连接到此计算机;
        (3)控制面版”->“用户帐户”->“更改用户登录或注销的方式”,确认“使用欢迎屏幕”使用快速用户切换”都已勾上;
        (4)修改注册表 HKEY_CURRENT_USER/Software/Microsoft/Windows/ CurrentVersion/Policies/Explorer. Create a DWORD called NoDesktop set to 1.

        做完上面的准备工作之后,打开debian terminal

        输入命令:
        rdesktop -A -s “c:/seamlessrdp/seamlessrdpshell.exe C:/windows/explorer.exe” YOUR_WINXP_IP:3389 -u administrator -p ******* -r sound:local:oss

       到此你就可以看到一个windows程序打开在linux下边了,crazy?

 

     3. 打开一个本地文件

         分析上面的rdesktop命令:-s后面的脚本是通过seamlessrdpshell.exe 来打开explorer.exe,所以我们完全可以在explorer.exe的后面加上运行时的参数,如URL地址等,这样打开后就不会只是个应用程序了。

         如果打开的不是一个URL地址,而是打开linux上的本地文件,该如何传递文件路径给windows上的应用程序呢?Google一番后发现,在linux系统中存在以下几个文件关联的地方:

         (1)  /usr/share/applications/xxx.desktop          // 所有用户的应用程序配置文件

         (2)  ~/.local/share/applications/xxx.desktop     // 当前用户的应用程序配置文件

         (3)  /usr/share/applications/default.list            // 所有用户的文件关联配置文件

         (4)  ~/.local/share/applications/default.list       // 当前用户的文件关联配置文件

        开始修改配置,修改前建议先做个备份。由于当前用户配置文件优先于总配置文件,所以修改当前用户的两个文件即可。过程如下:

        # cp ~/.local/share/applications/default.list  ~/.local/share/applications/default.list.bak

        // 在这我演示的是打开本地文本文件,所以修改gedit.desktop文件就可以了,其他类似

        // 修改之前先做个备份 

        # cp  ~/.local/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop.bak

        # vi ~/.local/share/applications/gedit.desktop

        找到里边的 Exec=gedit %U 一行,将其修改为Exec=zengyirdp %U。这里的zengyirdp是我写的一个小脚本,存放在/usr/bin目录下,代码如下:

        #!/bin/bash
        filename=$(basename $1)
        rdesktop -A -s "C:/seamlessrdp/seamlessrdpshell.exe notepad 192.168.0.1//windows//$filename" 192.168.0.56:3389 -u administrator -p 123456

        // 具体的ip地址和用户名密码根据自己的配置修改,其中192.168.0.1为linux的ip地址、192.168.0.56为windows的ip地址、administrator 是windows的登入名、123456为windows的登入密码

        看上面的脚本,大家应该都看出还需在linux上配置一个samba服务器,建立一个windows目录并把它设置为共享。这样是不是就可以了呢?no,要实现双击一个文件就打开,我们还需修改default.list文件。为了让windows程序打开所有文本文件,将default.list里边所有text/开头的项我们都设置成gedit.desktop(并不是必须的,只是为了省事,各位可根据自己需要修改),如下所示:

         text/abiword=gedit.desktop
         text/comma-separated-values=gedit.desktop
         text/csv=gedit.desktop
         text/html=firefox.desktop
         text/plain=gedit.desktop
         text/richtext=gedit.desktop
         text/rtf=gedit.desktop
         text/spreadsheet=gedit.desktop
         text/tab-separated-values=gedit.desktop
         text/x-comma-separated-values=gedit.desktop
         text/x-chdr=gedit.desktop
         text/x-csrc=gedit.desktop
         text/x-dtd=gedit.desktop
         text/x-java=gedit.desktop
         text/mathml=gedit.desktop
         text/x-python=gedit.desktop
         text/x-sql=gedit.desktop
         text/xml=gedit.desktop

         好了,配置完成了。在共享出去的windows目录下我们touch一个文件,并随意输入些文字。如:

建立一个名为a.txt的文件,echo "aaaaaaaa" > a.txt ;用鼠标双击一下a.txt看看会出现什么,是不是发现熟悉的windows notepad打开了a.txt?

 

 

最初发表在163博客上:http://zengyi2008.blog.163.com/blog/static/12142064200992692116681/edit/

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页