• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Howto] VNC-Server per initscript starten

rolle

Guru
Liebe Leute!

Nachfolgende Scripte von oc2pus (von mir leicht überarbeitet) (vielen Dank an denselben) ermöglichen es, einen VNC-Server für den Benutzer root automatisch in die Runlevel einzutragen. Leider geht es nicht so einfach per Copy & Paste, da dann wohl die Formatierung flöten geht. Damit nicht alle das Script einzeln abtippen müssen, habe ich das jetzt einmal gemacht und stelle es zum Download bereit unter http://rolle.cybton.com/scripte/vncserver.bz2 In der momentanen Ausführung startet das Script einen VNC-Server für root auf Display 1 mit dem XFCE. Das Script kann natürlich auch relativ einfach für andere Nutzerinnen oder andere Displays und Windowmanager umgeschrieben werden. Erfolgreich getestet habe ich es auf OpenSuSE 10.

1.)Schreibe ein Startscript /etc/init.d/vncserver - ungefähr so:

Code:
#! /bin/sh
#
# Author: Toni
#
# /etc/init.d/vncserver this Script
# /usr/sbin/rcvncserver Root-Link to this Script
# /usr/X11R6/bin/vncserver Program
#
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Start vncserver for remote control
#
### END INIT INFO

#test -r /etc/rc.config && . /etc/rc.config
export PATH=$PATH:/usr/X11R6/bin:/opt/kde3/bin

# Check for missing binaries
FOO_BIN=/usr/X11R6/bin/vncserver
test -x $FOO_BIN || exit 5

# Set HOME of Root-User
HOME="/root"
export HOME

# Set ID for Connections (Displaynumber)
FOO_ID=1

# First reset status of this service
. /etc/rc.status
rc_reset

# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#

case "$1" in
start)
echo -n "Starting vnc-Server with Terminal-ID $FOO_ID "
# Delete old PIDs
rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.pid 2> /dev/null
rm -f /tmp/.X11-unix/X$FOO_ID 2> /dev/null
if [ -e $HOME/.vnc/$HOSTNAME:$FOO_ID.log ]; then
cat $HOME/.vnc/$HOSTNAME:$FOO_ID.log >> /var/log/vncserver.log 2>&1
rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.log
fi
# $FOO_BIN -depth 16 -name kde :$FOO_ID 2>&1
$FOO_BIN -depth 16 -name xfce :$FOO_ID 2>&1
rc_status -v6
;;
stop)
echo -n "Shutting down vnc-Server "
$FOO_BIN -kill :$FOO_ID 2>&1
cat $HOME/.vnc/$HOSTNAME:$FOO_ID.log >> /var/log/vncserver.log 2>&1
rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.log
rc_status -v2
;;
restart)
$0 stop
$0 start
rc_status
;;
status)
echo -n "Checking for service vnc-Server on Terminal-ID $FOO_ID: "
## Check status with checkproc(Cool, if process is running
## checkproc will return with exit status 0.

# Return value is slightly different for the status command:
# 0 - service running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running

# NOTE: checkproc returns LSB compliant status values.
checkproc $FOO_BIN
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
rc_exit

Im Verzeichnis /usr/sbin solltest du noch einen link auf dieses script anlegen:
Code:
cd /usr/sbin
ln -s /etc/init.d/vncserver rcvncserver

Damit kannst Du mit 'rcvncserver start' den Server starten
mit 'rcvncserver stop' den VNC-Server stoppen

2.) Aktiviere dieses script via yast Runleveleditor für die runlevel 3 5
oder mit dem Befehl insserv vncserver

3.) Im Verzeichnis '/root/.vnc' musst du die xstartup Datei anpassen:
Code:
#!/bin/sh
export LANG="de_DE"
case "$VNCDESKTOP" in
kde)
startkde &
;;
xfce)
startxfce4 &
;;
*)
xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &
;;
esac
Je nachdem ob du KDE oder xfce als Windowmanager einsetzen willst. Analog können auch andere Windowmanager eingetragen werden.

4.) Jetzt solltest du mit dem vncviewer mit dem Befehl
vncviewer <servername>:1 zum Server verbinden können.
 
OP
R

rolle

Guru
Nachtrag:
In dem Initscript muß nach 'export HOME' noch folgendes eingefügt werden.
Code:
USER = "root"
export USER
 
Oben