我autoport=yes
在域的(libvirt 中的“虚拟机”)配置文件中进行了设置,以便在运行时自动分配 VNC 端口。
我需要得到这个端口,这样我才能从外部连接到虚拟机,但我找不到合适的 API 来做这件事。在 python 中更好,因为我使用的是 libvirt-python 绑定。
我autoport=yes
在域的(libvirt 中的“虚拟机”)配置文件中进行了设置,以便在运行时自动分配 VNC 端口。
我需要得到这个端口,这样我才能从外部连接到虚拟机,但我找不到合适的 API 来做这件事。在 python 中更好,因为我使用的是 libvirt-python 绑定。
我没有找到任何VNC端口的API,不知道新版本的libvirt是否有这个接口?
但是,您可以使用该命令virsh vncdisplay $domainName
显示端口。注意:您必须修改/etc/libvirt/qemu.conf
enable vnc_listen='0.0.0.0'
。
没有获取 VNC 端口的 API。您必须获取并解析 XML 文件以找出该端口。当然,如果来宾被破坏(断电/离线),该端口的值将是 -1。
char * virDomainGetXMLDesc (virDomainPtr domain, unsigned int flags)
<domain>
<devices>
<graphics type='vnc' port='5900' autoport='yes'/>
</devices>
</domain>
这是你在 python 中的操作方法,以防万一有人需要。
另存为 vncport.py
from xml.etree import ElementTree as ET
import sys
import libvirt
conn = libvirt.open()
domain = conn.lookupByName(sys.argv[1])
#get the XML description of the VM
vmXml = domain.XMLDesc(0)
root = ET.fromstring(vmXml)
#get the VNC port
graphics = root.find('./devices/graphics')
port = graphics.get('port')
print port
运行命令
python vncport.py <domain name>
如果有人需要,这是 PHP 版本的一个:
$res = libvirt_domain_lookup_by_name($conn, $domname);
$xmlString = libvirt_domain_get_xml_desc($res, '');
$xml = simplexml_load_string($xmlString);
$json = json_encode($xml);
$data = json_decode($json,TRUE);
$port = intval($data["devices"]["graphics"]["@attributes"]["port"]);