对于”无缝“,我觉得要做到几乎都查觉不出虚拟机的存在。也就是说,至少要能在主机上能通过双击文件的方式,然后虚拟机就会使用相应的程序打开该文件。
这样我就可以通过双击.doc然后用MS2016来编辑文档了,而且还让人感觉像是原生的。
其中最为关键的地方是:如何解决虚拟机的通信问题?也就是说,虚拟机是如何知道主机的操作的?
本人有一个最基本的想法:通过文件来通信。基本想法是这个样子的:
1、制作一个*.desktop文件,当选择右键打开程序时,该desktop文件调用脚本在指定位置生成一个文本,存有指定的软件和被指定的文件信息;
2、在虚拟机中制作一个脚本,监视该文件的存在性;
3、如果存在,那么读取其中内容并调用相应的程序并打开相应的文件;与此同时,将该文件删除。
----------
其中比较量大的工作应该是虚拟机的脚本,由于我不太懂windows的cmd脚本,也不知道可行性如何,和大家讨论一下。
不知道有没有人已经做了相似的工作?或者有更好的想法?
----------------------
听说VMare已经实现该部分的功能?
--更新-----------------------------------
花了一天时间,基本上完成了windows端的编辑问题。
首先虚拟机中已将主机的整个/home/xxx/文件夹挂到"E:\\"这个网络硬盘上面去了。
另外虚拟机winxp,安装了python2.7和pywin32这个python库。
下面是python的代码,唯一需要设置的就是就是其中的被监视文件。
注意,这个被监视文件必须在网络硬盘的(在这里也就是/home/xxx/下面对应的位置)
如果该被监视文件存在,那么该脚本就会读取文件内容,然而根据脚本内容来调用相关的软件。
代码: 全选
#coding=utf-8
import os
import time
import win32api
infile = 'E:\\VirtualBox VMs\\cmdfold\\cmd' #被监视文件位置
while(1):
print '1';
ret = os.path.exists(infile)
if ret == False:
time.sleep(1)
continue;
input = open(infile,'r')
print input
index = 1
for line in input:
line=line.decode('utf-8')
line=line.strip('\n')
if index == 1:
EXE = line;
if index == 2:
filename = line;
index = index + 1
input.close();
#要加入双引号程序才能正确运行
filename = '"'+filename +'"'
EXE = '"' + EXE + '"'
print filename
win32api.ShellExecute(0,'open',EXE,filename,'',1)
os.remove(infile)
代码: 全选
C:\\Program Files\\Microsoft Office\\Office14\\WINWORD.EXE
E:\\Desktop\\测试文档.docx
就写到这儿了,基本可以认为windows端差不多了。至于linux端,那就是想办法生成这个文件就行了。
------------------------------------------------------------------------