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

第 15 章 高级前面板定制

用户可以使用其弹出式菜单和在子面板中的"安装图标"控制,定制"前面板"。

本章介绍通过创建和编辑配置文件来定制"前面板"的内容。

前面板配置文件

"前面板"定义在配置文件的数据库中。

配置文件提供定制"前面板"的方法。某些修改只有通过编辑配置文件才可完成。 其中包括:

要在配置面板时提供最大的灵活性,这些文件可以是个人的、系统范围的或位于其他系统上。

"前面板"由"工作区管理器"创建和管理。

缺省的前面板配置文件

缺省的"前面板"定义在"前面板"配置文件 /usr/dt/appconfig/types/language /dtwm.fp 中。

请勿更改此文件。

前面板配置文件的查找路径

"前面板"定义可以在任意数目的位于本地或在远程系统上的文件中分发。

用于定义"前面板"的文件必须符合这些要求:

缺省的操作数据库查找路径包含这些目录,按下面的次序搜索:

个人的定制-HomeDirectory/.dt/types

系统范围的定制-/etc/dt/appconfig/types/language

内置的面板和控制-/usr/dt/appconfig/types/language

附加的目录,HomeDirectory/.dt/types/fp_dynamic,用于使用用户接口进行的个人定制。 请勿使用此目录进行手动定制。

操作数据库查找路径可能包含添加到配置联网系统的附加目录。尤其是,在配置系统访问应用程序服务器时,添加附加远程位置。有关详细信息,请参见"数据库 (操作/数据类型) 查找路径"

如何装配前面板:优先级规则

"前面板"从所有位于操作数据库的查找路径的配置文件装配。

如果定义中的组件之间有冲突,由优先级规则决定使用哪一个定义。在下面的情况下,两个组件冲突:

"前面板"使用下面的优先级规则:

动态创建的前面板文件

用户使用"安装图标"控制和弹出式菜单定制"前面板"时,文件被写到目录 HomeDirectory /.dt/types/fp_dynamic 中。

"前面板"创建一个附加文件 HomeDirectory /.dt/sessions/dtwmfp.session,它用于保存和恢复每个会话的定制的"前面板"状态。

管理用户接口定制

用户可使用"前面板"控制的弹出式菜单和"安装图标"控制来广泛地定制"前面板"。

此节描述如何进行:

防止个人的定制

  1. 如果控制是内置控制,将它的定义从 /usr/dt/appconfig/types/language /dtwm.fp 复制到 /etc/dt/appconfig/types/language/name.fp 中。

  2. 在控制的定义中添加下行:

    	LOCKED   True

恢复被删除的控制或子面板

在 Desktop_Tools 应用程序组中"恢复前面板"操作删除所有通过用户接口进行的"前面板"定制。 用户可使用此操作删除其所有通过"前面板"弹出式菜单进行的个人定制。

使用下面的过程恢复个人控制。

    HomeDirectory /.dt/types/fp_dynamic目录中,删除用户删除控制时创建的文件。控制将与删除的原始控制同名。

例如,如果用户删除了"图标编辑器"控制,在 fp_dynamic 目录中的一个文件将包含:

	CONTROL IconEditor
{
		...
   	DELETE   True
	}

用户删除子面板时,将为子面板和子面板中的每个控制创建单独的动态文件。

前面板定义的结构

"前面板"通过装配其组件定义而创建。每个组件都有必需的语法。该语法定义了组件在"前面板"中的放置位置、其外观和性能。

"前面板"组件

图形 15-1 前面板组件

Graphic

"前面板"从外向内装配:

前面板定义的一般语法

"前面板"中的每个组件是使用下面的语法分别定义的:

 COMPONENT name{
   KEYWORD       value
   KEYWORD       value
   ...
 }

一些关键字是必需的,另一些只供选用。有关详细信息,请参见 dtfpfile(4X) 的手册页。

PANEL 定义

PANEL 是顶层组件。它的定义包括:

BOX 定义

BOX 定义描述:

CONTROL 定义

CONTROL 定义描述了:

SUBPANEL 定义

SUBPANEL 定义描述了:

SWITCH 定义

SWITCH 定义描述:

修改主面板

"主面板"是"前面板"窗口,不包括子面板。

图形 15-2 "主面板"容器

Graphic

可进行的修改包括:

向主面板添加控制

  1. 创建"前面板"配置文件:

    • 系统范围:/etc/dt/appconfig/types/language /*.fp

    • 个人:HomeDirectory /.dt/types/*.fp

  2. 在文件中定义控制。

    使用 CONTAINER_NAMECONTAINER_TYPE 字段指定控制的容器:

    CONTAINER_NAME  Top  	
     CONTAINER_TYPE  BOX

    使用 POSITION_HINTS 来指定控制从左到右的位置。因为定制具有高于内置控制的优先级,新的控制将"碰撞"现有控制,使其向右移动一个位置。

  3. 保存配置文件。

  4. 创建"前面板"控制的图标。

    请参见"指定控制所用的图标"

  5. 从"工作区"菜单中选择"重启工作区管理器"。

    例如,在文件 /etc/dt/appconfig/types/language/audio.fp 中的下面控制定义在"时钟"和"日历"之间插入音频应用程序控制。

    CONTROL AudioApplication
      {
       TYPE             icon
       CONTAINER_NAME   Top
       CONTAINER_TYPE   BOX
       ICON             AudioApp
       POSITION_HINTS   2
       PUSH_ACTION      StartAudioApplication
       PUSH_RECALL      true
      } 

删除控制

  1. 创建"前面板"配置文件:

    • 系统范围:/etc/dt/appconfig/types/language/name .fp

    • 个人:HomeDirectory /.dt/types/name .fp

  2. 将想要删除的控制的定义复制到新文件中。

    如果控制是内置的,则其定义在 /usr/dt/appconfig/types/language/dtwm.fp 中。

    不必复制整个定义。然而,复制部分必须包括 CONTAINER_NAMECONTAINER_TYPE 字段。

  3. DELETE 字段添加到定义中:

    	DELETE			True
  4. 保存配置文件

  5. 从"工作区"菜单中选择"重启工作区管理器"。

    例如,在文件 /etc/dt/appconfig/types/language/TrashCan.fp 中放置的下面控制定义从"前面板"中删除"垃圾篓" 控制。

    CONTROL Trash  
      {
       CONTAINER_NAME  Top
       CONTAINER_TYPE  BOX
       DELETE          True
      } 

修改控制

需要修改控制定义时-例如,更改它的图标图像,请使用此过程。

  1. /usr/dt/appconfig/types/language/dtwm.fp 复制全部控制定义:

    • 系统范围:/etc/dt/appconfig/types/language/name.fp

    • 个人:HomeDirectory /.dt/types/name.fp.

  2. 编辑想要更改的字段。也可添加附加的字段。

  3. 保存文件

  4. 从"工作区"菜单中选择"重启工作区管理器"。

交换控制的位置

  1. 复制要将位置从 /usr/dt/appconfig/types/language/dtwm.fp 变为下面位置的控制的控制定义:

    • 系统范围:/etc/dt/appconfig/types/language/name .fp

    • 个人:HomeDirectory /.dt/types/name.fp.

      必须复制每个要移动的控制的整个控制定义。

  2. 交换控制定义 POSITION_HINTS 字段的值。

  3. 保存文件

  4. 从"工作区"菜单中选择"重启工作区管理器"。

    例如,放置在文件 /etc/dt/appconfig/types/C/MailHelp.fp 中的下面的定义交换了"邮件"和"帮助管理器"控制的位置,并锁定这些控制,以防个人更改。

    CONTROL Mail
     {
     	POSITION_HINTS					12
     	LOCKED							True
     	...the rest of the control definition
     }
     
    CONTROL Help
     {
     	POSITION_HINTS					5
     	LOCKED							True
     	...the rest of the control definition
     }

替换前面板控制

    创建另一个控制定义,用相同的:

指定控制所用的图标

控制定义的 ICON 字段定义了用于控制的图标图像。

ICON 字段的值可以是:

创建和修改子面板

用户可使用"前面板"弹出式菜单创建和修改子面板。

此节讨论如何提供系统范围的定制,这就需要修改"前面板"配置文件。

子面板被"附加"到"主面板"的控制中。

图形 15-3 子面板的容器是附加到容器的控制

Graphic

附加在子面板定义中完成。CONTAINER_NAME 字段指定子面板附加到的控制:

CONTROL control_name
 {
    ...
 }

 SUBPANEL subpanel_name
 {
 	CONTAINER_NAME 					control_name
 	...
 }

创建系统范围的新子面板

  1. 在想要附加子面板的主面板中定位控制的 control_name

    如果控制是内置控制之一,它的定义在 /usr/dt/appconfig/types/language /dtwm.fp 中。

  2. 创建新文件 /etc/dt/appconfig/types/language /*.fp

  3. 定义子面板:

    	SUBPANEL subpanel_name
     	{
     		CONTAINER_NAME			control_name
     		TITLE						value
     		KEYWORD				value
     		...
     	}
  4. 保存新的配置文件。

  5. 从"工作区"菜单中选择"重启工作区管理器"。

定制内置子面板

可修改内置子面板的一般特性 (如标题之类) 和内容。

修改内置子面板的一般特性

  1. 创建新的"前面板"配置文件:

    • 系统范围:/etc/dt/appconfig/types/language/name .fp

    • 个人:HomeDirectory /.dt/types/name.fp.

  2. 将整个缺省 SUBPANEL 定义从 /usr/dt/appconfig/types/language/dtwm.fp 复制到新的文件:

    ^ISUBPANEL   subpanel_name
     	{
      	 ...
     	}
  3. 修改子面板定义。

  4. 保存新的配置文件。

  5. 从"工作区"菜单中选择"重启工作区管理器"。

    例如,放置在文件 /users/janice/.dt/types/PerApps.fp 中的下面的定义, 会更改"个人应用程序"子面板的名称:

    SUBPANEL PersAppsSubpanel
     {
     	CONTAINER_NAME					TextEditor
     	TITLE								Janice's Applications
     }

向内置子面板添加系统范围的控制

  1. 创建"前面板"配置文件 /etc/dt/appconfig/types/language/name.fp.

  2. 在文件中定义系统范围的控制。

    使用 CONTAINER_NAMECONTAINER_TYPE 字段指定控制的容器:

    	CONTROL control_name
     	{
     		CONTAINER_NAME					subpanel_name
     		CONTAINER_TYPE					SUBPANEL
     		...
     	}

    请参见 "定义前面板控制"

  3. 保存配置文件。

  4. 从"工作区"菜单中选择"重启工作区管理器"。

    例如,在新文件 /etc/dt/appconfig/types/language /DigitalClock.fp 中定义的下面的控制,向所有用户的"个人应用程序"子面板添加了 DigitalClock (在 Desktop_Tools 应用程序组中)。

    CONTROL DigitalClockControl
     {
     	TYPE						icon
     	CONTAINER_NAME			PerAppsSubpanel
     	CONTAINER_TYPE			SUBPANEL
     	ICON						Dtdgclk
     	PUSH_ACTION				DigitalClock
     	PUSH_RECALL				True
     }

从内置子面板中删除控制

    使用与删除"主面板"控制相同的过程。请参见"删除控制"

删除安装图标控制

    在子面板定义中添加下面的字段:

 	CONTROL_INSTALL	False

更改子面板的自动关闭性能

用户选择控制时,除非用户从子面板的原始位置将其移动,否则子面板的缺省性能是关闭。

可配置"前面板"以保持子面板的打开状态,直到用户明确地关闭它们。

  1. 在下面的位置创建新的"前面板"配置文件:

    • 系统范围:/etc/dt/appconfig/types/language /*.fp

    • 个人:HomeDirectory /.dt/types/*.fp

  2. 将缺省的 PANEL 定义从 /usr/dt/appconfig/types/language/dtwm.fp 复制到新的文件:

    	PANEL FrontPanel
     	{
     	  ...
     	}
  3. PANEL 定义中添加下列字段:

    	SUBPANEL_UNPOST    False
  4. 保存新的配置文件。

  5. 从"工作区"菜单中选择"重启工作区管理器"。

定义前面板控制

用户可通过在"安装图标"控制上拉放图标来创建个人控制。

虽然这样可提供简捷的可定制性,但所提供的功能却是"前面板"控制的功能的子集。例如,使用"安装图标"控制所创建的控制无法:

前面板控制的定义

"前面板"控制定义的结构是:

CONTROL control_name
 {
   TYPE            control_type
   CONTAINER_NAME  value
   CONTAINER_TYPE  value
   other fields defining appearance and behavior}

控制类型

在控制定义中的 TYPE 字段指定了控制的基本性能。

控制 TYPE

控制性能

图标 (缺省的)

用户单击控制或在其上拉放文件时,它将运行指定的操作。

空格

用于调整控制间距的占位符。

忙灯。调用操作时,该控制闪烁 (切换图像)

客户机

"前面板"中的客户机窗口。

时钟

时钟。

日期

显示当前日期。

文件

代表文件。选择控制将运行该文件的缺省操作。

创建新控制

本节描述定义控制的一般步骤,以及如何创建各种类型的控制。

  1. 如果控制有一个 PUSH_ACTION 和/或 DROP_ACTION,则创建操作定义。这些是在用户单击控制或在其上拉放文件时运行的操作。

  2. 创建控制的图标图像文件。

    有关图标大小、名称和位置的信息,请参见"图标图像文件"

  3. 在下面的位置创建新的"前面板"配置文件:

    • 系统范围:/etc/dt/appconfig/types/language /*.fp

    • 个人:HomeDirectory /.dt/types/*.fp

  4. 在文件中添加控制定义。

  5. 保存文件。

  6. 从"工作区"菜单中选择"重启工作区管理器"。

创建被单击时运行操作的控制

使用下面的字段定义控制的性能:

创建打开文件的控制

使用下面的字段定义控制的性能:

创建作为拉放区的控制

当用户将一个文件拉放在控制上时,使用 DROP_ACTION 字段来指定运行的操作。操作必须能够接收文件变量。

常常,控制定义包括一个 PUSH_ACTION 字段和 DROP_ACTION 字段。对于按下和拉放操作可使用相同的操作。

例如,下面的位于"个人应用程序"子面板的控制运行 X 客户 xwud,它带有一个文件变量。

CONTROL Run_xwud
 {
 	CONTAINER_NAME				PerAppsSubpanel
 	CONTAINER_TYPE				SUBPANEL
 	POSITION_HINTS				2
 	ICON							XwudImage
 	PUSH_ACTION					RunXwud
 	DROP_ACTION					RunXwud
 }

创建监视文件的控制

使用下面的字段定义控制的性能:

创建单一实例 (切换) 控制

单一实例控制检查由 PUSH_ACTION 启动的进程是否已在运行。如果该进程没有运行,则运行 PUSH_ACTION。如果该进程已在运行, 则将窗口移动到当前工作区窗口 stack (栈) 的顶部。

使用下面的字段定义控制的性能:

创建客户机窗口控制

客户机窗口控制是嵌入"前面板"中的应用程序窗口。例如,通过创建 xload 客户机窗口控制,可将系统负荷监测器放置在"前面板"中。

  1. 定义控制。

    使用下面的字段定义控制的性能:

    • TYPE:设置为客户机

    • CLIENT_NAME:指定要启动的客户机。

      CLIENT_NAME 的值必须与应用程序顶层窗口上的 WM_CLASS 特性中的第一个字符串 (res_name) 相匹配。有关详细信息,请参见 xprop(1) 手册页。

    • CLIENT_GEOMETRY:以像素为单位指定客户机"前面板"窗口所需的大小。

      xwininfo(1) 手册页描述如何找出以像素为单位的窗口的大小。

  2. 从"工作区"菜单中选择"重启工作区管理器"。

  3. 从终端仿真器的命令行启动客户机。

    例如,下面的控制显示了 30 乘 20 像素的负荷监测器。

    CONTROL LoadMeter  
      {  	
       TYPE		client  	
       CONTAINER_NAME				Top  
       CONTAINER_TYPE				BOX  	
       CLIENT_NAME					xload  	
       CLIENT_GEOMETRY			30x20
      }  

    如果未在会话之间保存和恢复客户机,您可能想配置控制,以便当用户单击它时启动客户机。例如,可以通过向定义添加下面的行,来配置"负荷监测器"控制,以便启动 xload

     PUSH_ACTION				StartXload

    并创建操作:

    ACTION StartXload  
      {  	
       WINDOW_TYPE				NO_STDIO  	
       EXEC_STRING				/usr/contrib/bin/X11/xload
      }

启动动画控制

可附加动画序列,它将在用户选中控制或在其上拉放对象时使用。

为了具有动画序列,控制必须:

  1. 使用 ANIMATION 组件指定动画序列:

    ANIMATION animation_name
     	  {  
    		ANIMATION	icon1				[milisecond_delay]  
    		ANIMATION	icon1				[milisecond_delay]
     		...
     	}

    其中 icon1、icon 2 等等为图标的名称,而 milisecond_delay 是动画图标之间的以毫秒为单位的时间延迟。缺省的时间延迟为二百毫秒。

  2. PUSH_ANIMATION 和/或 DROP_ANIMATION 字段添加到控制定义中。该值是 ANIMATION 序列的名称。

    例如,下面的行激励了启动 BestEditor 应用程序的控制。图标间的时间延迟为三百毫秒。该实例假定已创建了图标文件框架 1框架 2 等等。

    CONTROL BestEditor
     {
     	...
     	PUSH_ANIMATION BestEdAnimation
     	...
     }
     ANIMATION BestEdAnimation
     {
     	frame1			300
     	frame2
     	...
     }

提供前面板控制的针对项帮助

有两种提供控制帮助的方法:

定制工作区切换

有几种定制工作区切换的方法:

更改工作区的缺省数目

    修改下面的"工作区管理器"资源:

 	Dtwm*workspaceCount:						n

有关详细信息,请参见"更改系统范围基础上的工作区数目".

更改切换的行数

    修改 SWITCH 定义的 NUMBER_OF_ROWS 字段。

例如,下面的定义定义了三行切换。

SWITCH Switch  
  {  	
   CONTAINER_NAME				box_name
    NUMBER_OF_ROWS				3    
  ...
  }

更改或添加工作区切换中的控制

  1. 用控制定义创建"前面板"配置文件。

    • 指定该控制在切换内部:

      CONTAINER_NAME   Switch  		
         CONTAINER_TYPE   SWITCH
    • 指定在切换中的位置:

      		POSITION_HINTS    n
      

      其中 n 为整数。位置按从左到右、从上到下进行顺序编号。(对于缺省的两行切换,位置是从 1 到 4。)

  2. 创建控制的图标。推荐的大小为 16 乘 16 像素。

    例如,下面的控制在切换中放置了"终端"控制。

    CONTROL SwitchTerminal 
      { 	
    		TYPE			icon 
    		CONTAINER_NAME				Switch 	
       	CONTAINER_TYPE				SWITCH 	
       	POSITION_HINTS				3 	
       	ICON			Fpterm 	
       	LABEL			Terminal 
       	PUSH_ACTION					Dtterm 	
       	HELP_TOPIC					FPOnItemTerm 	
       	HELP_VOLUME					FPanel 
      }

    该控制使用内置图标及与"终端"控制使用相同的帮助主题,该终端控制存在于"个人应用程序"子面板中。

一般的前面板配置

"前面板"的 PANEL 语法使您可以:

一般步骤

  1. /etc/dt/appconfig/types/languageHomeDirectory/.dt/types 中创建新的"前面板"配置文件。

  2. 将缺省的 PANEL 描述从 /usr/dt/appconfig/types/language /dtwm.fp 复制到新文件中。

  3. 编辑 PANEL 描述。

    新的 PANEL 描述具有高于缺省描述的优先级。

更改缺省的前面板位置

    使用 PANEL 定义中的 PANEL_GEOMETRY 字段来指定位置。

例如,下面的面板在右上角。

PANEL SpecialFrontPanel  	
  {   	 
   PANEL_GEOMETRY      -1+1   	  
   ...
  }  	

在主面板中标记控制

  1. PANEL 定义中添加下列行:

     DISPLAY_CONTROL_LABELS   True
  2. 对每个控制添加 LABEL 字段。

    如果未指定 LABEL,则使用 control_name

更改控制的单击性能

    使用 PANEL 定义中的 CONTROL_BEHAVIOR 字段来指定用户如何运行控制的 PUSH_ACTION。该字段值是:

    单击-用户单击控制来运行 PUSH_ACTION

    双击-用户双击控制来运行 PUSH_ACTION

创建全新的前面板

要进行大量更改时,可能会首选创建新的"前面板"。

为了防止与内置的"前面板"组件冲突,一个全新的"前面板"应该对 PANEL 和其他容器使用新的名称。

  1. 为新的"前面板"创建 PANEL 组件。给它一个唯一的名称:

    PANEL front_panel_name
     	{
     	   ...
     	}
  2. 用新的容器名称创建新的框和控制。

    如果使用现有的组件,必须复制它们的定义并更改 CONTAINER_NAME 值。

  3. 从"工作区"菜单中选择"重启工作区管理器"。

创建具有三行的个人前面板实例

下面的实例更改了缺省的"前面板",以便将它的控制组织到三行中。

  1. /usr/dt/appconfig/types/language/dtwm.fp 复制到 HomeDirectory/.dt/types/MyFrontPanel.fp 中。给文件写许可。

    这是要编辑以便提供新的"前面板"的文件。

  2. 更改"前面板"的名称:

    PANEL NewFrontPanel
  3. 更改名为 Top 的框的名称,并编辑它的容器名称:

    BOX NewFrontPanelTop  	
      {  	  
       CONTAINER_NAME					NewFrontPanel  
       POSITION_HINTS					first  	  
       ...
      } 	 	
  4. 为中间和底部的行添加框定义:

    BOX NewFrontPanelMiddle  	
      {  	  
       CONTAINER_NAME			NewFrontPanel   
       POSITION_HINTS			second
      }
     
    BOX NewFrontPanelBottom  	
      {
       CONTAINER_NAME		NewFrontPanel  
    	  	POSITION_HINT		second 
      }
  5. 将下列控制的 CONTAINER_NAME 改为 NewFrontPanelTop

    • 时钟

    • 日期

    • 起始

    • 文本编辑器

    • 邮件

  6. 将下列控制的 CONTAINER_NAME 改为 NewFrontPanelBottom

    • 打印机

    • 式样

    • 应用程序

    • 帮助

    • 垃圾

  7. 将切换的 CONTAINER_NAME 改为 NewFrontPanelMiddle

  8. 从"工作区"菜单中选择"重启工作区管理器"。