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 名稱  
{    
   KEYWORD            
   KEYWORD         
  ...  
}

有些關鍵字是需要的,其它則是選擇性的。有關更多的資訊,請參閱 dtfpfile(4X) 線上援助頁。

面板定義

PANEL(面板) 是頂層的元件。其定義包括:

方框定義

A BOX(方框) 定義描述:

控制定義

CONTROL(控制) 定義描述:

子面板定義

SUBPANEL(子面板) 定義描述:

開關定義

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             圖像   
    		CONTAINER_NAME   頂端   
    		CONTAINER_TYPE   BOX   
    		ICON             AudioApp   
    		POSITION_HINTS   2   
    		PUSH_ACTION      StartAudioApplication   
    		PUSH_RECALL		正確  
    }

如果要刪除控制

  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  
    		其餘的控制定義  
    }  
    CONTROL Help  
    {  	
    		POSITION_HINTS					5  	
    		LOCKED							True  
    		其餘的控制定義  
    }

如果要取代前方面板控制

    建立另一個控制定義,其具有相同的:

指定由控制所使用的圖像

控制定義的 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		
    		KEYWORD		值  		
    		...  	
    }
  4. 儲存新的配置檔案。

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

自訂內建子面板

您可以修改內建子面板的一般屬性(例如標題)與內容。

如果要修改內建子面板的一般屬性

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

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

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

  2. /usr/dt/appconfig/types/language/dtwm.fp 將整個內定 SUBPANEL (子面板)定義複製到新檔案:

    SUBPANEL   subpanel_name  
    	{   
    	 ...  
    	}
  3. 修改子面板定義。

  4. 儲存新的配置檔案。

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

    例如,以下放在檔案 /users/janice/.dt/types/PerApps.fp 中的定義變更了「個人應用程式」子面板的名稱:

    SUBPANEL PersAppsSubpanel  
    { 
     	CONTAINER_NAME					TextEditor  
    		TITLE								Janice 的 應用程式  
    }

如果要增加整個系統的控制至內建的子面板

  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	Fasle

如果要變更子面板的自動關閉行為

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

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

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

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

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

  2. /usr/dt/appconfig/types/language/dtwm.fp 將內定PANEL(面板) 定義複製到新檔案:

    	PANEL FrontPanel  	
    {  	 
     ...  
    }
  3. 將以下欄位增加至 PANEL(面板) 定義:

    	SUBPANEL_UNPOST    Fasle
  4. 儲存新的配置檔案。

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

定義前方面板控制

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

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

前方面板控制定義

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

CONTROL control_name  
{    
		TYPE	control_type    
		CONTAINER_NAME    
		CONTAINER_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_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_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	圖像1				[milisecond_delay]  
    		ANIMATION	圖像2				[milisecond_delay]  
    		...  
    	}

    其中 圖像1、圖像 2 等等是圖像的名稱,而 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. /usr/dt/appconfig/types/language/dtwm.fp 將內定PANEL(面板) 說明複製到新的檔案。

  3. 編輯 PANEL(面板) 說明。

    新的 PANEL(面板) 說明對於內定的面板有優先順序。

如果要變更內定前方面板的位置

    使用 PANEL(面板) 定義中的 PANEL_GEOMETRY 欄位來指定位置。

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

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

如果要在主面板中標籤控制

  1. 增加下行至 PANEL(面板) 定義:

    	DISPLAY_CONTROL_LABELS   True
  2. 增加 LABEL(標籤) 欄位至每個控制。

    如果未指定 LABEL(標籤),則使用 control_name

如果要變更控制的按一下行為

    使用 LABEL(標籤) 定義中的 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					第一個 
    	  ... 	 
    	}
  4. 增加中間與底部各列的方框定義:

    	BOX NewFrontPanelMiddle 
    {  
    	  CONTAINER_NAME						NewFrontPanel   
    	 POSITION_HINTS						第二個  
    	}  
    	BOX NewFrontPanelBottom 
    	{  
    	  CONTAINER_NAME						NewFrontPanel  
    	  POSITION_HINTS						第二個  
    	}
  5. 將下列控制的 CONTAINER_NAME 變更為 NewFrontPanelTop

    • 時鐘

    • 日期

    • 主目錄

    • TextEditor

    • 郵件

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

    • 印表機

    • 樣式

    • 應用程式

    • 輔助說明

    • 作廢

  7. 將開關的 CONTAINER_NAME 變更為 NewFrontPanelMiddle

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