Solaris桌面登录详解
随着Solaris10X86版本的推出以及OpenSolaris社区的不断壮大,越来越多的人尝试着使用Solaris,
更有很多爱好者把Solaris做为日常的桌面系统来使用。而在使用Solaris作为桌面系统时,我们第一个
要接触的就是桌面登录系统,本文将从Solaris桌面系统的登录的流程,主要程序,各种配置文件以及
登录发生错误时如何来定位这些问题来做些阐述。
一.桌面登录管理程序Dtlogin
Solaris采用CDE(CommonDesktopEnvironment)桌面系统中的登录管理程序dtlogin来管理桌面系
统的登录。dtlogin是一个守护进程,当其启动后,会产生一个主dtlogin进程,这个进程将负责:
监听远程登录请求;
为本地机器上的每一个显示(DISPLAY)启动Xrver和一个dtlogin子程序来进行登录管理。
而每一个显示上的dtlogin子进程将负责:
启动进程dtgreet来显示图形登录界面;
等待用户输入用户名/密码后进行验证,验证成功后启动相应的桌面进程;
等待直到桌面进程退出,然后子dtlogin也退出把控制权交还给dtlogin主程序进行下一次的登录循环。
通过查看这些进程的继承关系,我们可以对dtlogin运行流程有个清晰的认识,下面将分四种情况来
查看dtlogin的进程依赖关系,从而更好的理解dtlogin是如何工作的。
当系统启动后,图形登录界面出现时,此时系统中的dtlogin进程树关系为:
#ptreepgrepdtlogin
646/usr/dt/bin/dtlogin-daemon
647/usr/openwin/bin/fbconsole-n-d:0
648/usr/openwin/bin/Xsun:0-defdepth24-nobanner-auth/var/dt/A:0-RCaWq
681/usr/dt/bin/dtlogin-daemon
837dtgreet-display:0
从以上的进程树输出可以看出,主dtlogin程序首先启动了fbconsole,这个进程用来将/dev/console
的输出重定向到Xrver中的console窗口;然后dtlogin根据Xrver的配置文件
(/usr/dt/config/Xrvers或/etc/dt/config/Xrvers)启动相应的Xrver进程,这里我们启动了Xsun;紧接着
主dtlogin创建了一个子dtlogin进程,这个进程用来管理在显示0上的登录程序,然后其启动了
dtgreet这个进程来显示出我们日常见到的登录界面。
2.当我们登录系统后,dtgreet就退出然后启动了相应的桌面程序,进程树的变化如下:
#ptreepgrepdtlogin
646/usr/dt/bin/dtlogin-daemon
647/usr/openwin/bin/fbconsole-n-d:0
648/usr/openwin/bin/Xsun:0-defdepth24-nobanner-auth/var/dt/A:0-RCaWq
681/usr/dt/bin/dtlogin-daemon
954/bin/ksh/usr/dt/bin/Xssion
993sh/usr/bin/swupnot-wait
1137sleep1
1019/usr/dt/bin/sdt_shell-cuntDT;DISPLAY=:0;/u
1022-bash-cuntDT;DISPLAY=:0;/usr/dt/bin/dt
1038/bin/ksh/usr/dt/config/
1040/usr/bin/gnome-ssion
1044/usr/bin/ssh-agent--/usr/bin/dbus-launch–exit-with-ss
从以上输出可以看出,子dtlogin管理了显示0之后的桌面登录流程,当用户认证成功后,dtgreet
就退出了,子dtlogin紧接着启动了脚本程序/usr/dt/bin/Xssion,在这个脚本里,将根据用户选择的桌面
类型(CDE或JDS)来启动相应的脚本,从以上输出可以看到这里我们启动了JDS桌面,从而调用了
脚本,这个脚本里直接启动了JDS的桌面管理程序gnome-ssion,从而我们会看到熟悉的
JDS桌面环境。注:当用户是第一次登录桌面系统,而且没有指定相应的桌面类型时,子dtlogin将不
会调用脚本文件Xssion,而是调用其他程序来让用户指定桌面类型从而启动相应的桌面程序。
3.当用户退出桌面系统后,进程树的变化为:
#ptreepgrepdtlogin
646/usr/dt/bin/dtlogin-daemon
647/usr/openwin/bin/fbconsole-n-d:0
1514/usr/openwin/bin/Xsun:0-defdepth24-nobanner-auth/var/dt/A:0-RCaWq
1548/usr/dt/bin/dtlogin-daemon
1559dtgreet-display:0
当用户从桌面中退出后,我们会又一次看到登录界面,但我们从上面的进程树的情况可以看到,这
里,当我们从桌面退出后,Xrver和子dtlogin也相应退出,主dtlogin就会重新创建新的Xrver和
新的子dtlogin进程来进行下一次的桌面登录管理,从而进行新的一次登录循环
4.有XDMCP请求下的进程树情况:
#ptreepgrepdtlogin
646/usr/dt/bin/dtlogin-daemon
14245/usr/openwin/bin/fbconsole-n-d:0
14300/usr/openwin/bin/Xsun:0-defdepth24-nobanner-auth/var/dt/A:0-RCaWq
14324/usr/dt/bin/dtlogin-daemon
14342/bin/ksh/usr/dt/bin/Xssion
14405/usr/dt/bin/sdt_shell-cuntDT;DISPLAY=:0;/u
14407-bash-cuntDT;DISPLAY=:0;/usr/dt/bin/dt
14423/bin/ksh/usr/dt/config/
14425/usr/bin/gnome-ssion
14429/usr/bin/ssh-agent--/usr/bin/dbus-launch--exit-with-ss
7918/usr/dt/bin/dtlogin-daemon
7948/bin/ksh/usr/dt/bin/Xssion
7986sh/usr/bin/swupnot-wait
7992sleep20
8012/usr/dt/bin/sdt_shell-cuntDT;DISPLAY=dhcp-215-212:
8015-bash-cuntDT;DISPLAY=dhcp-215-212:0;/usr
8031/bin/ksh/usr/dt/config/
8033/usr/bin/gnome-ssion
8037/usr/bin/ssh-agent--/usr/bin/dbus-launch--exit-with-ss
以上的情况是当有远程系统通过XDMCP(XDisplayManagerControlProtocol)协议来登录时,主
dtlogin会起一个子dtlogin来处理相应的登录事项,但注意此时不需要为远程机器启动Xrver,因为
远程机器上会有自己的Xrver,然后子dtlogin根据相应的显示(这里是DISPLAY=dhcp-215-212:0)
来做相应的图形登录管理。
从以上四种情况可以看出,dtlogin做为图形登录管理守护进程,将会为每一个显示(DISPLAY)
来启动一个子dtlogin来管理桌面登录,而对每个本地的显示还将启动相应的Xrver,在整个桌面登录
的生命周期里,子dtlogin将一直负责后台的工作,所以,要对Solaris的登录系统有所了解,就需要对
dtlogin有更深入的了解,下面我们就从dtlogin的管理,配置来进行进一步的阐述。
二.dtlogin的管理
从以上的介绍可以看出,dtlogin是整个桌面登录的关键程序,我们需要对如何进行dtlogin管理有
个很好的认识,尤其是在Solaris10中,由于SMF(ServiceManagementFacility)框架的引入,对dtlogin
的管理方法上有所变化,具体如下列所示:
1.允许/禁止dtlogin守护进程
我们可以用脚本文件dtconfig来允许/禁止dtlogin,如下命令:
/usr/dt/bin/dtconfig-e
/usr/dt/bin/dtconfig-d
其中dtconfig是一个脚本文件,以上的命令在Solaris10和以前的Solaris版本中是一样的,只不
过在具体实现上,Solaris10的dtconfig中采用了SMF的命令。
2,启动/停止dtlogin进程
而对于启动/停止dtlogin守护进程,还是有不小的区别,对于Solaris9或之前的版本,采用传统
的停止守护进程的方式即可:
/etc/init.d/dtloginstart
/etc/init.d/dtloginstop
对于Solaris10,我们要采用SMF的命令来做:
/usr/sbin/svcadmenable-tsvc:/application/graphical-login/cde-login:default
为了简单起见,以上的命令可以简写为
/usr/sbin/svcadmenable-tcde-login
/usr/sbin/svcadmdisable-tcde-login
n的启动参数
dtlogin启动是可以带一些参数来进行定制化,比如我们想打印出dtlogin的调试信息来分析时,
就需要加相应的参数,设置dtlogin的启动参数在不同的Solaris版本中也是不一样的,这里我们以打开
调试选项作为例子来做说明:
在Solaris9或之前的版本,如果需要把dtlogin的调试开关打开并将调试信息输出到文件中去,需
要编辑文件/etc/init.d/dtlogin,把其中一行
/usr/dt/bin/dtlogin-daemon&
修改为
/usr/dt/bin/dtlogin-daemon-debug16>/tmp/2>&1&
而在Solaris10中,我们就不能直接改文件了,需要用SMF的命令来配置dtlogin这个服务的属
性来得到调试日志,具体步骤如下:
#svccfg
#svc:>lectapplication/graphical-login/cde-login
#svc:/application/graphical-login/cde-login>tpropdtlogin/debug_level="16"
#svc:/application/graphical-login/cde-login>tpropdtlogin/debug_log="/tmp/"
#svc:/application/graphical-login/cde-login>exit
三.Dtlogin的资源文件
Dtlogin的整个运行中,牵扯到很多的资源文件,缺省状态下,这些资源文件全部放在/usr/dt/config
目录下,其中重要的资源文件有:
Xconfig:指定dtlogin的其他配置文件和缺省配置
Xaccess:dtlogin用这个文件来进行远程XDMCP请求的控制
Xrvers:列出需要启动Xrver的显示列表和Xrver启动选项
Xresources:包含在登录界面显示的各个资源定义
Xtup:在显示登录界面前运行的一个脚本,主要是为相应的locale添加字体资源
Xstartup:在用户身份认证成功后执行的脚本
Xret:当用户从桌面登出时运行的脚本
以上这些资源配置文件可以进行定制化,可以把定制后的文件放在目录/etc/dt/config下面,这样我
们就有了自己的配置选项,具体的资源文件以及各个文件包含的配置选项可以参见dtlogin(1X)帮助文
件,帮助中对这些资源文件和配置进行了很详细的解释。
四.桌面登录程序的日志文件
r的日志文件
当Xrver发生错误时,它会将错误信息放在/var/dt/Xerrors中,当登录或图形显示失败时,我们
可以查看这个文件来确定Xrver是否发生错误。
n调试信息
通过用前一章节介绍的方法来开启dtlogin的调试选项,我们可以得到dtlogin的调试信息。
og和errlog
我们知道,当用户身份验证成功后,dtlogin将调用脚本文件/usr/dt/bin/Xssion来启动相应的桌面
环境,而Xssion的运行情况也将被记录下来,我们可以在下列文件中找到Xssion的日志
$HOME/.dt/startlog
$HOME/.dt/
$HOME/.dt/
其中startlog是最近一次登录的日志,而其他两个是上一次和两次登录的日志,从这里我们可以查
看到具体的桌面启动过程,一个成功的登录后,这个日志文件内容常为:
---/usr/dt/bin/Xssionstarting...
---starting/bin/true
---Xssionstartedbyctrun
---ttingfontpath...
---starting/usr/dt/bin/dtssion_res-load-system
---sourcing//.dtprofile...
---sourcing/usr/dt/config/Xssion.d/s...
---sourcing/usr/dt/config/Xssion.d/...
---sourcing/usr/dt/config/Xssion.d/...
---sourcing/usr/dt/config/Xssion.d/ir...
---sourcing/usr/dt/config/Xssion.d/...
---starting/usr/dt/bin/dtarchpath
---starting/usr/dt/bin/dtappgather&
---starting/usr/dt/bin/dsdm&
---ssionlogfileis/dev/null
---DTSOURCEPROFILEistrue(e//.dtprofile)
---execing/usr/dt/config/ha/sbin/shloginshell...
---startingdesktopon/dev/pts/1
4.桌面进程管理程序日志文件
从第一节我们知道,Xssion运行完后,最终将运行桌面的程序管理程序,即dtssion(CDE)或
gnome-ssion(JDS),缺省状况下,这些程序将日志文件输出到/dev/null,需要手工打开日志开关,如下:
编辑$HOME/.dtprofile并删除行
exportdtstart_ssionlogfile="/dev/null"
这样,我们就可以在$HOME/.dt/ssionlogs/目录中找到相应的日志文件.
五.常见错误和解决方法
有时候我们在图形登录的时候会遇到问题,下面我们就可能发生的情况做些具体分析:
1.当系统启动后不能进入图形界面时,我们可以做以下分析:
A.查看dtlogin这个进程是否存在,如果不存在,先要尝试重起这个服务,具体方法前面的章节
有介绍,如果重起dtlogin服务失败后,我们就需要打开dtlogin的调试开关,从dtlogin的调试日志中
去查找原因。
B.当dtlogin这个进程存在,但屏幕闪烁几次后退到console登录的状态,很可能是Xrver启
动时发生了问题,需要我们查看日志文件/var/dt/Xerrors以确保Xrver能正常启动。
2.输入用户名,密码,认证成功后不能进入桌面系统
当用户身份认证成功后,如果不能进入桌面系统而退回到登录界面,我们需要查看:
A.首先我们要排除在用户上的一些限制的错误,可能的错误有:
用户的额定磁盘空间已经满了
用户对$HOME/.TTauthority有没有读/写权限
用户配置的.profile或其他的在login执行的文件写法有误
B.需要查看Xssion的运行日志startlog以确认Xssion运行正常
C.查看桌面进程管理程序的日志来看看是否有在运行桌面程序管理器时发生了什么问题
D.如果是登录CDE桌面,一些登录的问题会牵扯到进程ttssion(tooltalkssionmanager),这个
进程是用来在各个CDE应用程序间进行消息传递,这个程序的一部分错误信息会写在/var/adm/messages
下,所以在这种情况下,我们要综合/var/adm/messages,/var/dt/Xerrors以及$HOME/.dt/startlog来判断是
否是ttssion的问题。
3.不能退出桌面环境
如果我们不能正常退出桌面环境时,我们需要查看一下ttssion这个进程是否还存活,因为退出
桌面这个命令是需要ttssion传达到桌面进程管理程序dtssion的。
4.远程图形登录不能成功
当我们从远程用Xmanager或从另一台Solaris/Linux机器来图形登录Solaris服务器失败时,需要
我们检查以下设置:
s服务器上的dtlogin主进程是否存在,因为dtlogin是提供XDMCP服务的程序,当
dtlogin这个服务没有被允许或运行,我们需要手工的启动这个服务。
B.如果dtlogin这个服务运行正常,是否我们对远程图形登录做了限制,我们就需要检查配置文
件Xaccess来看看是否允许XDMCP请求。
六.参考文档:
sCommonDesktopEnvironment:AdvancedUrsandSystemAdministratorsGuide
n(1X)帮助
本文发布于:2023-03-14 20:09:33,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678795774251675.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:桌面进程.doc
本文 PDF 下载地址:桌面进程.pdf
留言与评论(共有 0 条评论) |