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

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

4 Answers 4

up vote 3 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

root@onhost1:~# virsh vncdisplay 1

(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

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

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)"

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
@chandank you probably have a spice display - use the domdisplay command to get the more general URI – MikeyB Aug 25 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

I dont have linux box right now but I remember that folder named ".vnc" is created at home directory which has subfolders according to all the displays created. This subfolders will have the information you are looking for

share|improve this answer
What am I missing? I completely don't get it. Home folder of what user? ... – 0xC0000022L Nov 24 '11 at 16:31
Home directory of the user who is logged in!! you can go there by simply using "cd" command. See there if there is any directory with name ".vnc"? it is hidden directory so you can see it using "ls -lart" – swd Nov 25 '11 at 9:12
I have not used vnc and linux since a year or so but i remember this folder which has information of all the displays created – swd Nov 25 '11 at 9:14
Ehrm, I think you may want to re-read my question. No user is locally logged on. I am running several KVM guests and want to know up front on which port a certain guest is running or find out easily on which port it got started (in case I cannot control where it is running). – 0xC0000022L Nov 25 '11 at 13:48

Your Answer


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.