Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is there a straightforward way to find the VNC screen (i.e. port number minus 5900) onto which a KVM guest is bound?

My guests are all configured to run with VNC enabled, but the order in which they occupy the ports is random.

Alternately, is there a way to assign them in the configuration (of guest or host), so that each respective guest will occupy a predefined port?!

share|improve this question
up vote 4 down vote accepted

Since you're using libvirt, you can just ask it!

root@onhost1:~# virsh list
 Id Name                 State
----------------------------------
  1 one-34               running
  2 one-36               running
  3 one-38               running

root@onhost1:~# virsh vncdisplay one-34
:34

root@onhost1:~# virsh vncdisplay 1
:34

(my particular correlation of name to VNC display port is due to the use of Open Nebula)

EDIT: Nowadays, you can use domdisplay to get the URI of the display whether it's VNC or Spice:

○ → virsh domdisplay win-michael
vnc://127.0.0.1:0

○ → for dom in $(virsh list --name); do echo -n "$dom: "; virsh domdisplay $dom; done
win-michael-m: vnc://127.0.0.1:0


Here's a one-liner to execute this for all running guests at once:

for i in $(virsh -q list|awk '{print $2}'|sort); do
  echo -e "\033[01;31m$i\033[00m -> $(virsh vncdisplay $i)"
done

Also made it into a function that sorts output by port number:

function vnc-list
{
  for i in $(virsh -q list|awk '{print $2}'|sort); do
    PORTNUM=$(virsh vncdisplay $i|cut -f 2 -d ':')
    printf "% 2d: \033[01;32m%.20s\033[00m\n" "$PORTNUM" "$i";
  done | sort -n
}
share|improve this answer
    
Wow, thanks a bunch for that. It's spot-on what I was looking for. I'm going to edit a Bash one-liner into your answer for completeness. – 0xC0000022L Feb 9 '12 at 14:44
    
Hmm, well the on-liner I edited in apparently got edited into a three-liner. Makes me look stupid as if I didn't know what the difference between 1 and 3 is, but I promise that the version I had was cramming this onto one single line ;) ... don't have edit-rights yet, so I'm at the mercy of others with this. – 0xC0000022L Feb 9 '12 at 16:36
    
I edited it into a three-liner for readability and so it doesn't require scrolling to view. – MikeyB Feb 9 '12 at 16:41
    
Due to some reason in my install virsh vncdisplay does not show up the VNC port. "#virsh vncdisplay vm01 returns nothing". I have tigetvnc installed. And running Centos 6 – chandank Jan 15 '13 at 17:22
1  
@chandank you probably have a spice display - use the domdisplay command to get the more general URI – MikeyB Aug 25 '15 at 13:22

I would run :

ps aux | grep "VM name/config"

Note the process ID and then

netstat -apn | grep "process ID"

This should show you are port open by that process.

share|improve this answer
    
Okay, sorry I should have defined straightforward much better. I figured I could so something like this, but it's neither convenient nor "automated". Will wait for other replies, but thanks :) – 0xC0000022L Nov 23 '11 at 20:26

To set the display, simply explicitly provide the -vnc <ip:display> option to qemu-kvm. See the man page to qemu-kvm, especially the -vnc parameter section for details.

share|improve this answer
    
Thanks, I'll try that. – 0xC0000022L Nov 23 '11 at 21:40

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.