[pve-devel] [PATCH] add multi-monitors spice support
Alexandre Derumier
aderumier at odiso.com
Wed Sep 25 15:33:08 CEST 2013
add qxl2 (2monitors),qxl3 (3monitors),qxl4 (4monitors) vga type.
For linux, we only need 1 qxl card with more memory
For windows, we need 1 qxl card by monitor
Original Information from spice-mailing
"
You need to specify multiple devices for Windows VMs. This is what
libvirt gives me (via 'virsh domxml-to-native qemu argv DOMAIN_XML'):
<...> -vga qxl -global qxl-vga.ram_size=67108864 -global qxl-vga.vram_size=33554432 -device qxl,id=video1,ram_size=67108864,vram_size=33554432 -device qxl,id=video2,ram_size=67108864,vram_size=33554432 -device qxl,id=video3,ram_size=67108864,vram_size=33554432
For Linux VM, just one qxl device is OK but then it's advisable to
increase the available RAM:
<...> -vga qxl -global qxl-vga.ram_size=134217728 -global qxl-vga.vram_size=33554432
If you don't turn off surfaces, then you should increase vram size to
say 64 MB from current default of 32 MB.
"
Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
PVE/QemuServer.pm | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 29dcc28..e62acc4 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -337,7 +337,7 @@ EODESC
optional => 1,
type => 'string',
description => "Select VGA type. If you want to use high resolution modes (>= 1280x1024x16) then you should use option 'std' or 'vmware'. Default is 'std' for win8/win7/w2k8, and 'cirrur' for other OS types. Option 'qxl' enables the SPICE display sever. You can also run without any graphic card using a serial devive as terminal.",
- enum => [qw(std cirrus vmware qxl serial0 serial1 serial2 serial3)],
+ enum => [qw(std cirrus vmware qxl serial0 serial1 serial2 serial3 qxl2 qxl3 qxl4)],
},
watchdog => {
optional => 1,
@@ -2235,7 +2235,7 @@ sub foreach_volid {
sub vga_conf_has_spice {
my ($vga) = @_;
- return $vga && ($vga eq 'qxl');
+ return $vga && ($vga =~ m/^qxl/);
}
sub config_to_command {
@@ -2290,6 +2290,16 @@ sub config_to_command {
push @$devices, '-readconfig', '/usr/share/qemu-server/pve-usb.cfg' if $use_usb2;
my $vga = $conf->{vga};
+
+ my $qxlnum = 0;
+ if (vga_conf_has_spice($vga)) {
+ $qxlnum = 1;
+ if($vga =~ m/^qxl(\d+)$/){
+ $qxlnum = $1;
+ }
+ $vga = 'qxl';
+ }
+
if (!$vga) {
if ($conf->{ostype} && ($conf->{ostype} eq 'win8' ||
$conf->{ostype} eq 'win7' ||
@@ -2474,6 +2484,19 @@ sub config_to_command {
my $spice_port;
if (vga_conf_has_spice($vga)) {
+
+ if($qxlnum > 1 && $conf->{ostype} && $conf->{ostype} eq 'l26'){
+ push @$cmd, '-global', 'qxl-vga.ram_size=134217728';
+ push @$cmd, '-global', 'qxl-vga.vram_size=67108864';
+ }
+
+ if($qxlnum > 1 && $conf->{ostype} && $conf->{ostype} =~ m/^w/){
+ for(my $i = 1; $i < $qxlnum; $i++){
+ my $pciaddr = print_pci_addr("vga$i", $bridges);
+ push @$cmd, '-device', "qxl,id=vga$i,ram_size=67108864,vram_size=33554432$pciaddr";
+ }
+ }
+
my $pciaddr = print_pci_addr("spice", $bridges);
$spice_port = PVE::Tools::next_unused_port(61000, 61099);
@@ -3514,6 +3537,9 @@ sub print_pci_addr {
net3 => { bus => 0, addr => 21 },
net4 => { bus => 0, addr => 22 },
net5 => { bus => 0, addr => 23 },
+ vga1 => { bus => 0, addr => 24 },
+ vga2 => { bus => 0, addr => 25 },
+ vga3 => { bus => 0, addr => 26 },
#addr29 : usb-host (pve-usb.cfg)
'pci.1' => { bus => 0, addr => 30 },
'pci.2' => { bus => 0, addr => 31 },
--
1.7.10.4
More information about the pve-devel
mailing list