#!/bin/sh
#
### BEGIN INIT INFO
# Provides: xserver
# Required-Start: $local_fs $remote_fs dbus
# Required-Stop: $local_fs $remote_fs
# Default-Start:     5
# Default-Stop:      0 1 2 3 6
### END INIT INFO

killproc() {            # kill the named process(es)
        pid=`/bin/pidof $1`
        [ "$pid" != "" ] && kill $pid
}

read CMDLINE < /proc/cmdline
for x in $CMDLINE; do
        case $x in
        x11=false)
		echo "X Server disabled" 
		exit 0;
                ;;
        esac
done

case "$1" in
  start)
       . /etc/profile

       #default for USER
       . /etc/default/xserver-nodm
       echo "Starting Xserver"
       if [ "$USER" != "root" ]; then
           # setting for rootless X
           chmod o+w /var/log
           chmod g+r /dev/tty[0-3]
           # hidraw device is probably needed
           if [ -e /dev/hidraw0 ]; then
               chmod o+rw /dev/hidraw*
           fi
           # Make sure that the Xorg has the cap_sys_admin capability which is
           # needed for setting the drm master
           if ! grep -q "^auth.*pam_cap\.so" /etc/pam.d/su; then
               echo "auth	optional	pam_cap.so" >>/etc/pam.d/su
           fi
           if ! /usr/sbin/getcap $XSERVER |  grep -q cap_sys_admin; then
               /usr/sbin/setcap cap_sys_admin+eip $XSERVER
           fi
       fi

       # Using su rather than sudo as latest 1.8.1 cause failure [YOCTO #1211]
       su -l -c '/etc/xserver-nodm/Xserver &' $USER
       # Wait for the desktop to say its finished loading
       # before loading the rest of the system
       # dbus-wait org.matchbox_project.desktop Loaded
  ;;

  stop)
        echo "Stopping XServer"
        killproc xinit
        sleep 1
        chvt 1 &
  ;;

  restart)
	$0 stop
        $0 start
  ;;

  *)
        echo "usage: $0 { start | stop | restart }"
  ;;
esac

exit 0
