首页 Linux系统中Xwindow系统启动脚本分析

Linux系统中Xwindow系统启动脚本分析

举报
开通vip

Linux系统中Xwindow系统启动脚本分析Linux100中文网www.linux100.orgwww.linux100.orgLinux系统中Xwindow系统启动脚本分析安装了Linux后当然希望能进入XWindow,象在Windows一样方便地工作,于是大家都可能用过startx命令,也可能是直接在XWindow登录界面进入XWindow。这两种方式的XWindow启动过程有没有区别呢?如果你没有做过个性化设置可能体会不到,但如果你设置过中文输入法,不管是用SCIM还是fcitx,可能都有过设置输入法为随XWindow启动的经验。朋友们开始修改各种启...

Linux系统中Xwindow系统启动脚本分析
Linux100中文网www.linux100.orgwww.linux100.orgLinux系统中Xwindow系统启动脚本 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 安装了Linux后当然希望能进入XWindow,象在Windows一样方便地工作,于是大家都可能用过startx命令,也可能是直接在XWindow登录界面进入XWindow。这两种方式的XWindow启动过程有没有区别呢?如果你没有做过个性化设置可能体会不到,但如果你设置过中文输入法,不管是用SCIM还是fcitx,可能都有过设置输入法为随XWindow启动的经验。朋友们开始修改各种启动脚本,经常可能会修改到的方法有:1、修改/etc/X11/xinit/xinitrc2、修改/etc/X11/Xsession3、在/etc/X11/Xsession.d 目录 工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录 下增加一个自定义的脚本4、修改$HOME/.xsession5、修改$HOME/.xinitrc6、修改/etc/X11/xdm/Xsession……总之,看起来是八仙过海各有各的神通了。这些方法有没有不同?为什么有时候明明设置好了,startx起来可以用了,但重启在XWindow管理界面登录后却不能用了?为什么有时从XWindow管理界面登录后可用,但startx后却用不了?下面我们一起来分析一下吧。#!/bin/sh##/etc/X11/Xsession##globalXsessionfile--usedbydisplaymanagersandxinit(startx)#$Id:Xsession21862005-02-1107:11:05Zbranden$set-ePROGNAME=Xsessionmessage(){#pretty-printmessagesofarbitrarylength;usexmessageifit#isavailableand$DISPLAYissetMESSAGE=“$PROGNAME:$*”echo”$MESSAGE”|fold-s-w${COLUMNS:-80}>2if[-n”$DISPLAY”]whichxmessage>/dev/null2>1;thenecho”$MESSAGE”|fold-s-w${COLUMNS:-80}|xmessage-center-file-fi}message_nonl(){#pretty-printmessagesofarbitrarylength(notrailingnewline);use#xmessageifitisavailableand$DISPLAYissetMESSAGE=“$PROGNAME:$*”echo-n”$MESSAGE”|fold-s-w${COLUMNS:-80}>2;if[-n”$DISPLAY”]whichxmessage>/dev/null2>1;thenecho-n”$MESSAGE”|fold-s-w${COLUMNS:-80}|xmessage-center-file-fi}errormsg(){#exitscriptwitherrormessage”$*”exit1}internal_errormsg(){#exitscriptwitherror;essentiallya”THISSHOULDNEVERHAPPEN”message#Onebigcalltomessage()forthesakeofxmessage;ifwehadtwothen#theuserwouldhavedismissedtheerrorwewantreportedbeforeseeingthe#requesttoreportit.errormsg”$*”\“Pleasereporttheinstalledversionofthe\”xfree86-common\”“\“packageandthecompletetextofthiserrormessageto”\“.”}#initializevariablesforusebyallsessionscriptsOPTIONFILE=/etc/X11/Xsession.optionsSYSRESOURCES=/etc/X11/XresourcesUSRRESOURCES=$HOME/.XresourcesSYSSESSIONDIR=/etc/X11/Xsession.dUSERXSESSION=$HOME/.xsessionALTUSERXSESSION=$HOME/.XsessionERRFILE=$HOME/.xsession-errors#attempttocreateanerrorfile;abortifwecannotiftouch”$ERRFILE”2>/dev/null[-w”$ERRFILE”][!-L”$ERRFILE”];thenchmod600”$ERRFILE”elifERRFILE=$(tempfile2>/dev/null);thenif!ln-sf”$ERRFILE””${TMPDIR:=/tmp}/xsession-$USER”;thenmessage”warning:unabletosymlink\”$TMPDIR/xsession-$USER\”to”\“\”$ERRFILE\”;lookforsessionlog/errorsin”\“\”$TMPDIR/xsession-$USER\”.”fielseerrormsg”unabletocreateXsessionlog/errorfile;aborting.”fiexec>>”$ERRFILE”2>1echo”$PROGNAME:Xsessionstartedfor$LOGNAMEat$(date)”#sanitycheck;isoursessionscriptdirectorypresent?if[!-d”$SYSSESSIONDIR”];thenerrormsg”no\”$SYSSESSIONDIR\”directoryfound;aborting.”fi#Attempttocreateafileofnon-zerolengthin/tmp;afullfilesystemcan#causemysteriousXsessionfailures.Wedonotusetouch,:,ortest-w#becausetheywon’tactuallycreateafilewithcontents.Wealsoletstandard#errorfromtempfileandechogototheerrorfiletoaidtheuserin#determiningwhatwentwrong.WRITE_TEST=$(tempfile)if!echo”*”>>”$WRITE_TEST”;thenmessage”warning:unabletowriteto${WRITE_TEST%/*};Xsessionmayexit”\“withanerror”firm-f”$WRITE_TEST”#Userun-partstosourceeveryfileinthesessiondirectory;wesource#insteadofexecutingsothatthevariablesandfunctionsdefinedabove#areavailabletothescripts,andsothattheycanpassvariablestoeach#other.SESSIONFILES=$(run-parts--list$SYSSESSIONDIR)if[-n”$SESSIONFILES”];thenforSESSIONFILEin$SESSIONFILES;do.$SESSIONFILEdonefiexit0此文件的第五行“#globalXsessionfile--usedbydisplaymanagersandxinit(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”];thenforSESSIONFILEin$SESSIONFILES;do.$SESSIONFILEdonefi显然这里是搜索了目录/etc/X11/Xsession.d里面所有的脚本并一一执行完毕。同时请注意有这么两行:USERXSESSION=$HOME/.xsessionALTUSERXSESSION=$HOME/.Xsession在这里并没有看到使用这两个变量,那么在这个脚本里定义来做什么?下面再看一下脚本/etc/X11/Xsession.d/50xfree86-common_determine-startup里的内容,原文如下:#$Id:50xfree86-common_determine-startup14372004-05-2303:18:32Zbranden$#ThisfileissourcedbyXsession(5),notexecuted.#IfnoXsessionstartupprogramwaspassedtotheXsessionscriptasan#argument(e.g.,bythedisplaymanager),orifthatprogramwasnot#executable,fallbacktolookingforauser’ot;;doif[-e”$STARTUPFILE”];thenif[-x”$STARTUPFILE”];thenSTARTUP=“$STARTUPFILE”elseSTARTUP=“sh$STARTUPFILE”fibreakfidonefifi#Ifthereisstillnothingtouseforastartupprogram,trythesystem#defaultsessionmanager,windowmanager,andterminalemulator.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#Ifwestillhavenotfoundastartupprogram,giveup.if[-z”$STAfierrormsg”$ERRMSGnosessionmanagers,nowindowmanagers,andnoterminal”\“emulatorsfound;aborting.”fi#vim:setaietsts=2sw=2tw=80:这一行“#ThisfileissourcedbyXsession(5),notexecuted.”证明脚本是被之前的/etc/X11/Xsession调用的,而后面这一段:forSTARTUPFILEin”$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,v1.32000/08/1719:54:30cpqbldExp$###/etc/X11/xinit/xinitrc####globalxinitrcfile,usedbyallXsessionsstartedbyxinit(startx)###invokeglobalXsessionscript./etc/X11/Xsession注意这一句“##globalxinitrcfile,usedbyallXsessionsstartedbyxinit(startx)”,这说明这个脚本只被xinit调用(即用户输入startx时)。而其执行的最后还是执行了/etc/X11/Xsession脚本。而用户如果用其它XWindow管理界面登录系统时这个脚本里的内容是不会被执行的。最后再来看看/etc/X11/xdm/Xsession这个脚本吧,其原文内容如下:#!/bin/sh##$Xorg:Xsession,v1.42000/08/1719:54:17cpqbldExp$#$XFree86:xc/programs/xdm/config/Xsession,v1.32001/01/1723:45:24dawesExp$#invokeglobalXsessionscript./etc/X11/Xsession从内容来看,也是最终执行了/etc/X11/Xsession。再看看/etc/X11里面的目录结构:XXsession.dcursorsgdmrstartxinitXF86Config-4Xsession.optionsdefault-display-managerlbxproxysysconfigxkbXresourcesXwrapper.configfontsproxymngrtwmxserverXsessionapp-defaultsfsrgb.txtxdmxsm显然,这里把xinit和xdm、twm及gdm是分开的,在xinit里执行的脚本是不会被xdm里的脚本调用的。从上面对代码的分析,大家可以看到:其实XWindow执行的关键脚本是/etc/X11/Xsession,这个脚本会去/etc/X11/Xsession.d目录里搜索脚本执行,也会去$HOME/下搜索脚本运行,而其它目录xinit、xdm等里面的脚本都会去调用/etc/X11/Xsession这个脚本。所以,如果你想把中文输入法fcitx、SCIM等设置成随Xwindow启动,比如要加入如下脚本:exportLC_CTYPE=zh_CN.GBKexportXMODIFIERS=“@im=fcitx”exportXIM=fcitxexportXIM_PROGRAM=fcitxfcitx那么可以用如下几种方法:1、加到/etc/X11/Xsession。这种方法对所有启动方法都管理。2、在/etc/X11/Xsession.d目录里自己写一个脚本,这种方法也对所有启动方法都管理。3、在$HOME目录下生成.xsession或.Xsession脚本,这种方法也对当前登录用户有效。4、加到/etc/X11/xinit/xinitrc脚本里。这个方法只对xinit方式(即命令行输入startx)管用。5、加到/etc/X11/xdm/xsession脚本里,只对用xdm管理界面登录的方式管用。谢谢大家阅读。
本文档为【Linux系统中Xwindow系统启动脚本分析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
中小学教育资料汇总
暂无简介~
格式:doc
大小:40KB
软件:Word
页数:13
分类:互联网
上传时间:2023-02-24
浏览量:7