#!/bin/bash
# Single Xwindow/KDE startup script
# (C) Klaus Knopper Jun 2001
# Modificado 2005 por Marcos Guglielmetti
# Modificado user knoppix por root; ver qué pasa, cómo se comporta

# Atención, esto lo agregué para poder dar colores:

	# ANSI COLORS
	CRE="
[K"
	NORMAL="[0;39m"
	# RED: Failure or error message
	RED="[1;31m"
	# GREEN: Success message
	GREEN="[1;32m"
	# YELLOW: Descriptions
	YELLOW="[1;33m"
	# BLUE: System messages
	BLUE="[1;34m"
	# MAGENTA: Found devices or drivers
	MAGENTA="[1;35m"
	# CYAN: Questions
	CYAN="[1;36m"
	# BOLD WHITE: Hint
	WHITE="[1;37m"

# cambiado knoppix por root:
USER=root

# Agregado para dejar en claro cuál es el $HOME (lo necesitan los scripts de xfce4, al menos)
HOME=/root

# Líneas comentadas 12-10-05, supongo que, por la investigación
# realizada, el sistema de knoppix tiene más en cuenta los 
# parámetros de booteo del prompt que lo que podamos establecer
# ahora. Además el entorno se configura desde los inicios de sesión
# del entorno gráfico, estamos planeando esto para Musix 0.30

# agregadas las variables de entorno
#LANG=es_ES@euro
#LC_CTYPE="es_ES@euro"
#LC_NUMERIC="es_ES@euro"
#LC_TIME="es_ES@euro"
#LC_COLLATE="es_ES@euro"
#LC_MONETARY="es_ES@euro"
#LC_MESSAGES="es_ES@euro"
#LC_PAPER="es_ES@euro"
#LC_NAME="es_ES@euro"
#LC_ADDRESS="es_ES@euro"
#LC_TELEPHONE="es_ES@euro"
#LC_MEASUREMENT="es_ES@euro"
#LC_IDENTIFICATION="es_ES@euro"
#LC_ALL=es_ES@euro


#Líneas comentadas para evitar configurar el teclado en inglés
# si estamos manejando otros idiomas... 12-10-05 Marcos

# si fuimos llamados en inglés desde la linea de boot: (queda en grub)
#if grep -w -q "lang=en" /proc/cmdline ; then
    #echo "*** English ***"
#export LANG=en
#export LC_ALL=en_US
    
# Locales "pardo"
#. /etc/musix/funciones-i18n
#setear_locale en

#echo Configurando el teclado en Entorno Gráfico en ingles
#setxkbmap -model pc105 -layout us -variant basic

#echo Modificando KDE para english
#nn -a /root/.kde/share/config/kdeglobals -s Locale -V Country -v us
#nn -a /root/.kde/share/config/kdeglobals -s Locale -V Language -v en_US
    
#fi




# ya estaba:
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:."
export PATH

umask 022

CRE="
[K"
BLUE="[1;34m"
NORMAL="[1;39m"

RUNLEVEL5=""
case "$(runlevel)" in *\ 5) RUNLEVEL5="true" ;; esac

# ATENCION, con /etc/sysconfig/knoppix aparentemente tendría 
# configuradas las variables para ESPAÑOL, entonces
# saco la conclusión de que el problema estaba en xinitrc...
XMODULE=""
[ -f /etc/sysconfig/xserver ] && . /etc/sysconfig/xserver
[ -f /etc/sysconfig/knoppix ] && . /etc/sysconfig/knoppix

[ -n "$BACKGROUND" -a -e "$BACKGROUND" ] || BACKGROUND="-solid black"

# See how we were called.
case "$1" in
  start)
rm -f /etc/sysconfig/xsession-restart
# Don't start X if brltty is running!
BPID="$(pidof brltty 2>/dev/null)"
[ "$?" = "0" ] && exit 0

echo "${CRE}${BLUE}Ejecutando $0 $1:${NORMAL}"
        # Start daemons.
	
# PRESTAR ATENCION DE QUÉ MANERA COMPRUEBA LA MEMORIA
REALMEM="$(cat /proc/meminfo | awk '/MemTotal/{print $2}')"
if [ -n "$REALMEM" -a "$REALMEM" -lt 14000 ]
then
echo "${BLUE}$0: ${RED}Lo siento, Necesita al menos 16 Megas de RAM para iniciar el sistema X-Window.${NORMAL}"
echo "${BLUE}$0: ${RED}Terminando.${NORMAL}"
exit 1
fi

# Creando archivo swap en /mnt/hda1 si la PC tiene menos de 180mb de RAM
#crear-swap.sh &
#sleep 10s

# Mostrando las opciones de inicio del escritorio
opciones-inicio.sh

exit 0


# Así continuaría el script con modificaciones mías.

echo ""
echo "	${NORMAL}Iniciando sesión sencilla  X-Window para el usuario $USER."
echo "	Por favor, espere unos segundos mientras se optimiza la configuración"
if [ -n "$RUNLEVEL5" ]
then
echo ""
# No se apaga automáticamente
#echo "Después de que termine esta sesión, el sistema se apagará automáticamente."
fi
echo ""
echo -n "${BLUE}Iniciando X11...${NORMAL}"

# Aqui es donde inicio xfce4 con startxfce4 para evitar problemas con el modo en que
# Knoppix iniciaba el servidor X, que ponía en <defunc> partes de xfce4
# con los consiguientes fallos: no iniciaba rosegarden, etc.

#startxfce4-musix &
# 

HOME=/root
LANG=es_ES@euro
LC_CTYPE="es_ES@euro"
LC_NUMERIC="es_ES@euro"
LC_TIME="es_ES@euro"
LC_COLLATE="es_ES@euro"
LC_MONETARY="es_ES@euro"
LC_MESSAGES="es_ES@euro"
LC_PAPER="es_ES@euro"
LC_NAME="es_ES@euro"
LC_ADDRESS="es_ES@euro"
LC_TELEPHONE="es_ES@euro"
LC_MEASUREMENT="es_ES@euro"
LC_IDENTIFICATION="es_ES@euro"
LC_ALL=es_ES@euro

if [ ! -d /root/.xfce4/ ]; then
	mkdir /root/.xfce4/
	mkdir /root/.xfce4/settings/
	mkdir /root/.xfce4/xffm/
fi

if test x"$DISPLAY" = x""
then
  echo "$0: Iniciando servidor X"
  if [ -x /root/.xfce4/xinitrc ]; then
	play /usr/share/sounds/KDE_Window_Hide.ogg &
	exec xinit /root/.xfce4/xinitrc $* &
	echo "	${YELLOW}Ejecutando exec xinit /root/.xfce4/xinitrc ${WHITE}$*"
  else
	  play /usr/share/sounds/KDE_Error_2.ogg &
  	echo "	${RED}Ejecutando exec xinit /etc/X11/xfce4/xinitrc ${WHITE}$*"
	exec xinit /etc/X11/xfce4/xinitrc $* &
  fi  
else
  echo "$0: el servidor X ya está corriendo en el display $DISPLAY"
  if [ -x /root/.xfce4/xinitrc ]; then
  	play /usr/share/sounds/KDE_Window_Hide.ogg &
  echo "	${YELLOW}Ejecutando exec /bin/sh /root/.xfce4/xinitrc $*"
	exec /bin/sh /root/.xfce4/xinitrc $* &
  else
  play /usr/share/sounds/KDE_Error_2.ogg &
  echo "	${RED}Ejecutando exec /bin/sh /etc/X11/xfce4/xinitrc $*"
	exec /bin/sh /etc/X11/xfce4/xinitrc $* &
  fi
fi

# Durmiendo y despertando para configurar placa de sonido y mostrar la ayuda.
sleep 20s
DISPLAY=:0 alsa-conf-abrir-terminal.sh 
# Una vez configurada la placa, se procede con el archivo de ayuda...
ayuda.sh &

echo "	${YELLOW}Sesión de Escritorio finalizada para usuario $USER."
echo "	${WHITE}Si el entorno de escritorio ha fallado; deberías probar de iniciar Musix con algunos de estos parámetros de inicio:"
echo "	${GREEN}fb800x600"
echo "	${GREEN}fb1024x768"
echo "	${GREEN}failsafe"
echo "	${GREEN}failsafesound"
echo ...
echo "	${WHITE}Este es el entorno de consola en Linux. Puedes pedir un manual de un comando mediante man, por ej.: ${GREEN}man ls ${WHITE}[enter]"
echo "	${WHITE}Puedes apagar tu PC escribiendo ${GREEN} apagar o poweroff ${WHITE} [enter]"
echo "	${GREEN} Presiona control+C para poder escribir...${NORMAL}"

exit 0



####################Continuaba así el script de Knoppix############

ACCEL=""
XOPTIONS=""
DPI="-dpi 75"
NORESET=""
[ -n "$XSERVER" -a -x "/usr/X11R6/bin/$XSERVER" ] && ACCEL="$XSERVER"
[ -L /etc/X11/X ] && ACCEL="$ACCEL /etc/X11/X"

# Try to find and load an agp and drm module for this graphics card
KVER="$(uname -r)"
# Kernel 2.6: Load specific AGPGART module(s)
case "$KVER" in 2.6.*)
 case "$(cat /proc/cmdline)" in *noagp*) ;; *)
  modprobe agpgart >/dev/null 2>&1
# Should not be needed anymore in Kernel 2.6
#  for i in /lib/modules/"$KVER"/kernel/drivers/char/agp/*; do
#    module="${i##*/}"; module="${module%%.*}"; modprobe ${module} >/dev/null 2>&1
#  done
;;
 esac
 ;;
esac

if [ -n "$XMODULE" ]; then
# All kernels: Load drm module
for i in /lib/modules/"$KVER"/kernel/drivers/char/drm/*; do
case "$i" in *$XMODULE*) module="${i##*/}"; module="${module%%.*}"; modprobe ${module} >/dev/null 2>&1 ;; esac
done
fi

for X in $ACCEL vesa fbdev
do
# Use customized version of XF86Config
XCONFIG="/etc/X11/XF86Config"
BPP="-bpp"
case "$X" in
*XFree86*) XCONFIG="/etc/X11/XF86Config-4"; BPP="-depth"; NORESET="-noreset"; ;;
vesa|fbdev)
	for i in xserver knoppix; do echo 'XSERVER="XFree86"' >> /etc/sysconfig/$i; echo 'XMODULE="'"$X"'"' >> /etc/sysconfig/$i; done
	echo "${NORMAL}"
	echo -n "${BLUE}Reintentando con el servidor ${GREEN}XFree86(${YELLOW}$X${GREEN})${NORMAL} "
	rm -f /etc/X11/XF86Config-4
	mkxf86config >/dev/null 2>&1
	X=XFree86 ; XCONFIG="/etc/X11/XF86Config-4"; BPP="-depth"; NORESET="-noreset"; XOPTIONS=""
	;;
esac
# Try hwsetup-generated flags first, if present
$X $NORESET -xf86config "$XCONFIG" $XOPTIONS $DPI :0 2>/dev/null && break
# Mostly failsafe probe fallbacks
# Some cards prefer 16 bit, especially when low on mem or not SVGA,
# so try this first.
if $X $NORESET -xf86config "$XCONFIG" $BPP 16 $DPI :0 2>/dev/null || \
   $X $NORESET -xf86config "$XCONFIG" $BPP 24 $DPI :0 2>/dev/null || \
   $X $NORESET -xf86config "$XCONFIG" $BPP 32 $DPI :0 2>/dev/null || \
   $X $NORESET -xf86config "$XCONFIG" $BPP  8 $DPI :0 2>/dev/null; then break; fi
echo -n "${BLUE}.${NORMAL}"
done &
sleep 2
# Wait for X-Server startup
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
found="true"
# Startup Logo
# DISPLAY=:0 xloadimage -center -onroot -border black \
# modificado ##########################################################################
# Agregado; tratando de lanzar la configuración de la placa de sonido:
# Deshabilitado por el momento, 
# le saqué el & para que no siga cargando cosas hasta que no esté bien configurada la placa
#DISPLAY=:0 alsa-conf-abrir-terminal.sh 
# Iniciando archivo de ayuda.txt + xdesktopwaves por 30s, es un script:
#ayuda.sh &
# Así abriría mozilla con index de ayuda.
#DISPLAY=:0 rxvt -e mozilla /cdrom/KNOPPIX/index_es.html &
DISPLAY=:0 xloadimage -onroot -fullscreen -shrink -smooth -border black -quiet $BACKGROUND >/dev/null 2>&1 && break
found="false"
sleep 1
done
echo ""

if [ "$found" = "false" ]
then
echo "${RED}Error: No hay un servidor X adecuado para su tarjeta.${NORMAL}"
exit 1
fi

# FIXME: Move to others

rm -f /etc/sysconfig/xsession-commands
touch /etc/sysconfig/xsession-commands
chown $USER.$USER /etc/sysconfig/xsession-commands

su -c "DISPLAY=:0 exec /etc/X11/xinit/xinitrc" - $USER >/dev/null 2>&1
RC="$?"

XSESSION_COMMAND=$(cat /etc/sysconfig/xsession-commands) # Read in what kde / ... told us.

# After xsession exits, end X-Server
for i in $ACCEL $X $XSERVER XFree86 XF86_SVGA; do
killall -TERM $i 2>/dev/null && break
done
echo ""
echo -n "${CRE}${BLUE}Sesión X-Window finalizada "
if [ "$RC" = "0" ]
then
echo "sin errores."
NEXT_RUNLEVEL=0
# modificado para poner xfce4 en lugar de kde_restart
if [ -n "$XSESSION_COMMAND" ]
then
 case "$XSESSION_COMMAND" in
  shutdown*halt*)
   NEXT_RUNLEVEL=0
  ;;
  shutdown*reboot*)
   NEXT_RUNLEVEL=6
  ;;
  /usr/bin/startxfce4)
   [ ! -f /etc/sysconfig/xsession-restart ] && exec $0 start
  ;;
esac
fi

if [ -n "$RUNLEVEL5" -a ! -f /etc/sysconfig/xsession-restart ]
then
echo "Apagando.${NORMAL}"
# Play informational sound if soundcore module present
# (checking /dev/sndstat is unreliable)
OGGPLAY=/usr/bin/ogg123
PLAY=/usr/bin/wavp
[ -x "$PLAY" ] || PLAY=/usr/bin/play-sample
[ -x "$PLAY" ] || PLAY=/usr/bin/play
if [ -x "$OGGPLAY" -a -f /usr/share/sounds/shutdown.ogg ]; then
case "$(lsmod)" in *sound*) { $OGGPLAY -q -p 64 /usr/share/sounds/shutdown.ogg >/dev/null 2>&1 & } ; sleep 7 ;; esac
elif [ -f /usr/share/sounds/shutdown.wav -a -x "$PLAY" ]; then
case "$(lsmod)" in *sound*) { $PLAY /usr/share/sounds/shutdown.wav >/dev/null 2>&1 & } ; sleep 7 ;; esac
fi
init $NEXT_RUNLEVEL
fi
else
echo "con errores."
echo "${RED}Por favor, compruebe $XCONFIG y reintente ${CYAN}'$0 start'${RED}.${NORMAL}"
fi
        ;;
  stop)
        # Stop daemons.
	# Don't shutdown if killed by init or manually
        touch /etc/sysconfig/xsession-restart
	for i in $XSERVER XF86_SVGA; do
        killall -TERM $i 2>/dev/null && echo "${BLUE}Apagado de servidor X.${NORMAL}" && break
	done
        ;;
  restart)
        touch /etc/sysconfig/xsession-restart
	( nohup bash -c "$0 stop; sleep 5; $0 start" & )
        ;;
  *)
        echo "${RED}Uso: xsession {start|stop}${NORMAL}"
        exit 1
esac

exit 0
