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

回復已刪除的控制或輔助面板

桌面工具應用程式群組中的「回復前方面板」動作刪除了所有以使用者介面作的「前方面板」自訂。使用者可以使用此動作來刪除他們所有以「前方面板」的即現式功能表所作的個人自訂。

使用以下程序來回復個別控制。

    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 頂端  	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(在桌面工具應用程式群組中)增加至所有使用者的「個人應用程式」輔助面板。

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

如果要從內建的輔助面板刪除控制

    使用與刪除「主面板」控制相同的程序。請參閱 "移除控制"

移除安裝圖示控制

    將以下欄位增加至輔助面板定義:

 CONTROL_INSTALL	Fasle

變更輔助面板的自動關閉行為

當使用者選擇控制時,輔助面板的預設行為是關閉,除非使用者已從其原始位置移去輔助面板。

可以配置「前方面板」以保持輔助面板開啟至使用者確實地關閉為止。

  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    Fasle
  4. 儲存新的配置檔案。

  5. 從「工作區」功能表選擇「重新啟動工作區管理者」。

定義前方面板控制

使用者可以藉由將圖示定位於「安裝圖示控制」上來建立個人控制。

當此動作個人控制提供簡易自訂性之時,其所提供的功能是「前方面板」控制能力的子集。例如,使用「安裝圖示控制」所建立的控制無法:

前方面板控制定義

「前方面板」控制定義的結構為:

CONTROL(控制) control_name
 {
   TYPE            control_type
   CONTAINER_NAME  value
   CONTAINER_TYPE  value
   other fields defining appearance and behavior
 }

控制類型

控制定義中的 TYPE 欄位指定控制的基本行為。

控制類型

控制行為

icon (預設值)。

當使用者按一下控制或於其上定位檔案時,控制將會執行指定的動作。

blank

用以調整控制的空間設定之位置保留符號。

busy

進行燈。當呼叫動作時,控制會閃爍(切換影像)

client

「前方面板」中的用戶端視窗。

clock

時鐘。

date

顯示目前日期。

file

代表檔案。選擇執行檔案的預設動作之控制。

建立新的控制

本節描述定義控制的一般步驟,以及描述如何建立各種類型的控制。

  1. 如果控制將會有 PUSH_ACTION 及/或 DROP_ACTION,請建立動作定義。這些是當使用者按一下控制或於其上定位檔案時所執行的動作。

  2. 建立控制的圖示影像檔案。

    有關圖示大小、名稱與位置的資訊,請參閱 "圖示影像檔案"

  3. 建立新的「前方面板」配置檔案於:

    • 整個系統的: /etc/dt/appconfig/types/language /*.fp

    • 個人的: HomeDirectory /.dt/types/*.fp

  4. 將控制定義增加至檔案。

  5. 儲存檔案。

  6. 從「工作區」功能表選擇「重新啟動工作區管理者」。

建立在按一下時執行動作的控制

使用這些欄位來定義控制的行為:

建立開啟檔案的控制

使用這些欄位來定義控制的行為:

建立作用如定位區域的控制

當使用者在控制上定位檔案時,使用 DROP_ACTION 欄位來指定執行的動作。動作必須要能夠接受檔案引數。

控制定義經常同時包括 PUSH_ACTIONDROP_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。如果程序已經執行,視窗會移動至目前工作區中視窗堆疊的頂端。

使用這些欄位來定義控制的行為:

建立用戶端視窗控制

用戶端視窗控制是內含於「前方面板」中的應用程式視窗。例如,您可以藉由建立 xload 用戶端視窗控制將系統載入表放在「前方面板」中。

  1. 定義控制。

    使用這些欄位來定義控制的行為:

    • TYPE:設定為 client

    • CLIENT_NAME:指定要啟動的用戶端。

      CLIENT_NAME 的值必須符合應用程式頂層視窗上 WM_CLASS 屬性中的第一個字串(res_name)。有關更多的資訊,請參閱 xprop(1) 線上援助頁。

    • CLIENT_GEOMETRY:指定「前方面板」視窗所需要的大小,以像素計算大小。

      xwininfo(1) 線上援助頁描述如何以像素找出視窗的大小。

  2. 從「工作區」功能表選擇「重新啟動工作區管理者」。

  3. 從終端機模擬器指令行啟動用戶端。

    例如,以下控制顯示 30\u00d720 的像素載入表。

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

    如果在階段作業之間未儲存與回復用戶端,您可能會想要配置控制以在使用者按一下時啟動用戶端。例如,您可以藉由將下行增加至定義來配置 LoadMeter 控制以啟動 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	icon2				[milisecond_delay]
     		...
     	}

    icon1、icon2 等等是圖示的名稱,而 milisecond_delay 是以毫秒計算的動畫圖示之間的時間延遲。預設時間延遲為 200 毫秒。

  2. 增加 PUSH_ANIMATION 及/或 DROP_ANIMATION 欄位至控制定義。此值為 ANIMATION(動畫) 順序的名稱。

    例如,下列各行使啟動 BestEditor 應用程式的控制成為動畫。圖示之間的時間延遲是 300 毫秒。範例假定您已建立圖示檔案 frame1frame2 等等。

    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。欄位值如下:

    single_click-使用者按一下控制以執行 PUSH_ACTION

    double_click-使用者連按兩下控制以執行 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_HINTS						second
    	}
  5. 將下列控制的 CONTAINER_NAME 變更為 NewFrontPanelTop

    • 時鐘

    • 日期

    • 主目錄

    • 文字編輯程式

    • 郵件

  6. 將下列控制的 CONTAINER_NAME 變更為 NewFrontPanelBottom

    • 印表機

    • 樣式

    • 應用程式

    • 輔助說明

    • 垃圾

  7. 將開關的 CONTAINER_NAME 變更為 NewFrontPanelMiddle

  8. 從「工作區」功能表選擇「重新啟動工作區管理者」。