#!/bin/sh
#/usr/bin/startx:  Start Xorg X11 Window graphic mode and desktop for Herminux

#check if X is running already
X_PID=$( pidof Xorg )
if [ ${#X_PID} -gt 0 ] ; then
 echo "(Xorg-server has already been started...)" ; return
fi

#read config from ~/.desktop (if not found, using system-wide /etc/desktop)
if [ -f $HOME/.desktop ] ; then
 . $HOME/.desktop ; CONFIG_FOUND=1
else
 if [ -f /etc/desktop ] ; then
  . /etc/desktop ; CONFIG_FOUND=1
 else  #if no desktop-config file launch Xorg and jwm without options
  echo "No configuration file found (/etc/desktop or ~/desktop!"
  echo "Desktop will start with default settings found in /usr/bin/startx..."
  CONFIG_FOUND=0
 fi
fi

#set environment variables related to X-server
if [ $CONFIG_FOUND -eq 1 ] ; then
 export XCURSOR_THEME=$MOUSE_CURSOR_THEME
 export XCURSOR_SIZE=$MOUSE_CURSOR_SIZE
else
 export DISPLAY=:0
fi

#transform some variables from readable form to be understood by Xorg & JWM
if [ "$SCREENSAVER_BLANKING" == "ON" ] ; then BLANKING="-" ; else BLANKING=" " ; fi
if [ "$SCREEN_INIT_PATTERN" == "ON" ] ; then RETRO="-retro" ; else RETRO=" " ; fi
if [ "$SCREEN_ALLOW_REMOTE_TCP" == "ON" ] ; then REMOTCP=" " ; else REMOTCP="-nolisten tcp"; fi
CURRENT_TTY_NAME=$(tty); CURRENT_TTY_NUMBER=${CURRENT_TTY_NAME:8} 

#start Xorg-server with settings found in 'desktop' config-file
if [ $CONFIG_FOUND -eq 1 ] ; then
 set -x #echo on
 Xorg $SCREEN_DISPLAY $RETRO  $REMOTCP  \
   -ardelay $KEYBOARD_REPEAT_DELAY  -arinterval $KEYBOARD_REPEAT_INTERVAL  \
   -a $MOUSE_ACCELERATION  -t $MOUSE_ACCELERATION_TRESHOLD  \
   -s $SCREENSAVER_TIMEOUT  ${BLANKING}"v"  &  #vt${CURRENT_TTY_NUMBER}  &
 set +x #echo off
else  #fallback if no config-file found
 Xorg  -retro  -s 10  -v  -ardelay 260  -arinterval 40  &
fi

#wait for the display-device (':0') to appear and set $DISPLAY environment variable for tty
while  xrandr -q -d $SCREEN_DISPLAY  2>&1 | grep "Can't open display" ; do 
 echo "Waiting for Xorg-server to start..." ; sleep 0.2 ;
done
export DISPLAY=$SCREEN_DISPLAY
sleep 0.2

#perform more settings probably not supported by Xorg itself (without xorg.conf)
if [ $CONFIG_FOUND -eq 1 ] ; then
 echo "Possible video-modes reported by xrandr:" ; xrandr -q
 set -x #echo on
 if [ "$SCREEN_RESOLUTION" != "" ] ; then  
  xrandr  --size $SCREEN_RESOLUTION  --refresh $SCREEN_REFRESH_RATE  
 fi
# setxkbmap  -model $KEYBOARD_MODEL  -option grp:$KEYBOARD_LAYOUT_SWITCH  \
#  -layout $KEYBOARD_LAYOUTS  -variant ${KEYBOARD_VARIANTS} 
 #xset  s 600 600
 set +x #echo off
fi

#run apps selected for auto-staring
$AUTOSTART_PROGRAMS &

if [ $CONFIG_FOUND -eq 1 ] ; then
setxkbmap  -model $KEYBOARD_MODEL  -option grp:$KEYBOARD_LAYOUT_SWITCH  \
  -layout $KEYBOARD_LAYOUTS  -variant ${KEYBOARD_VARIANTS} 
fi

#run window-manager (on screen set in $DISPLAY)
$WINDOW_MANAGER

#Kill X-server (and clients) after Window-manager exits
echo "Killing Xorg-server..."
pkill Xorg

echo "Startx script finished -----------------------------------------------"
