From 31dfa2bc07f0fb4ebaa4ef70b1dc952b7348a160 Mon Sep 17 00:00:00 2001 From: Manuel Bentele Date: Wed, 1 Sep 2021 12:32:13 +0200 Subject: [qemu] Set listen address and port for looking-glass-client --- .../TransformationSpecificQemuGpuPassthroughNvidia.java | 10 ++++++++++ .../org/openslx/runvirt/viewer/ViewerLookingGlassClient.java | 5 +++++ .../TransformationSpecificQemuGpuPassthroughNvidiaTest.java | 11 +++++++++++ 3 files changed, 26 insertions(+) diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidia.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidia.java index e5d65c27..788c2fd1 100644 --- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidia.java +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidia.java @@ -6,11 +6,13 @@ import java.util.List; import org.openslx.libvirt.capabilities.Capabilities; import org.openslx.libvirt.domain.Domain; +import org.openslx.libvirt.domain.device.GraphicsSpice; import org.openslx.libvirt.domain.device.HostdevPci; import org.openslx.libvirt.domain.device.HostdevPciDeviceAddress; import org.openslx.libvirt.domain.device.HostdevPciDeviceDescription; import org.openslx.libvirt.domain.device.Shmem; import org.openslx.libvirt.domain.device.Video; +import org.openslx.libvirt.domain.device.Graphics.ListenType; import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs; import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu; import org.openslx.runvirt.virtualization.LibvirtHypervisorException; @@ -235,6 +237,14 @@ public class TransformationSpecificQemuGpuPassthroughNvidia for ( Video videoDevice : config.getVideoDevices() ) { videoDevice.disable(); } + + // force SPICE graphics to listen on local address for looking-glass-client + for ( int i = 0; i < config.getGraphicSpiceDevices().size(); i++ ) { + final GraphicsSpice graphicsSpiceDevice = config.getGraphicSpiceDevices().get( i ); + graphicsSpiceDevice.setListenType( ListenType.ADDRESS ); + graphicsSpiceDevice.setListenAddress( GraphicsSpice.DEFAULT_ADDRESS ); + graphicsSpiceDevice.setListenPort( GraphicsSpice.DEFAULT_PORT + i ); + } } } } diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerLookingGlassClient.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerLookingGlassClient.java index cea9ccd8..f41f9ba4 100644 --- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerLookingGlassClient.java +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerLookingGlassClient.java @@ -1,5 +1,6 @@ package org.openslx.runvirt.viewer; +import org.openslx.libvirt.domain.device.GraphicsSpice; import org.openslx.runvirt.virtualization.LibvirtHypervisor; import org.openslx.runvirt.virtualization.LibvirtVirtualMachine; import org.openslx.virtualization.Version; @@ -90,12 +91,16 @@ public class ViewerLookingGlassClient extends Viewer "app:shmFile=" + ViewerLookingGlassClient.SHARED_MEMORY_FILENAME, "win:fullScreen=yes", "spice:enable=yes", + "spice:host=" + GraphicsSpice.DEFAULT_ADDRESS, + "spice:port=" + GraphicsSpice.DEFAULT_PORT, "win:alerts=no" }; } else { viewerParameters = new String[] { "app:shmFile=" + ViewerLookingGlassClient.SHARED_MEMORY_FILENAME, "win:fullScreen=yes", "spice:enable=yes", + "spice:host=" + GraphicsSpice.DEFAULT_ADDRESS, + "spice:port=" + GraphicsSpice.DEFAULT_PORT, "win:alerts=yes", "win:showFPS=yes" }; } diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidiaTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidiaTest.java index 55e40221..4c021363 100644 --- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidiaTest.java +++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidiaTest.java @@ -16,6 +16,8 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.openslx.libvirt.capabilities.Capabilities; import org.openslx.libvirt.domain.Domain; +import org.openslx.libvirt.domain.device.Graphics.ListenType; +import org.openslx.libvirt.domain.device.GraphicsSpice; import org.openslx.libvirt.domain.device.HostdevPci; import org.openslx.libvirt.domain.device.HostdevPciDeviceAddress; import org.openslx.libvirt.domain.device.Shmem; @@ -103,6 +105,15 @@ public class TransformationSpecificQemuGpuPassthroughNvidiaTest assertEquals( Video.Model.NONE, videoDevice.getModel() ); } + final List graphicsSpiceDevices = config.getGraphicSpiceDevices(); + assertNotNull( graphicsSpiceDevices ); + for ( int i = 0; i < config.getGraphicSpiceDevices().size(); i++ ) { + final GraphicsSpice graphicsSpiceDevice = config.getGraphicSpiceDevices().get( i ); + assertEquals( ListenType.ADDRESS, graphicsSpiceDevice.getListenType() ); + assertEquals( GraphicsSpice.DEFAULT_ADDRESS, graphicsSpiceDevice.getListenAddress() ); + assertEquals( GraphicsSpice.DEFAULT_PORT + i, graphicsSpiceDevice.getListenPort() ); + } + assertDoesNotThrow( () -> config.validateXml() ); } -- cgit v1.2.3-55-g7522