Как получить номер порта VNC с помощью libvirt?
Я установил autoport=yes
в файле конфигурации домена ( "виртуальная машина" в libvirt), поэтому порт VNC назначается автоматически в течение времени выполнения.
Мне нужно получить этот порт, чтобы я мог подключиться к vm извне, но я не могу найти подходящий API для этого. Лучше в python, потому что я использую привязки libvirt-python.
Ответы
Ответ 1
Я не нашел API для порта VNC, не уверен, что новая версия libvirt имеет этот интерфейс?
Однако вы можете использовать команду virsh vncdisplay $domainName
для отображения порта. ПРИМЕЧАНИЕ: вы должны изменить /etc/libvirt/qemu.conf
enable vnc_listen='0.0.0.0'
.
Ответ 2
Там нет API для получения порта VNC. Вы должны взять и проанализировать XML файл, чтобы узнать этот порт. Конечно, если гость будет уничтожен (выключен/отключен), этот порт будет равен -1.
char * virDomainGetXMLDesc (virDomainPtr domain, unsigned int flags)
<domain>
<devices>
<graphics type='vnc' port='5900' autoport='yes'/>
</devices>
</domain>
Ссылки
Ответ 3
Вот как вы это делаете в 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>
Ответ 4
Вот один для версии 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"]);