Utilizzare launchd per avviare VM VMware su connessione VNC

1

Possiedo una VM (VMware Fusion) con accesso VNC abilitato. Voglio essere in grado di accedervi dalla rete. Sfortunatamente, VMware richiede che la VM sia in esecuzione per poter accettare le connessioni VNC e vmware-vmx è il processo che ascolta sulla porta VNC.

La mia idea era quella di avere un lavoro di avvio che eseguirà la VM desiderata quando qualcosa arriva alla porta. Ho finito con il seguente lavoro di avvio:

<?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

Il problema è che launchd ascolta sulla porta e devo fermarlo prima di poter eseguire VM. L'unico modo per fermarlo per ascoltare sulla porta che ho trovato finora è scaricare il lavoro. Sfortunatamente, interrompe anche il lavoro stesso e impedisce l'avvio della VM.

È possibile in qualche modo dire a launchd di interrompere l'ascolto su una porta all'interno del demone?

    
posta Kentzo 12.10.2012 - 09:54
fonte

1 risposta

1

Il tuo problema qui è che se launchd ascolterà sulla porta VNC, beh, allora otterrà il traffico sulla porta VNC. I modi approvati per un programma daemon per gestire questo sono aspettarsi il traffico di rete su StdIn e StdOut o per raccogliere un elenco di descrittori di file da launchd e utilizzare uno di quelli per la comunicazione di rete. Altrimenti il client creerà una connessione e vedrà la connessione chiusa da launchd mentre avvia il demone.

Ti suggerisco di avere launchd di ascoltare su un'altra porta e generare un semplice programma che introduce solo le pipe in /dev/null mentre lancia la VM. Quindi, per avviare la VM devi telnet a questa porta speciale.

O, sai, la cosa facile da fare è semplicemente avere la VM in esecuzione. : -)

    
risposta data 15.12.2012 - 03:03
fonte

Leggi altre domande sui tag