Wie finde ich den Bildschirm (und damit den Port) der VNC-Benutzeroberfläche für einen kvm-Gast? Oder wie man es zuweist

7

Gibt es eine einfache Möglichkeit, den VNC-Bildschirm (dh die Portnummer minus 5900) zu finden, an den ein KVM-Gast gebunden ist?

Meine Gäste sind alle so konfiguriert, dass sie mit aktiviertem VNC ausgeführt werden, aber die Reihenfolge, in der sie die Ports belegen, ist zufällig.

Gibt es alternativ eine Möglichkeit, sie in der Konfiguration (von Gast oder Host) zuzuweisen, sodass jeder Gast einen vordefinierten Port belegt?!

0xC0000022L
quelle

Antworten:

13

Da Sie verwenden libvirt, können Sie es einfach fragen!

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

(Meine besondere Korrelation des Namens mit dem VNC-Anzeigeport ist auf die Verwendung von Open Nebula zurückzuführen.)

BEARBEITEN: Heutzutage können Sie domdisplay verwenden, um den URI der Anzeige zu erhalten, unabhängig davon, ob es sich um VNC oder Spice handelt:

○ → 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


Hier ist ein Einzeiler, um dies für alle laufenden Gäste gleichzeitig auszuführen:

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

Hat es auch zu einer Funktion gemacht, die die Ausgabe nach Portnummer sortiert:

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
}
MikeyB
quelle
Wow, vielen Dank dafür. Es ist genau das, wonach ich gesucht habe. Der Vollständigkeit halber werde ich einen Bash-Einzeiler in Ihre Antwort einfügen.
0xC0000022L
Hmm, nun, der On-Liner, den ich bearbeitet habe, wurde anscheinend zu einem Drei-Liner bearbeitet. Lässt mich dumm aussehen, als ob ich nicht wüsste, was der Unterschied zwischen 1 und 3 ist, aber ich verspreche, dass die Version, die ich hatte, dies auf eine einzelne Zeile drückte;) ... habe noch keine Bearbeitungsrechte, also Damit bin ich anderen ausgeliefert.
0xC0000022L
Ich habe es aus Gründen der Lesbarkeit in einen Dreizeiler umgewandelt, sodass zum Anzeigen kein Bildlauf erforderlich ist.
MikeyB
Aus irgendeinem Grund in meiner Installation zeigt virsh vncdisplay den VNC-Port nicht an. "#virsh vncdisplay vm01 gibt nichts zurück". Ich habe tigetvnc installiert. Und läuft Centos 6
Chandank
1
@chandank Sie haben wahrscheinlich eine Gewürzanzeige - verwenden Sie den domdisplayBefehl, um die allgemeinere URI zu erhalten
MikeyB
3

Ich würde Rennen :

ps aux | grep "VM name/config"

Notieren Sie die Prozess-ID und dann

netstat -apn | grep "process ID"

Dies sollte zeigen, dass Sie durch diesen Prozess einen offenen Port haben.

Andrey
quelle