1

ネットワーク経由でいくつかの KVM を制御するために libvirt を使用する予定です。これまでのところ、その接続は機能しています。次のコードで接続を確立します

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'/>");

Requested operation is not valid: cannot detach device on inactive domain を読み取る例外が発生します

OK、VM が実行されていないというエラー メッセージが表示されているようです。したがって、次の方法でドメインを開始すると

d.create();

上記から detachDevice を実行すると、次のエラーunsupported configuration: This type of device cannot be hot unplugged が表示されます。

ええ、だから何?ドメインが実行されていない場合は構成を変更できず、ドメインが実行されている場合は構成も変更できませんか?

誰が私が間違っているのか教えてもらえますか? ドメインを開始せずにアクティブ化するにはどうすればよいですか? ネットで検索しても何の参考にもなりませんでした。

助けてくれてありがとう。こんにちは、-クリス-

4

2 に答える 2

1

私はそれを試してみましたが、同じエラーが発生しました。次に、そのdetachDeviceFlags方法を試してみましたが、失敗しました。

この方法は、USBデバイスなどdetachDeviceのある種のホットプラスデバイスを取り外すために使用される思います。そして、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 に答える
1

virsh edit $domainNamexml構成ファイルを変更するために使用できます

于 2012-12-24T09:24:45.707 に答える