VNC-Server per Initscript starten

Aus Linupedia
Wechseln zu: Navigation, Suche

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://rolandholder.funpic.de/scripte/vncserver.bz2 In der momentanen Ausführung startet das Script einen VNC-Server für root auf Port 5901 bzw. Display 1. Das kann mit der Variablen 'FOO_ID' eingestellt werden.

  • Schreibe ein Startscript /etc/init.d/vncserver - ungefähr so:
#! /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 
USER="root"
export USER

# 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:

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

  • Aktiviere dieses script via yast Runleveleditor für die runlevel 3 5

oder mit dem Befehl insserv vncserver

  • Im Verzeichnis '/root/.vnc' musst du die xstartup Datei anpassen:
#!/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.

  • Jetzt solltest du mit dem vncviewer mit dem Befehl 'vncviewer <servername>:1' zum Server verbinden können.

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.

Bei SuSE 10.2 hat sich der Pfad zum vncserver geändert. Statt

/usr/X11R6/bin/vncserver

lautet der Pfad jetzt

/usr/bin/vncserver


Rolle