树莓派startx启动桌面过程分析

树莓派startx启动过程分析

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值