Use launchd para iniciar VMware's VM en la conexión VNC

1

Tengo una máquina virtual (VMware Fusion) con acceso VNC habilitado. Quiero poder acceder a él desde la red. Desafortunadamente, VMware requiere que VM esté en ejecución para poder aceptar conexiones VNC y vmware-vmx es el proceso que escucha en el puerto VNC.

Mi idea era tener un trabajo launchd que ejecute la máquina virtual deseada cuando algo llegue al puerto. Terminé con el siguiente trabajo launchd:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.kulakov.vm.development</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/vmw</string>
        <string> </string>
    </array>
    <key>StandardOutPath</key>
    <string>/Users/kentzo/Desktop/com.kulakov.vm.development.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/kentzo/Desktop/com.kulakov.vm.development.log</string>
    <key>Sockets</key>
    <dict>
        <key>NetworkListener</key>
        <dict>
            <key>SockServiceName</key>
            <string>5906</string>
            <key>SockType</key>
            <string>stream</string>
        </dict>
    </dict>
    <key>Debug</key>
    <true/>
</dict>
</plist>

/ usr / local / bin / vmw:

#!/bin/bash
/Applications/VMware\ Fusion.app/Contents/Library/vmrun -T fusion start "$1" nogui

El problema es que launchd escucha en el puerto y tengo que detener esto antes de poder ejecutar la VM. La única forma de detenerlo para escuchar en el puerto que he encontrado hasta ahora es descargar el trabajo. Desafortunadamente, también detiene el trabajo y evita que se inicie la máquina virtual.

¿Es posible decirle a launchd que deje de escuchar en un puerto dentro del demonio?

    
pregunta Kentzo 12.10.2012 - 09:54

1 respuesta

1

Su problema aquí es que si launchd va a escuchar en el puerto VNC, bueno, entonces obtendrá el tráfico en el puerto VNC. Las formas aprobadas para que un programa daemon se ocupe de esto son esperar el tráfico de red en StdIn y StdOut o recopilar una lista de descriptores de archivo de launchd y usar uno de esos para la comunicación de red. De lo contrario, el cliente creará una conexión y luego verá la conexión cerrada por launchd mientras inicia el daemon.

Le sugiero que tenga launchd escuche en otro puerto y genere un programa simple que solo canaliza la entrada a /dev/null al mismo tiempo que lanza la máquina virtual. Entonces para iniciar la máquina virtual se telnet a este puerto especial.

O, ya sabes, lo más fácil es que la VM se ejecute siempre. :-)

    
respondido por el Old Pro 15.12.2012 - 03:03

Lea otras preguntas en las etiquetas