关于无缝使用虚拟机的一个想法

Kvm、VMware、Virtualbox、Xen、Qemu 等
回复
yinflying
帖子: 26
注册时间: 2015-06-01 23:48
系统: Ubuntu14.04

关于无缝使用虚拟机的一个想法

#1

帖子 yinflying » 2016-12-31 16:07

virtualbox有无缝模式,如果将windows的状态栏隐藏起来,那么基本上就完全看不到到虚拟机了。

对于”无缝“,我觉得要做到几乎都查觉不出虚拟机的存在。也就是说,至少要能在主机上能通过双击文件的方式,然后虚拟机就会使用相应的程序打开该文件。
这样我就可以通过双击.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)
被监视文件的一个范例是这个样子(用office 2010打开测试文档):

代码: 全选

C:\\Program Files\\Microsoft Office\\Office14\\WINWORD.EXE
E:\\Desktop\\测试文档.docx
第一行为软件的打开方式,后一行为打开的文件,都是为windows下为基准的。
就写到这儿了,基本可以认为windows端差不多了。至于linux端,那就是想办法生成这个文件就行了。
------------------------------------------------------------------------
上次由 yinflying 在 2017-01-04 16:52,总共编辑 2 次。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 关于无缝使用虚拟机的一个想法

#2

帖子 科学之子 » 2016-12-31 16:47

有过类似的想法:
Linux下的中文拼音输入法普遍较弱
实机一个脚本和虚拟机内的脚本沟通,实机的脚本负责把键盘输入之类的发送给虚拟机内的脚本程序
虚拟机内的脚本程序操作Windows下的各种输入法得到结果然后传给实机脚本显示出来

不过我也是菜鸟,只会想不会做
不太懂windows的cmd脚本
这种情况我猜用python这种跨平台的可能会比较好
yinflying
帖子: 26
注册时间: 2015-06-01 23:48
系统: Ubuntu14.04

Re: 关于无缝使用虚拟机的一个想法

#3

帖子 yinflying » 2016-12-31 18:02

有过类似的想法:
Linux下的中文拼音输入法普遍较弱
实机一个脚本和虚拟机内的脚本沟通,实机的脚本负责把键盘输入之类的发送给虚拟机内的脚本程序
虚拟机内的脚本程序操作Windows下的各种输入法得到结果然后传给实机脚本显示出来
你这个想法,难度有点大,涉及的东西太多了。
另外sogou拼音不和google拼音不都支持云输入么,个人觉得意义不是很大。
这种情况我猜用python这种跨平台的可能会比较好
我查了一下,发现python的确比较好解决,可以监测文件变化和打开默认的程序。但是python不可能在虚拟机上装的。而且需要调用win32API,后来一想,觉得还是采用C/C++比较好,可以直接生成.exe,运行起来方便。
头像
hubert_star
论坛版主
帖子: 5373
注册时间: 2007-10-29 22:12
系统: OSX 10.9 + Ub 1304
来自: 江苏南京

Re: 关于无缝使用虚拟机的一个想法

#4

帖子 hubert_star » 2016-12-31 19:09

很容易,买个mac,装个parallels,然后开启无缝模式。
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me
yinflying
帖子: 26
注册时间: 2015-06-01 23:48
系统: Ubuntu14.04

Re: 关于无缝使用虚拟机的一个想法

#5

帖子 yinflying » 2017-01-04 16:24

hubert_star 写了:很容易,买个mac,装个parallels,然后开启无缝模式。
这个parallels能够直接在主机上面双击即可使用使用虚拟机的软件打开主机的文件?
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 关于无缝使用虚拟机的一个想法

#6

帖子 科学之子 » 2017-01-04 17:53

yinflying 写了:
有过类似的想法:
Linux下的中文拼音输入法普遍较弱
实机一个脚本和虚拟机内的脚本沟通,实机的脚本负责把键盘输入之类的发送给虚拟机内的脚本程序
虚拟机内的脚本程序操作Windows下的各种输入法得到结果然后传给实机脚本显示出来
你这个想法,难度有点大,涉及的东西太多了。
另外sogou拼音不和google拼音不都支持云输入么,个人觉得意义不是很大。
这种情况我猜用python这种跨平台的可能会比较好
我查了一下,发现python的确比较好解决,可以监测文件变化和打开默认的程序。但是python不可能在虚拟机上装的。而且需要调用win32API,后来一想,觉得还是采用C/C++比较好,可以直接生成.exe,运行起来方便。
另外sogou拼音不和google拼音不都支持云输入么,个人觉得意义不是很大。
主要是在Windows用惯了间接辅助码
听说Linux下的云输入基本已经残废了(只是听说,貌似搜狗的还能用)
还有就是个人比较喜欢用发行版官方源里的东西,除非是很小型(如Flash Player)或者确有必要的程序才会从源外单独下载
tuu1
帖子: 47
注册时间: 2016-04-03 15:26
系统: ubuntu14.04

Re: 关于无缝使用虚拟机的一个想法

#7

帖子 tuu1 » 2017-01-04 22:23

你的思路太混乱了。你所说的问题虚拟机早就实现了。(当年win7的xp mode)

以下对vmware过程都是个人猜测:
主机中的虚拟机软件virtual machine monitor虚拟机中的系统通过vmci协议进行数据传输。虚拟机的系统需要安装vmtools
主机的文件系统全部映射到虚拟机中 z:/vmhgfs
主机的命令全部发送给主机上“虚拟指令翻译器(服务端)”,然后通过vmci传递给虚拟机中的“指令翻译器(客户端)”,最后执行。

系统中doc文件原来的打开方式为 /usr/bin/libreoffice --writer -- %1
通过修改后,关联虚拟机的程序,新的打开方式为 /usr/bin/vm-open --%dst --%pid -- %1
(表示,使用编号为%dist的虚拟机,编号为%pid的应用程序,打开该文件)

双击家目录的 test1.doc文件,最后在虚拟机中效果
c:/programe files/microsoft offices/office12/word.exe -open z:/vmhgfs/home/username/test1.doc
tuu1
帖子: 47
注册时间: 2016-04-03 15:26
系统: ubuntu14.04

Re: 关于无缝使用虚拟机的一个想法

#8

帖子 tuu1 » 2017-01-04 22:38

科学之子 写了:有过类似的想法:
Linux下的中文拼音输入法普遍较弱
实机一个脚本和虚拟机内的脚本沟通,实机的脚本负责把键盘输入之类的发送给虚拟机内的脚本程序
虚拟机内的脚本程序操作Windows下的各种输入法得到结果然后传给实机脚本显示出来
不需要考虑输入法的问题。
当窗口焦点位于虚拟机中,键盘和鼠标的命令都会作用于虚拟机的系统,此时虚拟机的输入法也处于激活状态。
反之,窗口焦点位于主机的应用,则鼠标和键盘的指令会作用于主机。
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 关于无缝使用虚拟机的一个想法

#9

帖子 科学之子 » 2017-01-05 10:21

tuu1 写了:
科学之子 写了:有过类似的想法:
Linux下的中文拼音输入法普遍较弱
实机一个脚本和虚拟机内的脚本沟通,实机的脚本负责把键盘输入之类的发送给虚拟机内的脚本程序
虚拟机内的脚本程序操作Windows下的各种输入法得到结果然后传给实机脚本显示出来
不需要考虑输入法的问题。
当窗口焦点位于虚拟机中,键盘和鼠标的命令都会作用于虚拟机的系统,此时虚拟机的输入法也处于激活状态。
反之,窗口焦点位于主机的应用,则鼠标和键盘的指令会作用于主机。
我的意思是想让实机应用使用虚拟机里的输入法
回复