Solaris 公用桌面环境: 高级用户和系统管理员指南

第 2 章 配置会话管理器

"会话管理器"负责启动桌面并能够自动保存和恢复运行的应用程序、颜色、字体、鼠标特性、音频音量及键盘击键。

使用"会话管理器",可以:

什么是会话?

会话是在用户的桌面上所给出的应用程序、设置及资源的集合。会话管理是惯例和协议的集合, 该集合使得"会话管理器"可以保存和恢复用户的会话。用户可以登录到系统并可使用与用户注销时所使用的运行应用程序、设置 及资源相同的集合。用户第一次登录到桌面时, 装入缺省的初始会话。然后,"会话管理器"将支持当前和起始会话的概念。

初始会话

当用户第一次登录到桌面时,"会话管理器" 将使用系统缺省值生成该用户的初始会话。 在缺省情况下,将启动"文件管理器"及 "桌面介绍"(帮助卷)。

当前会话

无论是从保存的起始会话、保存的当前会话,还是从系统缺省初始会话所恢复的登录,用户正在运行的会话总是被认为是当前会话。当用户退出会话时, 基于用户的"式样管理器启动"设置,"会话管理器" 会自动保存当前会话。用户下次登录到桌面时,"会话管理器"会重新启动先前保存的当前会话, 即将桌面恢复到与用户上次注销时相同的状态。

起始会话

无论桌面在用户注销时的状态如何,用户每次登录时桌面都可以恢复为相同的状态。 用户可以保存当前会话的状态,然后使用"式样管理器启动"设置, 使"会话管理器"在用户每次登录时启动该会话。

显示专用的会话

要为专用的显示器运行专用的会话,用户可以创建显示专用会话。为此,用户可以将HomeDirectory/.dt/sessions 目录复制到HomeDirectory/.dt/display中, 其中display是实际的、非全名的主机名(例如,pablo:0 是有效的,而pablo.gato.com:0unix:0是无效的)。用户在显示器pablo:0上登录时,"会话管理器" 将启动该显示专用会话。

启动会话

"会话管理器"是通过/usr/dt/bin/Xsession启动的。当用户使用"登录管理器"登录时,在缺省情况下,启动 Xsession

或者,用户也可以使用传统的字符模式 (getty) 登录进行登录,并使用启动 X 服务器的工具,例如xinit,来手动启动"会话管理器"。例如: xinit /usr/dt/bin/Xsession

当会话启动时

"会话管理器"启动时,它通过下列步骤 启动用户的会话:

  1. 查找HomeDirectory/.dtprofile 正文

  2. 查找Xsession.d正文

  3. 显示前言信息

  4. 设置桌面搜索路径

  5. 收集可用的应用程序

  6. 可选HomeDirectory/.profileHomeDirectory/.login

  7. 启动 ToolTalk*消息守护程序

  8. 装入会话资源

  9. 启动颜色服务器

  10. 启动"工作区管理器"

  11. 启动会话应用程序

    以下各节描述上列的各步骤。

查找 .dtprofile 正文

会话一启动,Xsession正文便开始查找用户的HomeDirectory/.dtprofile正文。HomeDirectory/.dtprofile 正文是/bin/sh/bin/ksh 正文,它使用户可以为自己的会话设置环境变量。关于设置环境变量的进一步信息,请参阅"附加的会话启动定制 "

如果HomeDirectory/.dtprofile 正文不存在,例如在用户第一次登录到桌面时,Xsession 将会把桌面缺省的sys.dtprofile复制到 HomeDirectory /.dtprofile中。

桌面缺省值为/usr/dt/config/sys.dtprofile。定制sys.dtprofile正文,需将sys.dtprofile/usr/dt/config复制到/etc/dt/config 中,并编辑新文件。

查找 Xsession.d 正文

查找HomeDirectory/.dtprofile 正文之后,Xsession正文查找Xsession.d 正文。这些正文用来设置附加的环境变量,并为用户的会话启动任选守护程序。缺省的Xsession.d正文为:

0010.dtpaths-将可定制的桌面搜索路径记入文档

0020.dtims-启动任选的输入方法服务器

0030.dttmpdir-创建每个用户、每个会话的临时目录

0040.xmbind-将$XMBINDDIR 设置为桌面缺省值

Xsession.d中还可能另外附有一些供应商专用正文。

Xsession首先查找/etc/dt/config/Xsession.d 目录中的所有文件,然后是 /usr/dt/config/Xsession.d 目录中的所有文件。

桌面缺省的Xsession.d正文位于/usr/dt/config/Xsession.d目录。定制 Xsession.d 正文,需将正文从 /usr/dt/config/Xsession.d复制到 /etc/dt/config/Xsession.d中, 并编辑新文件。必须具有执行许可才能执行该任务 。

同样,要使Xsession自动查找您自己的正文, 需将该正文复制到/etc/dt/config/Xsession.d中。


注意:

修改或创建Xsession.d正文时,要确保发布的任何前台命令只用短暂时间,因为命令所占用的时间将直接影响会话启动时间。如果 前台命令未退出,则会话启动将挂起。如果想要Xsession.d正文中的命令在会话期间继续 运行,它们应该在后台运行。


显示欢迎前言信息

查找HomeDirectory/.dtprofileXsession.d正文之后,Xsession 显示覆盖屏幕的前言 信息。可以定制显示的前言信息,或完全关闭信息。dthello 客户被用来显示 信息。

更改信息文本,可以更改dthello选项,通过修改dtstart_hello[0]变量的方 法 。

更改dtstart_hello[0],需创建设置新值 的/etc/dt/config/Xsession.d正文。要为所有用户显示当日的信息,需创建可执行的 shksh 正文,例如 /etc/dt/config/Xsession.d/myvars,并如下设置dtstart_hello[0]

dtstart_hello[0]="/usr/dt/bin/dthello -file /etc/motd 
&"

用户同样可通过在HomeDirectory/.dtprofile中设置dtstart_hello[0]为他们的会话更改前言信息 。

关闭前言信息,需设置 dtstart_hello[0]=" "。

关于dthello的详细内容,请参阅 dthello 手册页。

设置桌面搜索路径

桌面搜索路径由dtsearchpath在登录时创建。dtsearchpath使用两类环境变量:

输入变量-系统范围的及个人的环境变量, 它们的值由系统管理员或最终用户设置。

输出变量-由dtsearchpath创建并赋值的变量。每个变量的值都是桌面会话的查找路径。

更改dtsearchpath的命令行选项,需修改dtstart_searchpath变量。为所有用户更改dtstart_searchpath 变量,需创建可执行的 shksh 正文(例如 /etc/dt/config/Xsession.d/myvars),并如下设置 dtstart_searchpath

dtstart_searchpath="/usr/dt/bin/dtsearchpath"

用户同样可以只为自己的会话更改dtsearchpath 选项,通过设置 dtstart_searchpath,在HomeDirectory/.dtprofile中。

关于dtsearchpath的进一步信息,请参阅第 9 章,桌面搜索路径。 关于dtsearchpath选项的进一步信息,请参阅 dtsearchpath手册页。

收集可用的应用程序

设置桌面搜索路径后的下一步是使用dtappgather 收集可用的应用程序。更改 dtappgather 的 命令行选项,需修改 dtstart_appgather 变量。 为所有用户更改 dtstart_appgather 变量,需创建可执行的 shksh 正文(例如 /etc/dt/config/Xsession.d/myvars),并如下设置 dtstart_appgather

dtstart_appgather="/usr/dt/bin/dtappgather &"

用户同样可以只为自己的会话更改dtappgather 选项,通过设置 dtstart_appgather,在 HomeDirectory /.dtprofile 中 。

关于dtappgather选项的进一步信息,请参阅 dtappgather(4) 手册 页。

任选地查找 .profile 或 .login 正文

Xsession 能够查找用户的传统 HomeDirectory /.profileHomeDirectory /.login 正文。该能力在缺省时禁用。告知 Xsession 查找.profile.login正文,需将 DTSOURCEPROFILE设置为 true

为所有用户更改DTSOURCEPROFILE,需创建设置新值的 /etc/dt/config/Xsession.d 正文。为所有用户将 DTSOURCEPROFILE 设置为true,需创建可执行的 shksh正文,例如/etc/dt/config/Xsession.d/myvars,并如下 设置DTSOURCEPROFILE

DTSOURCEPROFILE=true

用户同样可以为自己的会话更改DTSOURCEPROFILE,通过将DTSOURCEPROFILE设置为true(在HomeDirectory/.dtprofile中)。

启动 ToolTalk 消息守护程序

ToolTalk 消息守护程序,ttsession,使独立的应用程序可以在彼此之间无直接知识的情况下通信。 应用程序创建并发送 ToolTalk 消息来互相通信。ttsession在网络上通信来传送消息。

更改ttsession的命令行选项,需更改 dtstart_ttsession 变量。为所有用户更改 dtstart_ttsession 变量,需创建可执行的 shksh 正文(例如 /etc/dt/config/Xsession.d/ myvars), 并如下设置 dtstart_ttsession

dtstart_ttsession="/usr/dt/bin/ttsession -s"

用户同样可以为自己的会话更改ttsession选项,通过设置 dtstart_ttsession(在HomeDirectory/.dtprofile 中)。

关于ttsession选项的进一步信息,请参阅 ttsession 手册页。有关 ttsession 的进一步信息,请参阅Common Desktop Environment: ToolTalk Messaging Overview

启动会话管理器客户

此时,Xsession启动/usr/dt/bin/dtsession,使 会话启动进程继续下去。

装入会话资源

"会话管理器"使用 X 服务器的RESOURCE_MANAGER 属性以 使桌面资源可用于所有应用程序。"会话管理器"通过下列方法装入RESOURCE_MANAGER

桌面缺省资源可以在/usr/dt/config/language/sys.resources 中找到。通过RESOURCE_MANAGER 属性将使这些资源可用于每个用户的会话。不应编辑该文件, 因为它会被后续的桌面安装覆盖。

可以通过创建/etc/dt/config/language/sys.resources 增加系统缺省资源。在该文件中,可以为所有桌面用户 覆盖缺省资源或指定附加资源。由于该文件在会话启动过程中合并到桌面缺省资源中, 所以在该文件中只应该放置新的或更新的资源说明。通过RESOURCE_MANAGER 属性,该文件中指定的资源可以用于每个用户的会话。该文件中指定的资源具有高于桌面缺省资源文件中所指定 资源的优先级。

用户可以使用其HomeDirectory/.Xdefaults 文件为自己的会话增加桌面缺省的和系统范围的资源。通过RESOURCE_MANAGER属性,使该文件中指定的资源 可以用于该用户的会话。该文件中指定的资源具有高于桌面缺省资源或系统管理员资源文件中所指定资源的优先级。

用户可以使用其 HomeDirectory/.Xdefaults 文件为自己的会话 增加桌面缺省的和系统范围的资源。通过 RESOURCE_MANAGER 属性,使该文件中指定的资源 可以用于该用户的会话。该文件中指定的资源具有高于 桌面缺省资源或系统管理员资源文件中所指定 资源的优先级。


注意:

"X 工具包内置工具"实用程序指定将从 RESOURCE_MANAGER 或者从 HomeDirectory/.Xdefaults为应用程序装入资源,但是不可同时从二者这样做 。通常,这意味着会忽略用户的 HomeDirectory/.Xdefaults 文件。但是,如上所述,在会话启动时"会话管理器"调整HomeDirectory/.Xdefaults, 通过将HomeDirectory/.Xdefaults 合并到 RESOURCE_MANAGER 中的方法 。如果用户更改 HomeDirectory/.Xdefaults,那麽在用户调用"重新装入资源"动作之前,所做的更改对新的 应用程序是不可见的。"重新装入资源"动作将 构造"会话管理器",以缺省的、系统范围的 及用户指定的资源重新装入 RESOURCE_MANAGER。这样 对系统范围的及个人的资源文件的更改就可用于 应用程序。


关于进一步信息,请参阅:

启动颜色服务器

"会话管理器"用作桌面的颜色服务器并提供下列 dtsession 资源集,这些资源集可用来配置 "会话管理器"。

foregroundColor-控制是否为前景颜色分配 象素

dynamicColor-指定只读颜色是否被分配

shadowPixmaps-指定是否为 顶部阴影或底部阴影分配颜色

colorUse-限制颜色的分配

writeXrdbColors-指定 *background*foreground 资源是否被放置在资源数据库中

通过创建 /etc/dt/config/language/sys.resources, 并在该文件中指定颜色服务器,为所有用户设置 颜色服务器资源。

用户同样也可以通过在 HomeDirectory/.Xdefaults 中指定 颜色服务器资源,为自己的会话设置颜色服务器 资源。

关于设置颜色服务器资源的进一步信息,请参阅 "管理颜色"

启动工作区管理器

"会话管理器"负责启动"工作区管理器"。在缺省情况下, 启动/usr/dt/bin/dtwm。可以使用 wmStartupCommand 资源指定替代窗口服务器。

可以通过创建 /etc/dt/config/language/sys.resources,并为 该文件中的 Dtsession*wmStartupCommand 资源窗口管理器指定全路径名 及选项来为所有用户指定替代窗口管理器。

用户同样也可以通过指定 Dtsession*wmStartupCommand 资源只为自己的会话指定 替代窗口管理器(在 HomeDirectory/.Xdefaults 中)。

关于"窗口管理器"的进一步信息,请参阅 第 16 章,定制工作区管理器

启动会话应用程序

会话一启动,"会话管理器"将重新启动被保存为会话的一部分的 任何应用程序。即将被恢复为用户初始会话一部分的应用程序的 系统缺省集可在 /usr/dt/config/language/sys.session 中找到。不应编辑该文件,这是因为 在后续的桌面安装过程中,被将无条件覆盖。

关于进一步信息,请参阅 dtsessionfile(4) 手册页。

系统管理员可以将 /usr/dt/config/language/sys.session 复制到 /etc/dt/config/language/sys.session 中 ,并修改后文件,这样即可替换作为用户初始会话的一部分而启动的 应用程序集。与资源文件不同,该文件将用作桌面缺省文件的完整替换, 所以可制成系统缺省文件的副本,并作任何必要的 修改。

附加的会话启动定制

本节包括:

设置环境变量

    要设置系统范围的环境变量,请在 /etc/dt/config/Xsession.d 目录中创建用于设置及导出变量的文件。

例如,如果创建可执行的 ksh 正文,/etc/dt/config/Xsession.d/myvars 包含:

	export MYVARIABLE="value"

那麽变量 MYVARIABLE 在下次登录时,将被设置在每个用户的 环境中。

    设置个人环境变量,请在 HomeDirectory/.dtprofile 中设置变量。

例如:

	export MYVARIABLE="value"

在下次登录时,将变量 MYVARIABLE 设置在每个用户的 环境中。


注意:

"会话管理器"不自动读取 .profile.login 文件。但是,它可以配置成能够使用这些文件;请参阅 "任选地查找 .profile 或 .login 正文"


设置资源

    设置系统范围的资源,请将资源添加到文件 /etc/dt/config/language/sys.resources 中。(可能需要创建该文件。)


注意:

.dtprofile 只支持 /bin/sh/bin/ksh 语法。


例如,如果在 /etc/dt/config/C/sys.resources 中指定:

	AnApplication*resource: value

那麽资源 AnApplication*resource 在下次登录时,将被 设置在每个用户的 RESOURCE_MANAGER 属性中。

    设置个人资源,请将资源添加到文件 HomeDirectory/.Xdefaults 中。

设置显示器专用的资源

可为系统上的所有桌面用户设置显示器专用的 资源。同样,用户可设置限于自己的会话的显示器专用 资源。这样就可以根据用户登录到桌面的显示器 来指定资源。

    为系统上的所有桌面用户设置显示器专用的资源, 需创建指定显示器专用资源的文件 /etc/dt/config/language/sys.resources

    设置个人的显示器专用资源,需在 HomeDirectory/.Xdefaults 中指定资源。

    通过将这些资源放入 cpp 条件语句中来定界 它们。 DISPLAY_displayname 宏根据 $DISPLAY 变量的值被定义。这是通过将所有 . (句点)和 : (冒号) 字符转换为 _ (下划线),去掉所有 屏幕说明,最后给结果加上 DISPLAY_ 前缀来 实现的。

    例如,:0$DISPLAY 应为 DISPLAY_0blanco.gato.com:0.0$DISPLAY 应为 DISPLAY_blanco_gato_com_0。结果值可用来作为会话资源文件中的 cpp 测试 的一部分。例如,如果在 /etc/dt/config/C/sys.resources 中指定:

    Myapp*resource: value
    #ifdef DISPLAY_blanco_gato_com_0  
         Myapp*resource: specialvalue1  
         #endif
    #ifdef DISPLAY_pablo_gato_com_0  
         Myapp*resource: specialvalue2  
         #endif

    资源 MyApp*resource 将被设置在 RESOURCE_MANAGERspecialvalue1中,当用户登录到显示器 blanco.gato.com:0 上时 ; 当用户登录到显示器 pablo.gato.com:0; 上时值为 specialvalue2; 当用户登录到另一个显示器上时值为 value

更改初始会话的应用程序

可以指定替代应用程序作为用户的初始会话的一部分而启动。

  1. /usr/dt/config/language/sys.session 复制到 /etc/dt/config/language/sys.session 中。

  2. 修改新的 sys.session 文件。

    sys.session 中的每项都呈现为:

    	dtsmcmd -cmd command_and_options
    

    启动作为用户初始会话的一部分的附加应用程序, 需以全路径名指定新的 sys.session 项。例如, 启动 /usr/bin/X11/xclock 作为用户的初始会话的一部分, 需将 xclock 项添加到 /etc/dt/config/C/sys.session 中:

    #  	
    # Start up xclock...  	
    #  dtsmcmd -cmd "/usr/bin/X11/xclock -digital"

设置显示器专用的会话

用户可设置显示器专用的会话,以便将会话调节 到特定的显示器。

    HomeDirectory/.dt/sessions 目录复制到 HomeDirectory/.dt/display,其中 display 为实际的、非全名的主机 名(pablo:0 是有效的,而 pablo.gato.com:0unix:0 不是)。

例如,要为显示器 pablo.gato.com:0 创建显示器专用的会话过程 :

cp -r HomeDirectory/.dt/sessions HomeDirectory/.dt/pablo:0

用户下次登录到显示器 pablo.gato.com:0 上时, "会话管理器"将启动该显示器专用的会话。

在会话过程启动和注销时执行附加的命令

当用户登录到其桌面会话后,便可指定启动附加 的命令。这对于设置未被"会话管理器"保存的 X 设置是有用的。例如,用户可使用 xsetroot 来定制根(工作区)指针。另一种使用方法 是启动不能被"会话管理器"保存及恢复的 应用程序。如果应用程序在会话恢复时不重新启动,用户就可以使用这种方法重新启动客户。

会话启动时执行附加的命令

    创建包含命令的文件 HomeDirectory/.dt/sessions/sessionetc

该文件通常是正文而且必须具有执行许可。应在后台运行在 sessionetc 中启动的进程。


注意:

不要使用 sessionetc 来启动由"会话管理器"自动 恢复的客户。这样的操作可能造成启动应用程序的多重副本 。也许不能立即看到副本,因为窗口会互相堆叠 。


在注销时执行附加的命令

sessionetc 的伴侣文件为 sessionexit。在会话退出时 使用 sessionexit 来执行一些不是由"会话管理器" 处理的操作。

    创建文件 HomeDirectory/.dt/sessions/sessionexit包含命令 。

类似于 sessionetc,该文件通常是具有执行许可的正文。

从备份恢复会话

当"会话管理器"保存会话时,会话信息被存储在 HomeDirectory/.dt/sessions 目录中,如果使用显示器专用的会话,则存储在 HomeDirectory/.dt/display 目录中。在 这些目录中,"会话管理器"创建名为 currenthome 的子目录来为相应的当前或起始会话存储信息。在会话信息被存储之前,"会话管理器" 以所创建的名称为前会话做备份,并将其存储在 current.oldhome.old 中。

  1. 在登录屏幕中,通过使用"故障保险过程"或"命令行登录",进行 登录。

  2. 将备份会话目录复制到活动名中。例如,要 恢复备份起始会话:

    	cp -r HomeDirectory/.dt/sessions/home.old 
    \  	HomeDirectory/.dt/sessions/home

    显示器专用的会话过程可使用相同方式恢复。

调查会话启动故障

    检查文件 HomeDirectory/.dt/startlog

"会话管理器"在该文件中记录每个用户的会话启动进展。

会话管理器文件及目录