VirtualBox Python API - 远程访问

0 投票
2 回答
1358 浏览
提问于 2025-04-18 02:43

我想在我的主笔记本电脑(Windows 7系统)上运行一个虚拟机,但我想通过我的小型笔记本(Ubuntu系统)来操作这个虚拟机。

在Ubuntu上,我准备了一个Python脚本:

from vboxapi import VirtualBoxManager
import sys
sys.path.append("/home/myLogin/Downloads/sdk/bindings/webservice/python/lib")

mgr = VirtualBoxManager("WEBSERVICE", {'url':'myIP', 'user':'myServerLogin', 'password':'myPassthere'})
vbox = mgr.vbox
name = "Muszelek"
mach = vbox.findMachine(name)
session = mgr.mgr.getSessionObject(vbox)
progress = mach.launchVMProcess(session, "gui", "")
progress.waitForCompletion(-1)
mgr.closeMachineSession(session)

但是我遇到了一个错误:

Installation problem: check that appropriate libs in place
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/vboxapi/__init__.py", line 981, in __init__
    self.vbox = self.platform.getVirtualBox()
  File "/usr/local/lib/python2.7/dist-packages/vboxapi/__init__.py", line 856, in getVirtualBox
    return self.connect(self.url, self.user, self.password)
  File "/usr/local/lib/python2.7/dist-packages/vboxapi/__init__.py", line 910, in connect
    self.vbox = self.wsmgr.logon(self.user, self.password)
  File "/home/karolinka/Downloads/sdk/bindings/webservice/python/lib/VirtualBox_wrappers.py", line 11790, in logon
    req=IWebsessionManager_logonRequestMsg()
NameError: global name 'IWebsessionManager_logonRequestMsg' is not defined
Traceback (most recent call last):
  File "vmmach.py", line 5, in <module>
    mgr = VirtualBoxManager("WEBSERVICE", {'url':'myIP', 'user':'myComputerLogin', 'password':'myPass'})
  File "/usr/local/lib/python2.7/dist-packages/vboxapi/__init__.py", line 985, in __init__
    raise ne
NameError: global name 'IWebsessionManager_logonRequestMsg' is not defined

有没有什么办法可以解决这个问题?这个问题是因为我Windows机器上的库出错了吗?

2 个回答

0

看起来找不到这个类!你有没有去找找网络服务的API,看看有没有可用的?我之前也遇到过类似的问题,我在/usr/lib/virtualbox/sdk/bindings这个文件夹里找,结果只找到了xpcom文件夹,没有找到webservice文件夹。所以我就把sdk里的webservice文件夹直接加进来了,结果一切都正常了。

0

我在我的Mac上遇到了完全一样的问题。问题出在VirtualBox_wrappers.py这个文件里,它在一个尝试的代码块中引入了VirtualBox_client.py(这个文件定义了我们要用的全局名称),如果引入失败,它就会继续执行,不会报错。

try: from VirtualBox_client import * except: pass

问题是,VirtualBox_client.py这个文件依赖于ZSI这个库,而我的电脑上没有安装这个库,所以引入失败了。一旦我执行了

easy_install zsi

一切就正常工作了。

撰写回答