![](./images/spacer.gif) |
(Terug) naar scripts op heeck.nl of heeck.nl
******************************************************************************************
VNC xstartup en VMware vmrun
Deze variant van de xstartup-file voor vncserver heb ik opgebouwd om VMware virtual machines 'headless' te kunnen starten. Ik zit niet altijd thuis achter mijn grafische desktop en die is
dus ook niet altijd aangelogd. Het op de command line starten van virtual machines is niet zo'n probleem, dat kan met vmrun, onderdeel van de
vix api van VMware.
Net als anderen ben ik in eerste instantie gaan kijken naar vmrun met de optie 'nogui' om een virtual machine te starten zonder scherm maar dat levert alleen foutmeldingen op van
het soort 'unknown error' dus dat werd hem niet.
Vervolgens ben ik gaan studeren op VNC en dat bleek vrij snel een goede oplossing. Niet alleen faciliteert het 'headless' starten van Virtual Machines maar als je om één of andere reden
toch ergens op moet klikken of enteren in de virtual machine kun je er met een VNC client verbinding mee maken. De welkebende twee vliegen...
Ik zag geen snelle manier om verschillende xstartup files aan te roepen voor mijn diverse virtual machines dus heb ik de keuze ingebouwd in het standaard xstartup script. Ik maak hierbij gebruik van het gegeven dat
vnc4server het argument -name <DESKTOP-NAME> aanpakt en dat deze binnen het script als variabele $VNCDESKTOP beschikbaar is. Vanaf regel 45 zie je de keuzemogelijkheden met bij elke keuze het volledige pad naar de .vmx file.
De functie startvm() doet na het starten van de VNCserver (op de eerste beschikbare poort) een paar dingen:
- Checkt of de gewenste VM niet al draait (dubbelstartbeveiliging, in dat geval einde script en stop VNCserver).
- Start de gewenste virtual machine met vmrun en VMware player.
- Creëert een stopscript in de .vnc directory, om de virtual machine in 'suspend' state te brengen en daarna de VNCserver te stoppen.
- Creëert een desktop shortcut naar dit stopscript. Dit is voor als ik wel thuis ben een handige indicator welke virtual machine('s) er draaien.
01 #!/bin/sh
02 [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
03 [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
04 xsetroot -solid grey
05 vncconfig -iconic &
06 x-terminal-emulator -geometry 80x24+150+150 -ls -title "$VNCDESKTOP Desktop" &
07 x-window-manager &
08
09 # Script to start VMware Player with machine in VNC environment to run 'headless'
10 startvm(){
11 #check if chosen VM isn't already running
12 if [ `vmrun -T player list | grep ${1}|wc -l` -eq 0 ]
13 then
14 vmrun -T player start $1 &
15 # create stopscript for vm
16 echo "#!/bin/sh\n\n"> ~/.vnc/suspvm${DISPLAY}.sh
17 echo "if [ \`vmrun -T player list | grep ${1}|wc -l\` -gt 0 ]"
>> ~/.vnc/suspvm${DISPLAY}.sh
18 echo "then" >> ~/.vnc/suspvm${DISPLAY}.sh
19 echo "echo \"Suspending Virtual Machine $1\""
>> ~/.vnc/suspvm${DISPLAY}.sh
20 echo "vmrun -T player suspend $1" >> ~/.vnc/suspvm${DISPLAY}.sh
21 echo "else" >> ~/.vnc/suspvm${DISPLAY}.sh
22 echo "echo \" Virtual Machine $1 is not active.\""
>> ~/.vnc/suspvm${DISPLAY}.sh
23 echo "fi" >> ~/.vnc/suspvm${DISPLAY}.sh
24 echo "vncserver -kill ${DISPLAY}" >> ~/.vnc/suspvm${DISPLAY}.sh
25 echo "rm ~/.vnc/suspvm${DISPLAY}.sh" >> ~/.vnc/suspvm${DISPLAY}.sh
26 echo "rm ~/Desktop/suspvm${DISPLAY}.desktop"
>> ~/.vnc/suspvm${DISPLAY}.sh
27 chmod 755 ~/.vnc/suspvm${DISPLAY}.sh
28 # Create desktop Icon for stopscript, this alerts for running VM's as well
29 machine=$(basename $1 | cut -f1 -d".")
30 echo "[Desktop Entry]" > ~/Desktop/suspvm${DISPLAY}.desktop
31 echo "Version=1.0" >> ~/Desktop/suspvm${DISPLAY}.desktop
32 echo "Name=Suspend VM ${machine} & stop VNCserver ${DISPLAY}"
>> ~/Desktop/suspvm${DISPLAY}.desktop
33 echo "Comment=Suspend Virtual Machine $1 and stop VNCserver ${DISPLAY}"
>> ~/Desktop/suspvm${DISPLAY}.desktop
34 echo "Exec=${HOME}/.vnc/suspvm${DISPLAY}.sh"
>> ~/Desktop/suspvm${DISPLAY}.desktop
35 echo "Icon=/usr/share/icons/hicolor/48x48/apps/vmware-pause.png"
>> ~/Desktop/suspvm${DISPLAY}.desktop
36 echo "Terminal=true" >> ~/Desktop/suspvm${DISPLAY}.desktop
37 echo "Type=Application" >> ~/Desktop/suspvm${DISPLAY}.desktop
38 echo "Categories=Utility;Application;"
>> ~/Desktop/suspvm${DISPLAY}.desktop
39 chmod 755 ~/Desktop/suspvm${DISPLAY}.desktop
40 else
41 vncserver -kill ${DISPLAY}
42 fi
43 }
44
45 case $VNCDESKTOP in
46 vm_sap740)
47 startvm /vmstore/sap74npl/sap74npl.vmx &
48 ;;
49 vm_sap702)
50 startvm /vmstore/SLES_11_SP1_SAP_Testdrive-1.0.13/
SLES_11_SP1_SAP_Testdrive.x86_64-1.0.13.vmx &
51 ;;
52 esac
Als een virtual machine is opgestart levert dat een shortcut op de desktop op met een aangepast VMware ikoontje, ik heb er een 'pauze' symbooltje bij geplakt:
![shortcut](./images/vmware-pause.png)
Het label van de shortcut bevat de naam van de virtual machine en het displaynummer (poort 590x) van de VNCserver:
Suspend VM SLES_11_SP1_SAP_Testdrive & stop VNCserver :1 Om deze gemakkelijk te kunnen benaderen.
Met deze shortcut kan het in de dirctory .vnc gegenereerde stopscript (in dit geval suspvm:1.sh) worden aangeroepen.
Het stopscript verwijdert zelf de shortcut en zichzelf weer,
vnc4server ruimt bij het afsluiten z'n pidfile op.
25-02-2016
* Begin **********************************************************************************
|
| ![](./images/spacer.gif) |