1

我打算使用 libvirt 通过网络控制一些 KVM。到目前为止,连接工作正常。我用以下代码建立连接

Connect conn = null;
    try
    {
        ConnectAuth ca = new ConnectAuthDefault();

        conn = new Connect("qemu+ssh://targetUser@targetIP/system", ca, 0);
    }
    catch(LibvirtException e)
    {
        System.out.println("exception caught:" + e);
        System.out.println(e.getError());
    }

我通过以下方式获得对域的引用

Domain d = conn.domainLookupByName("win7");

但是当我尝试附加或分离设备时(我想修改 vnc 端口)

d.detachDevice("<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0'/>");

我收到异常读取请求的操作无效:无法在非活动域上分离设备

好的,似乎错误消息告诉我 VM 没有运行。所以如果我通过

d.create();

我从上面执行 detachDevice 我得到以下错误不支持的配置: 这种类型的设备不能热拔出

是啊,那又怎样?如果域没有运行,我不能更改配置,如果它正在运行,我也不能更改配置?

谁能告诉我我做错了什么?如何在不启动域的情况下激活域?我在网上搜索时没有找到任何帮助。

非常感谢您的帮助。问候,-克里斯-

4

2 回答 2

1

可以virsh edit $domainName用来修改xml配置文件

于 2012-12-24T09:24:45.707 回答
1

我试过了,得到了同样的错误,然后我尝试了这个detachDeviceFlags方法,也失败了。

我认为该detachDevice方法用于分离某种hotplus设备,例如 USB 设备。分离vnc图形设备的唯一方法是按照@liuzhijun所说的重新定义它。

而不是在 中进行CLI,这是我的一个使用 API 的版本:

// Assume you have got the Connect as virtConn, and Domian as dom
// I did it after the vm is shutdown
String xml = dom.getXMLDesc(0);
int[] uuid = dom.getUUID();

// I use a very simple way to erase graphic element, not recommended
// The best way to do it is to use some XML library.
xml = xml.substring(0, xml.indexOf("<graphics type='vnc'")) +
                       xml.substring(xml.indexOf("graphics>")+10);

virtCon.domainDefineXML(xml);

dom = virtCon.domainLookupByUUID(uuid);
dom.create();
于 2013-03-08T07:22:11.920 回答