原创文章,转载请注明出处。
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/