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  
   KEYWORDvalue    
   ...
  }

一些关键字是必需的,另一些只供选用。关于进一步信息,请参阅 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 复制到新的文件中:

    SUBPANEL	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  
    	  {  		
       icon_image	[delay]  
    		icon_image	[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. 从"工作区"菜单中选择"重新启动工作区管理器"。