X-Window-Desktop fernsteuern per Shell-Skript und VNC

Seite 4: Skript-Magie

Inhaltsverzeichnis

Das vollständige Skript steht zum Download bereit, auszugsweise finden Sie eine Funktion im Listing unten: Bevor das Skript seine eigentliche Aufgabe erfüllen kann, muss es einige Bedingungen überprüfen: Es soll beispielsweise niemals als Root-Benutzer starten und x11vnc benötigt zwingend eine schon laufende X-Sitzung. Anschließend sucht es mittels des Kommandos which zuerst nach einer installierten Version von x11vnc. Findet das Skript das Kommando, startet es die installierte x11vnc-Version.

Bleibt die Suche erfolglos, versucht das Programm mittels der Download-Hilfen wget, curl oder des Konsolen-Browsers lynx, eine fertige übersetzte x11vnc-Version aus dem Internet zu laden. Im Beispiel legt es sie im Verzeichnis /tmp/ct-helfer ab. Anschließend macht der Befehl chmod +x aus der Datei ein ausführbares Programm.

Findet der Server unter der angegebenen Adresse (LISTENERURL) einen VNC-Client in Lauschstellung, startet er die Sitzung.

Der VNC-Server schreibt nun seine Ausgaben in eine Datei unterhalb von /tmp/ct-helfer. Ein parallel gestartetes X-Terminal zeigt diese Daten an, bricht aber bei Bedarf auch die Verbindung ab. Hat der Hilfesuchende genug Ratschläge bekommen und möchte allein und unbeobachtet weiterarbeiten, beendet die Tastenkombination Strg-C den Server und damit die Verbindung.

Beendet umgekehrt der Helfer seine VNC-Sitzung, beendet sich anschließend auch der VNC-Server auf der Seite des Hilfesuchenden. Eine while-Schleife im Skript überprüft alle fünf Sekunden, ob die Nummern beider Prozesse noch in der Prozessliste vorhanden sind. Ist eines der beiden Programme nicht mehr in der Liste, beendet das Skript das jeweils andere Programm und anschließend sich selbst.

Ausschnitt aus dem Skript

function vnc_connect() 
{
echo "Starte VNC-Server ..."
${X11VNC_PATH} ${VNCPAR} & x11vncpid=$!
$XTERM -title "ct-Helferlein: Mit Strg-C beenden" \
-e tail -f ${X11VNC_DIR}/$LOGFILE & xdialogpid=$!
# solang wie beide Programm laufen ...
# sonst den Rest beenden
while ps $x11vncpid > /dev/null \&& ps $xdialogpid > /dev/null
do
sleep 5
done
if ps $x11vncpid > /dev/null ; then
kill $x11vncpid
else
kill $xdialogpid
fi
}

Die while-Schleife überprüft, ob x11vnc und das X-Terminal laufen. Fehlt eines der beiden in der Prozesstabelle, beendet das Skript das jeweils andere Programm und anschließend sich selbst.