【linux】Matchbox(一):启动脚本

时间:2022-03-09 16:56:23

脚本执行顺序

启动X服务器

/etc/rc5.d/S01xserver-nodm –> ../init.d/xserver-nodm–>
对应进程:
/bin/sh /etc/rc5.d/S01xserver-nodm start background

xinit /etc/X11/Xsession–>
对应进程:
xinit /etc/X11/Xsession – /usr/bin/Xorg -br -pn -nolisten tcp +iglx
/usr/bin/Xorg :0 -br -pn -nolisten tcp +iglx

启动桌面管理程序Matchbox

/etc/X11/Xsession.d/90xXWindowManager.sh–>
/usr/bin/x-session-manager—>
/etc/matchbox/session
最后启动四个程序
matchbox-window-manager -theme Sato -use_desktop_mode decorated -use_cursor yes
matchbox-desktop
matchbox-panel –titlebar –start-applets showdesktop,windowselector –end-applets clock,battery,keyboard,systray,startup-notify,notify
matchbox-keyboard -d

各个脚本详情

etc/rc5.d/S01xserver-nodm –> ../init.d/xserver-nodm

#!/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


. /etc/init.d/functions

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

case "$1" in
  start)
    # We don't want this script to block the rest of the boot process
    if [ "$2" != "background" ]; then
      $0 $1 background &
    else
       # work around from /etc/X11/Xinit
       export USER=root
       export HOME=/home/root
       if [ ! -d $HOME ] && [ -d /root ]; then
         HOME=/root
       fi

       . /etc/profile

       echo "Starting Xserver"
       . /etc/X11/xserver-common
#$XSERVER和$ARGS在xserver-common中定义,$XSERVER=Xorg,下面的步骤是启动X服务器Xorg
#/etc/X11/Xsession是X客户端,也就是桌面管理程序
#xinit的用法为:xinit [[client] options ] [-- [server] [display] options]
       xinit /etc/X11/Xsession -- `which $XSERVER` $ARGS >/var/log/Xsession.log 2>&1
    fi
  ;;

  stop)
        echo "Stopping XServer"
        killproc xinit
  ;;

  restart)
    $0 stop
        sleep 1
        $0 start
  ;;

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

exit 0

etc/X11/Xsession

#!/bin/sh

# this location MUST be consistent with /etc/X11/gpe-login.pre-session
HOME_VOLATILE=/home/$USER/ramdisk
export HOME_VOLATILE

. /etc/profile

if [ -f $HOME/.profile ]; then
 . $HOME/.profile
fi



if [ -f /usr/bin/dbus-launch ]; then
  ## test for an existing bus daemon, just to be safe
  if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
     ## if not found, launch a new one
     eval `/usr/bin/dbus-launch --auto-syntax --exit-with-session`
     echo "D-BUS per-session daemon address is: $DBUS_SESSION_BUS_ADDRESS"
  fi  
fi

SYSSESSIONDIR=/etc/X11/Xsession-gpe.d

if [ ! -d $SYSSESSIONDIR ]; then
  SYSSESSIONDIR=/etc/X11/Xsession.d
fi

# Use run-parts to source every file in the session directory; we source
# instead of executing so that the variables and functions defined above
# are available to the scripts, and so that they can pass variables to each
# other.
# Can't use run-parts like this, busybox doesn't support it. Use ls instead
#SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)

SESSIONFILES=`ls -X $SYSSESSIONDIR`
if [ -n "$SESSIONFILES" ]; then
  for SESSIONFILE in $SESSIONFILES; do
  # Test if script is executable first before sourcing it
    if [ -x "$SYSSESSIONDIR/$SESSIONFILE" ]; then
      . $SYSSESSIONDIR/$SESSIONFILE
    fi
  done
fi

exit 0

/etc/X11/Xsession.d/90xXWindowManager.sh

  if [ -x $HOME/.Xsession ]; then
      exec $HOME/.Xsession
  elif [ -x /usr/bin/x-session-manager ]; then
      exec /usr/bin/x-session-manager
  else
      exec /usr/bin/x-window-manager
  fi

/usr/bin/x-session-manager

#!/bin/sh
#
# Very simple session manager for matchbox tools
#

# Uncomment below to enable parsing of debian menu entrys
# export MB_USE_DEB_MENUS=1

if [ -e $HOME/.matchbox/session ]
then
exec $HOME/.matchbox/session
fi

if [ -e /etc/matchbox/session ]
then
exec /etc/matchbox/session
fi

# Default files to run if $HOME/.matchbox/session or /etc/matchbox/session
# dont exist.

matchbox-desktop &
matchbox-panel &
exec matchbox-window-manager $@

/etc/matchbox/session

#!/bin/sh 
. /etc/formfactor/config

if [ "$HAVE_TOUCHSCREEN" = "1" ]; then
    SHOWCURSOR="no"
else
    SHOWCURSOR="yes"
fi

if [ "$HAVE_KEYBOARD" = "1" ]; then
    KEYBOARD_APPLET=""
else
    KEYBOARD_APPLET="keyboard"
fi


matchbox-desktop &

# Lines containing feature-[foo] are removed at build time if the machine
# doesn't have the feature "foo".

START_APPLETS=showdesktop,windowselector
END_APPLETS=clock,battery,$KEYBOARD_APPLET,systray,startup-notify,notify

matchbox-panel --titlebar --start-applets $START_APPLETS --end-applets $END_APPLETS &

exec matchbox-window-manager -theme Sato -use_desktop_mode decorated -use_cursor $SHOWCURSOR $@