




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux100中文网 Linux系统中Xwindow系统启动脚本分析 安装了Linux后当然希望能进入XWindow,象在Windows一样方便地工作,于是大家都可能用过startx命令,也可能是直接在XWindow登录界面进入XWindow。这两种方式的XWindow启动过程有没有区别呢?如果你没有做过个性化设置可能体会不到,但如果你设置过中文输入法,不管是用SCIM还是fcitx,可能都有过设置输入法为随XWindow启动的经验。朋友们开始修改各种启动脚本,经常可能会修改到的方法有:1、修改/etc/X11/xinit/xinitrc2、修改/etc/X11/Xsession3、在/etc/X11/Xsession.d目录下增加一个自定义的脚本4、修改$HOME/.xsession5、修改$HOME/.xinitrc6、修改/etc/X11/xdm/Xsession 总之,看起来是八仙过海各有各的神通了。这些方法有没有不同?为什么有时候明明设置好了,startx起来可以用了,但重启在XWindow管理界面登录后却不能用了?为什么有时从XWindow管理界面登录后可用,但startx后却用不了?下面我们一起来分析一下吧。 #!/bin/sh# /etc/X11/Xsession# global Xsession file - used by display managers and xinit (startx)# $Id: Xsession 2186 2005-02-11 07:11:05Z branden $set -ePROGNAME=Xsessionmessage () # pretty-print messages of arbitrary length; use xmessage if it# is available and $DISPLAY is setMESSAGE=“$PROGNAME: $*”echo”$MESSAGE” | fold -s -w $COLUMNS:-80 2if -n”$DISPLAY” which xmessage /dev/null 21; thenecho”$MESSAGE” | fold -s -w $COLUMNS:-80 | xmessage -center -file -fimessage_nonl () # pretty-print messages of arbitrary length (no trailing newline); use# xmessage if it is available and $DISPLAY is setMESSAGE=“$PROGNAME: $*”echo -n”$MESSAGE” | fold -s -w $COLUMNS:-80 2;if -n”$DISPLAY” which xmessage /dev/null 21; thenecho -n”$MESSAGE” | fold -s -w $COLUMNS:-80 | xmessage -center -file -fierrormsg () # exit script with errormessage”$*”exit 1internal_errormsg () # exit script with error; essentially a”THIS SHOULD NEVER HAPPEN” message# One big call to message() for the sake of xmessage; if we had two then# the user would have dismissed the error we want reported before seeing the# request to report it.errormsg”$*” “Please report the installed version of the ”xfree86-common”“ “package and the complete text of this error message to” “.”# initialize variables for use by all session scriptsOPTIONFILE=/etc/X11/Xsession.optionsSYSRESOURCES=/etc/X11/XresourcesUSRRESOURCES=$HOME/.XresourcesSYSSESSIONDIR=/etc/X11/Xsession.dUSERXSESSION=$HOME/.xsessionALTUSERXSESSION=$HOME/.XsessionERRFILE=$HOME/.xsession-errors# attempt to create an error file; abort if we cannotif touch”$ERRFILE” 2 /dev/null -w”$ERRFILE” ! -L”$ERRFILE” ; thenchmod 600”$ERRFILE”elif ERRFILE=$(tempfile 2 /dev/null); thenif ! ln -sf”$ERRFILE”$TMPDIR:=/tmp/xsession-$USER”; thenmessage”warning: unable to symlink ”$TMPDIR/xsession-$USER” to” “”$ERRFILE”; look for session log/errors in” “”$TMPDIR/xsession-$USER”.”fielseerrormsg”unable to create X session log/error file; aborting.”fiexec ”$ERRFILE” 21echo”$PROGNAME: X session started for $LOGNAME at $(date)”# sanity check; is our session script directory present?if ! -d”$SYSSESSIONDIR” ; thenerrormsg”no ”$SYSSESSIONDIR” directory found; aborting.”fi# Attempt to create a file of non-zero length in /tmp; a full filesystem can# cause mysterious X session failures. We do not use touch, :, or test -w# because they wont actually create a file with contents. We also let standard# error from tempfile and echo go to the error file to aid the user in# determining what went wrong.WRITE_TEST=$(tempfile)if ! echo”*” ”$WRITE_TEST”; thenmessage”warning: unable to write to $WRITE_TEST%/*; X session may exit” “with an error”firm -f”$WRITE_TEST”# 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.SESSIONFILES=$(run-parts -list $SYSSESSIONDIR)if -n”$SESSIONFILES” ; thenfor SESSIONFILE in $SESSIONFILES; do. $SESSIONFILEdonefiexit 0 此文件的第五行“# global Xsession file - used bydisplay managers and xinit(startx)”已经说明/etc/X11/Xsession脚本是大家公用的,无论你是用XWindow管理器(比如kdm、gdm、xdm)进入还是通过命令行输入startx(即xinit方式)进入XWindow,都会调用此脚本程序。再看看这个脚本程序做了些什么吧。这一行“SYSSESSIONDIR=/etc/X11/Xsession.d”定义了一个变量指向了目录/etc/X11/Xsession.d,后面又出现一段代码: SESSIONFILES=$(run-parts -list $SYSSESSIONDIR)if -n”$SESSIONFILES” ; thenfor SESSIONFILE in $SESSIONFILES; do. $SESSIONFILEdonefi 显然这里是搜索了目录/etc/X11/Xsession.d里面所有的脚本并一一执行完毕。同时请注意有这么两行: USERXSESSION=$HOME/.xsessionALTUSERXSESSION=$HOME/.Xsession 在这里并没有看到使用这两个变量,那么在这个脚本里定义来做什么?下面再看一下脚本/etc/X11/Xsession.d/50xfree86-common_determine-startup里的内容,原文如下: # $Id: 50xfree86-common_determine-startup 1437 2004-05-23 03:18:32Z branden $# This file is sourced by Xsession(5), not executed.# If no X session startup program was passed to the Xsession script as an# argument (e.g., by the display manager), or if that program was not# executable, fall back to looking for a userot; doif -e”$STARTUPFILE” ; thenif -x”$STARTUPFILE” ; thenSTARTUP=“$STARTUPFILE”elseSTARTUP=“sh $STARTUPFILE”fibreakfidonefifi# If there is still nothing to use for a startup program, try the system# default session manager, window manager, and terminal emulator.if -z”$STARTUP” ; thenif -x /usr/bin/x-session-manager ; thenSTARTUP=x-session-managerelif -x /usr/bin/x-window-manager ; thenSTARTUP=x-window-managerelif -x /usr/bin/x-terminal-emulator ; thenSTARTUP=x-terminal-emulatorfifi# If we still have not found a startup program, give up.if -z”$STAfierrormsg”$ERRMSG no session managers, no window managers, and no terminal” “emulators found; aborting.”fi# vim:set ai et sts=2 sw=2 tw=80: 这一行“# This file is sourced by Xsession(5), not executed.”证明脚本是被之前的/etc/X11/Xsession调用的,而后面这一段: for STARTUPFILE in”$USERXSESSION”$ALTUSERXSESSION”; doif -e”$STARTUPFILE” ; thenif -x”$STARTUPFILE” ; thenSTARTUP=“$STARTUPFILE”elseSTARTUP=“sh $STARTUPFILE”fibreakfidone 更证明了这一点。在这里脚本搜索用户目录$HOME下的.xsession或.Xsession脚本来执行。(在/etc/X11/Xsession.d目录下还有一些脚本,这里就不再分析了,各位有兴趣可以自己看看)另外来看看/etc/X11/xinit/xinitrc这个脚本,其原文内容如下: #!/bin/sh# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $# /etc/X11/xinit/xinitrc# global xinitrc file, used by all X sessions started by xinit (startx)# invoke global X session script. /etc/X11/Xsession 注意这一句“# global xinitrc file, used by allX sessions started by xinit(startx)”,这说明这个脚本只被xinit调用(即用户输入startx时)。而其执行的最后还是执行了/etc/X11/Xsession脚本。而用户如果用其它XWindow管理界面登录系统时这个脚本里的内容是不会被执行的。最后再来看看/etc/X11/xdm/Xsession这个脚本吧,其原文内容如下: #!/bin/sh# $Xorg: Xsession,v 1.4 2000/08/17 19:54:17 cpqbld Exp $# $XFree86: xc/programs/xdm/config/Xsession,v 1.3 2001/01/17 23:45:24 dawes Exp $# invoke global X session script. /etc/X11/Xsession 从内容来看,也是最终执行了/etc/X11/Xsession。再看看/etc/X11里面的目录结构: X Xsession.d cursors gdm rstart xinitXF86Config-4 Xsession.options default-display-manager lbxproxy sysconfig xkbXresources Xwrap
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 暖气并联施工方案(3篇)
- 防诈骗红色活动策划方案(3篇)
- cad大样施工方案(3篇)
- 文职厨师考试题库及答案
- 北京市昌平区2024-2025学年八年级下学期期末考试语文题目及答案
- 安徽省六安市裕安区2022-2023学年高三下学期高考第一模拟考试(一模)物理考试题目及答案
- 阅读滋润我成长作文800字8篇
- 冬天小学生作文范文11篇
- 给蒙古小朋友的一封信900字14篇
- 项目管理 课件 第十三章-项目融资管理T
- 【艾青诗选】批注
- MOOC 研究生学术规范与学术诚信-南京大学 中国大学慕课答案
- 成都第四十九中学数学新初一分班试卷含答案
- T∕CGSS 004-2019 适老营养配方食品通则
- 碳碳复合材料课件
- 2022年社区面试题目大全
- 质量异议函模板
- 大酒店预防空气传播性疾病应急预案
- 龙兴商业广场二期项目经营模式建议
- 健康症状自检表---身体的语言
- 国家公务员考试申论(地市级)参考答案
评论
0/150
提交评论