1.startx脚本
位置:/usr/bin/startx
部分变量:
userclientrc=$HOME/.xinitrc
sysclientrc=/etc/X11/xinit/xinitrc
userserverrc=$HOME/.xserverrc
sysserverrc=/etc/X11/xinit/xserverrc
判断文件是否存在:
if [ -f "$userclientrc" ]; then
client=$userclientrc
elif [ -f "$sysclientrc" ]; then
client=$sysclientrc
fi
if [ -f "$userserverrc" ]; then
server=$userserverrc
elif [ -f "$sysserverrc" ]; then
server=$sysserverrc
fi
执行xinit(参数未详细查看)
xinit "$client" $clientargs -- "$server" $display $serverargs
xinit初始化X是通过两个层面来进行的,即X client程序和X server程序。上面[client]和[server]分别称为X client程序和X server程序。
即相当于运行了以下命令:
xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc
2.xserver服务器脚本
查看/etc/X11/xinit/xserverrc
#!/bin/sh
exec /usr/bin/X -nolisten tcp "$@"
即开始执行X程序,-nolisten tcp关闭tcp监听(关闭xserver远程访问功能),参数等.
3.xclient客户端脚本
#!/bin/sh
# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)
# invoke global X session script
. /etc/X11/Xsession
开始执行Xsession
4.Xsession
Xsessin是一个重要的文件,为什么要怎么说呢?因为不管是通过Display Manager登录X,还是通过xinit(startx)登录X,它都会被执行。Xsession是一个全局文件。
部分脚本内容:
SYSSESSIONDIR=/etc/X11/Xsession.d
USERXSESSIONRC=$HOME/.xsessionrc
ALTUSERXSESSION=$HOME/.Xsession
SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)
if [ -n "$SESSIONFILES" ]; then
set +e
for SESSIONFILE in $SESSIONFILES; do
. $SESSIONFILE
done
set -e
fi
这里是搜索了目录/etc/X11/Xsession.d里面所有的脚本并一一执行完毕。
同时请注意有这么两行:
USERXSESSIONRC=$HOME/.xsessionrc
ALTUSERXSESSION=$HOME/.Xsession
在这里并没有看到使用这两个变量.
在/etc/X11/Xsession下脚本:
20x11-common_process-args 35x11-common_xhost-local 50x11-common_determine-startup 75dbus_dbus-launch 90consolekit 90xmodmap
30x11-common_xresources 40x11-common_xsessionrc 70im-config_launch 75source-profile 90x11-common_ssh-agent 99x11-common_start
5.挑选其中50x11-common_determine-startup进行分析:
部分脚本如下:if [ -z "$STARTUP" ]; then
if [ -x /usr/bin/x-session-manager ]; then
STARTUP=x-session-manager
elif [ -x /usr/bin/x-window-manager ]; then
STARTUP=x-window-manager
elif [ -x /usr/bin/x-terminal-emulator ]; then
STARTUP=x-terminal-emulator
fi
fi
注:
/usr/bin/x-session-manager/*启动Desktop Environment*/
/usr/bin/x-window-manager/*启动Window Manager*/
/usr/bin/x-terminal-emulator/*启动Terminal*/
6.x-session-manager分析
脚本最后
# Start the LXDE session
exec /usr/bin/lxsession -s LXDE-pi -e LXDE
启动Lxsession程序
以后再分析吧!!!
1613 ? S 0:00 /usr/sbin/ifplugd -i lo -q -f -u0 -d10 -w -I
1674 ? S 0:00 /usr/sbin/ifplugd -i wlan0 -q -f -u0 -d10 -w -I
1694 ? S 0:00 /usr/sbin/ifplugd -i eth0 -q -f -u0 -d10 -w -I
1728 ? S 0:00 [RTW_CMD_THREAD]
1788 ? Ss 0:00 /sbin/wpa_supplicant -s -B -P /var/run/wpa_supplicant.wlan0.pid -i wlan0 -W -D nl80211,wext -c /etc/wpa_supplicant/wpa_supplicant.conf
1895 ? Ss 0:00 /sbin/wpa_cli -B -P /var/run/wpa_action.wlan0.pid -i wlan0 -p /var/run/wpa_supplicant -a /sbin/wpa_action
2002 ? S 0:00 [kworker/0:2]
2005 ? Sl 0:00 /usr/sbin/rsyslogd -c5
2006 ? Ss 0:00 /usr/sbin/thd --daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile /var/run/thd.pid --user nobody /dev/in
2079 ? Ss 0:00 /usr/sbin/cron
2124 ? Ss 0:00 /usr/bin/dbus-daemon --system
2177 ? Ss 0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 102:104
2255 ? Ss 0:00 dhclient -v -pf /run/dhclient.wlan0.pid -lf /var/lib/dhcp/dhclient.wlan0.leases wlan0
2271 ? S 0:00 /usr/sbin/xrdp
2275 ? S 0:00 /usr/sbin/xrdp-sesman
2331 ? Ss 0:00 /bin/login -f tty1 /dev/tty1
2332 tty2 Ss+ 0:00 /sbin/getty 38400 tty2
2333 tty3 Ss+ 0:00 /sbin/getty 38400 tty3
2334 tty4 Ss+ 0:00 /sbin/getty 38400 tty4
2336 tty5 Ss+ 0:00 /sbin/getty 38400 tty5
2337 tty6 Ss+ 0:00 /sbin/getty 38400 tty6
2338 ? Ss+ 0:00 /sbin/getty -L ttyAMA0 115200 vt100
2342 ? S 0:01 -bash
2347 ? Ss 0:00 /usr/sbin/sshd
2372 ? Ss 0:00 sshd: pi [priv]
2376 ? S 0:00 sshd: pi@pts/0
2377 pts/0 Ss 0:01 -bash
--------------------------------------------startx启动后进程-----------------------------------------------------------------------------
2392 pts/0 S 0:00 /bin/sh /usr/bin/startx
2409 pts/0 S 0:00 xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc :0 -auth /tmp/serverauth.dmWv8xVEMW
2410 tty7 Ss+ 0:01 /usr/bin/X :0 -auth /tmp/serverauth.dmWv8xVEMW
2416 pts/0 S 0:00 /usr/bin/ck-launch-session /usr/bin/dbus-launch --exit-with-session /usr/bin/im-launch x-session-manager
2463 ? Ss 0:00 /usr/bin/ssh-agent /usr/bin/ck-launch-session /usr/bin/dbus-launch --exit-with-session /usr/bin/im-launch x-session-manager
2465 ? Sl 0:00 /usr/sbin/console-kit-daemon --no-daemon
2532 ? Sl 0:00 /usr/lib/policykit-1/polkitd --no-debug
2540 pts/0 Sl 0:00 /usr/bin/lxsession -s LXDE-pi -e LXDE
2543 pts/0 S 0:00 /usr/bin/dbus-launch --exit-with-session /usr/bin/im-launch x-session-manager
2544 ? Ss 0:00 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
2571 ? Sl 0:01 /usr/bin/fcitx
2577 pts/0 S 0:00 openbox --config-file /home/pi/.config/openbox/lxde-pi-rc.xml
2579 pts/0 Sl 0:01 lxpanel --profile LXDE-pi
2582 pts/0 Sl 0:01 pcmanfm --desktop --profile LXDE-pi
2586 pts/0 Sl 0:00 /usr/lib/arm-linux-gnueabihf/lxpolkit
2590 ? S 0:00 /usr/lib/gvfs/gvfsd
2596 ? Sl 0:00 /usr/lib/gvfs/gvfs-gdu-volume-monitor
2599 ? Sl 0:00 /usr/lib/udisks/udisks-daemon
2600 ? S 0:00 udisks-daemon: not polling any devices
2604 ? S 0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
2606 ? Sl 0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
2609 pts/0 Sl 0:00 /usr/lib/arm-linux-gnueabihf/libmenu-cache1/libexec/menu-cached
2614 ? Sl 0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.2 /org/gtk/gvfs/exec_spaw/0
2618 pts/0 R+ 0:00 ps -ax