[Xrdp-devel] rewritten xrdp init script

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[Xrdp-devel] rewritten xrdp init script

Alexander Swen
hi all,

I don't know if anyone is yet working on this project or even reading this mail
Neither do I know who I should mail so I try all of you. (I found your names in relations to the xrdp project and the rpmforge rpm).

I would like to suggest a new init script for xrdp. I hope this will be added to the xrdp rpms (at least in rpmforge!).

(If not, please explain me why, what I need to change or what else to do).
I don't have any experience in adding code to an opensource project, so please correct me if I should follow another way.

Thanks in advance for reading this mail and taking the effort to respond!

I tested on a CentOS 5.5-64 box using the xrdp-0.4.0-1.el5.rf rpm from rpmforge.

below the code:

#!/bin/sh
###BEGIN INIT INFO
# Provides: XRDP Daemon
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# chkconfig: 35 25 90
# Description: Custom RDP Daemon
### END INIT INFO

# /etc/init.d/xrdpd
# is init script for XRDP. starts xrdp and sesman.

# Alexander Swen, [hidden email]

# CHANGELOG:
# 2010-05-17 A.Swen created (based on initial script xrdp_control.sh by Mark Balliet and Jay Sorg)
# 2010-05-25 A.Swen added "status" function.

# SETTINGS
date=$(date +%Y%m%d)
me=$(basename $0)
mydir=$(dirname $0)

XRDP=xrdp
SESMAN=sesman
STARTWM=startwm.sh
XRDP_DIR=/usr/lib$([ "$(uname -i)" = "x86_64" ]&& echo 64)/xrdp/
LOG=/var/log/xrdp.log

# FUNCTIONS
die () {
  rc=$1
  shift
  echo "==== ERROR ====" >&2
  echo $@ >&2
  exit $rc
}

usage () {
  echo "Usage: ${me} {start|stop|status|restart|reload|force-reload}"
  exit 1
}

# source default functions
[ -f /etc/SuSE-release ] && distro=suse
[ -f /etc/redhat-release ] && distro=redhat
case ${distro} in
  suse)
    [ -f /etc/rc.status ] && . /etc/rc.status
  ;;
  redhat)
    [ -f /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
  ;;
esac

xrdp_start() {
  echo -n "Starting: xrdp and sesman . . "
  ./$XRDP >> $LOG
  ./$SESMAN >> $LOG
  echo "."
  sleep 1
  return 0;
}

xrdp_stop() {
  echo -n "Stopping: xrdp and sesman . . "
  ./$SESMAN --kill >> $LOG
  ./$XRDP --kill >> $LOG
  echo "."
  return 0;
}

is_xrdp_running() {
  ps u --noheading -C $XRDP | grep -q -i $XRDP
  [ $? -eq 0 ] && xrdp_running=1 || xrdp_running=0
  export xrdp_running
}

is_sesman_running() {
  ps u --noheading -C $SESMAN | grep -q -i $SESMAN
  [ $? -eq 0 ] && sesman_running=1 || sesman_running=0
  export sesman_running
}

check_up() {
  is_sesman_running
  is_xrdp_running
  # Cleanup : If sesman isn't running, but the pid exists, erase it.
  [ ${sesman_running} -eq 0 -a -e /var/run/sesman.pid ] && rm /var/run/sesman.pid
  # Cleanup : If xrdp isn't running, but the pid exists, erase it.
  [ ${xrdp_running} -eq 0 -a -e /var/run/xrdp.pid ] && rm /var/run/xrdp.pid
  return 0;
}

# SCRIPT
[ ${UID} -gt 0 ] && die 0 only root may do that
[ -d "${XRDP_DIR}" ] || die 1 XRDP_DIR ${XRDP_DIR} not found

check_up

cd ${XRDP_DIR}
[ -x ${XRDP} ] || die 2 XRDP not found or not executable
[ -x ${SESMAN} ] || die 2 SESMAN not found or not executable
[ -x ${STARTWM} ] || die 2 STARTWM not found or not executable
case "$1" in
  status)
    [ ${xrdp_running} -eq 1 ] && echo "xrdp is loaded"
    [ ${sesman_running} -eq 1 ] && echo "sesman is loaded"
    exit 0
    ;;
  start)
    [ ${xrdp_running} -eq 1 ] && die 3 "xrdp is already loaded"
    [ ${sesman_running} -eq 1 ] && die 3 "sesman is already loaded"
    xrdp_start
    ;;
  stop)
    [ ${xrdp_running} -eq 0 ] && die 3 "xrdp is not loaded"
    [ ${sesman_running} -eq 0 ] && die 3 "sesman is not loaded"
    xrdp_stop
    ;;
  force-reload|reload|restart)
    echo "Restarting xrdp ..."
    xrdp_stop
    patience=20
    until [ ${xrdp_running} -eq 0 -a ${sesman_running} -eq 0 ];do
      [ ${patience} -eq 0 ] && die 5 "lost my patience while waiting for xrdp to stop" || patience=$((patience-1))
      check_up
      sleep 1
      check_up
    done
    xrdp_start
    ;;
  *) usage ;;
esac

exit 0


------------------------------------------------------------------------------


_______________________________________________
xrdp-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/xrdp-devel