亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Linux Desktop Entry 文件深入解析

2019-11-08 01:35:23
字體:
來源:轉載
供稿:網友

linux Desktop Entry 文件深入解析

Desktop Entry 文件是 Linux 桌面系統中用于描述程序啟動配置信息的文件。Desktop Entry 文件實現了類似于 Windows 操作系統中快捷方式的功能。本文詳細介紹了 Linux Desktop Entry 文件的定義,編程和使用方式。讀者可以通過文章末尾的實例操作進一步加深對 Desktop Entry 文件應用的領會。

龔 奕平 (gongyp@cn.ibm.com), IBM 中國軟件開發中心 WPLC 部,軟件工程師

2007 年 7 月 12 日

expand內容

在 IBM Bluemix 云平臺上開發并部署您的下一個應用。

1.Desktop Entry 文件標準簡介

在 Windows 平臺上,用戶可以通過點擊位于桌面或菜單上的快捷方式輕松打開目標應用程序?,F代 Linux 桌面系統也提供了此項功能。目前,Linux KDE 和 Linux GNOME 桌面系統都使用 Desktop Entry 文件標準來描述程序啟動配置信息。Desktop Entry 文件標準是由 FreeDesktop.org(http://freedesktop.org/wiki/) 制定的,目前最新的版本是"Desktop Entry Specification 1.0"[1]。

2.Desktop Entry文件

圖1 Linux GNOME 應用程序瀏覽器
圖1 Linux GNOME 應用程序瀏覽器

Desktop Entry 文件以".desktop"為后綴名。以 Linux GNOME 桌面系統為例,用戶打開應用程序瀏覽器后(見圖1)會看見很多應用程序快捷方式。事實上,每個應用程序快捷方式都和一個 Desktop Entry 文件相對應。這些 Desktop Entry 文件通常被存放在/usr/share/applications//opt/gnome/share/applications/等目錄下。從文件瀏覽器進入這些目錄,點擊相應的 Desktop Entry 文件同樣可以啟動相對應的應用程序。

假設當前"/usr/share/applications/"目錄下有一文件"cbt.desktop",用任意文件編輯軟件(如 vi 或 gedit)打開"cbt.desktop",將得到如下內容:

清單1 "cbt.desktop"文件內容
[Desktop Entry]Version = 1.0Encoding = UTF-8Name = Quick Start TourGenericName = User TutorialComment = Computer Based Training tutorial to /     guide and help you learn how to use the DesktopExec = gnome-open /usr/share/doc/manual/sled-gnome-cbt_en/index.htmlIcon = cbtStartupNotify = trueTerminal = falseType = ApplicationCategories = GNOME;Application;Documentation;OnlyShowIn = GNOME;X-SuSE-translate = trueName[cs] = Rychlá PRohlídka systémuComment[cs] = V?ukov? program seznamující u?ivatele        se základy pracovního prost?edíGenericName[cs] = U?ivatelsk? tutoriálName[hu] = RendszerbemutatóComment[hu] = A munkaállomés használatát bemutató segédletGenericName[hu] = Felhasználói segédlet

本文將在下一節中結合上述"cbt.desktop"文件內容重點解析 Desktop Entry 的文件結構。讀者可以從中深入領會上述各條語句的具體含義。

3.Desktop Entry 文件結構

Desktop Entry 文件通常以字符串"[Desktop Entry]"開始。由清單 1 可以得知,Desktop Entry 文件的內容是由若干{關鍵字,數值}配對的 Entry 組成的。例如,"Version"就是一個關鍵字,關鍵字"Version"對應的數值是"1.0"。Desktop Entry 文件標準定義了一系列標準關鍵字。標準關鍵字分為必選和可選兩種:必選標準關鍵字必須在 .desktop 文件中被定義;而可選關鍵字則不必。以下是對重點關鍵字的解析。

關鍵字"Version":[可選]該數值指定了當前 Desktop Entry 文件所遵循的 Desktop Entry 文件標準版本。關鍵字"Encoding":[1.0 版本不推薦使用]該數值指定了當前 Desktop Entry 文件中特定字符串所使用的編碼方式。盡管Desktop Entry 文件標準 1.0 不再推薦使用該關鍵字,但由于歷史原因該關鍵字仍然廣泛出現在現有的 Desktop Entry 文件中。關鍵字"Name":[必選]該數值指定了相關應用程序的名稱。比如在清單1中關鍵字"Name"的數值是"Quick Start Tour"。打開文件瀏覽器,進入"/usr/share/applications"目錄,就可以看見"cbt.desktop"文件所定義的快捷方式的顯示樣式,如圖2所示。其中,快捷方式的顯示名稱由關鍵字"Name"的數值所決定,快捷方式所使用的圖標由下文中將要介紹的關鍵字"Icon"的數值來決定。當然,這些定義在應用程序瀏覽器中同樣適用,請參考圖3。
圖2 "cbt.desktop"文件在文件瀏覽器中的顯示樣式
圖2 cbt.desktop 文件在文件瀏覽器中的顯示樣式關鍵字"GenericName":[可選]該數值指定了相關應用程序的通用名稱。比如在清單1中關鍵字"GenericName"的數值是"User Tutorial"。打開應用程序瀏覽器,就可以看見字符串"User Tutorial"被顯示在圖標的右側,如圖3所示:
圖3 "cbt.desktop"文件在應用程序瀏覽器中的顯示樣式
圖3 cbt.desktop 文件在應用程序瀏覽器中的顯示樣式關鍵字"Comment":[可選]該數值是對當前Desktop Entry的簡單描述。關鍵字"Type":[必選]關鍵字"Type"定義了Desktop Entry文件的類型。常見的"Type"數值是"Application"和"Link"。"Type = Application"表示當前Desktop Entry文件指向了一個應用程序;而"Type = Link"表示當前Desktop Entry文件指向了一個URL (Uniform Resource Locator)。關鍵字"Exec":[可選]關鍵字"Exec"只有在"Type"類型是"Application"時才有意義。"Exec"的數值定義了啟動指定應用程序所要執行的命令,在此命令是可以帶參數的。在本例中,關鍵字"Exec"的數值是字符串"gnome-open /usr/share/doc/manual/sled-gnome-cbt_en/index.html"。在shell中輸入該字符串并按回車鍵同樣可以啟動指定應用程序。關鍵字"URL":[可選]關鍵字"URL"只有在"Type"類型是"Link"時才有意義。"URL"的數值定義了該Desktop Entry文件指向的URL。例如:清單2 "Type = Link"類型Desktop Entry文件示例
Type = LinkURL = http://www.ibm.com/developerworks雙擊含有上述內容的Desktop Entry文件將啟動web瀏覽器,并打開指定網頁"http://www.ibm.com/developerworks",運行結果請參考圖4。關鍵字"Icon":[可選]該數值定義了當前Desktop Entry文件在應用程序瀏覽器或是在文件瀏覽器中所顯示的圖標。如果關鍵字"Icon"的數值是以絕對路徑的格式給出,那么其數值所指定圖標文件將被使用;反之,Linux系統將使用"Icon Theme Specification"[2]在系統指定圖標目錄下定位所需要使用的圖標文件。比如在本例中關鍵字"Icon"的數值是"cbt",它實際對應著系統指定圖標目錄下的圖片文件"cbt.png"cbt.png 。該圖片作為圖標的顯示效果如圖2,圖3所示。關鍵字"StartupNotify":[可選]關鍵字"StartupNotify"的數值是布爾值(true 或是 false)。該關鍵字只有在"Type"類型是"Application"時才有意義。其數值的含義由規范"Startup Notification Protocol Specifications"[3]定義,在此不再詳述。關鍵字"Terminal":[可選]和"StartupNotify"一樣,關鍵字"StartupNotify"的數值也是布爾值,并且該關鍵字只有在"Type"類型是"Application"時才有意義。其數值指出了相關應用程序(即關鍵字"Exec"的數值)是否需要在終端窗口中運行。本文將在下一節中給出關鍵字"Terminal"的具體使用方法。關鍵字"Categories":[可選]關鍵字"Categories"只有在"Type"類型是"Application"時才有意義。"Categories"的數值指出了相關應用程序在菜單中顯示的類別。具體菜單分類由規范"Desktop Specification Menu"具體定義[4]。關鍵字"OnlyShowIn"和"NotShowIn":[可選]這兩個關鍵字分別定義了當前Desktop Entry是否在特定Linux 桌面系統(例如:Linux GNOME 或 Linux KDE)下顯示(由"OnlyShowIn"定義),或不顯示(由"NotShowIn"定義)。具體定義請參考"Desktop Specification Menu"[4]。關鍵字"X-SuSE-translate":[SUSE Linux特有]關鍵字"X-SuSE-translate"是SUSE Linux(http://www.novell.com/linux/)特有的。"X-SuSE-translate"符合SUSE RPM Package風格。"X-SuSE-translate"數值表示是否要對關鍵字"Name"和"GenericName"進行翻譯。詳情請參考"SUSE Package Conventions"[5]。本地化關鍵字"[LOCALE]"根據"Desktop Entry Specification"規范[1],在關鍵字后加上字符串"[LOCALE]"就可以對該關鍵字進行特定的本地化定義。"LOCALE"的合法取值為:
LOCALE= lang_COUNTRY.ENCODING@MODIFIER在此,域"_COUNTRY",".ENCODING"和"@MODIFIER"是可以被忽略的。當指定Desktop Entry文件被解析時,解析器應當根據當前POSIX locale來正確獲取本地化的關鍵字數值。例如清單1就分別定義了在"cs"和"hu"語言環境下關鍵字"Name","Comment"和"GenericName"的不同數值。其余關鍵字除了上述在清單1中出現的關鍵字外,"Desktop Entry Specification"還定義了"Hidden","TryExec","MimeType"等可選關鍵字。用戶可以根據需要進行選取。

4.分析運行 Desktop Entry 文件

Desktop Entry文件是一種常見的Linux文件格式,很多Linux程序需要對該種文件提供支持。在此,本文給出分析運行 Desktop Entry 文件的基本編成思路。

4.1 分析 Desktop Entry 文件內容

操作 Desktop Entry 文件的第一步是獲取文件的內容。假設有一 Desktop Entry 文件,其路徑信息存儲在變量 pPath 中:

const char* pPath;

下列代碼將把該文件內容讀入內存"buffer"中。

清單3 讀取 Desktop Entry 文件內容
int file_size = 0;char *file_contents = NULL;char *buffer = NULL;if( eel_read_entire_file ( pPath, &file_size, &file_contents ) == GNOME_VFS_OK ){    buffer = (char *)g_realloc ( file_contents, file_size + 1 );    buffer[file_size] = '/0';}else{    return 1;}

獲取 Desktop Entry 文件內容后,就可進一步分析文件內容。在此,分析的重點是獲取關鍵字"Type","Exec"/"URL",以及"Terminal"的數值。首先定義結構 DestopEntryType:

清單4 DestopEntryType 結構定義
enum DestopEntryType{    Application, // Type = Application    Link,             // Type = Link    Unknown};

下列程序將提取關鍵字"Type","Exec"/"URL"和"Terminal"的數值,并把這些數值分別存儲在變量"type","uri"和"bTerminal"中。

清單5 獲取關鍵字"Type","Exec"/"URL",以及"Terminal"數值
DestopEntryType type = Unknown;char *uri = NULL;bool bTerminal = false;GnomeDesktopItem *desktop_file;desktop_file = gnome_desktop_item_new_from_string( NULL, buffer, file_size,(GnomeDesktopItemLoadFlags)0, NULL );if ( !desktop_file ){    g_free( buffer );    return 1;}const char *strType = gnome_desktop_item_get_string( desktop_file, "Type" );if ( !strType ){    g_free( buffer );    gnome_desktop_item_unref ( desktop_file );    return 1;}if ( 0 == strcmp( strType, "Application" ) )    //type = Application{    const char *exec_str = gnome_desktop_item_get_string( desktop_file, "Exec" );    if( !exec_str )    {        g_free( buffer );        gnome_desktop_item_unref( desktop_file );        return 1;    }   uri = g_strdup( exec_str );    type = Application;    const char *strTerminal = gnome_desktop_item_get_string( desktop_file, "Terminal" );    if ( strTerminal )    {        if ( 0 == strcmp( "true", strTerminal ) )            bTerminal = true;        else            bTerminal = false;    }}else if(strcmp(strType, "Link") == 0)    //type = Link{    uri = g_strdup( gnome_desktop_item_get_string( desktop_file, "URL" ) );    type = Link;}    g_free( buffer );    gnome_desktop_item_unref( desktop_file );

4.2 運行"Type = Application"類型Desktop Entry文件

有了關鍵字"Type","Exec"和"Terminal"的數值,就可如下運行Desktop Entry文件。

清單6 運行"Type = Application"類型Desktop Entry文件
if ( type == Application ){    if( bTerminal )        eel_gnome_open_terminal_on_screen( uri, NULL );    else        eel_gnome_shell_execute_on_screen( uri, NULL);    g_free( uri );    return 0;}

4.3 運行"Type = Link"類型Desktop Entry文件

有了關鍵字"Type","URL"和"Terminal"的數值,就可如下運行Desktop Entry文件。

清單7 運行"Type = Link"類型Desktop Entry文件
if ( type == Link ){    gnome_url_show( uri, NULL );    g_free( uri );    return 0;}

5.創建Desktop Entry文件實例

在這部分中,本文將給出創建Desktop Entry文件的兩個具體實例。這兩個實例的目標都是要創建自動訪問IBM DeveloperWorks網站的快捷方式,具體運行結果如圖4所示。這兩個實例將使用不同的方法實現這一目標。第一個實例將創建的文件類型是"Application"的Desktop Entry文件"VisitDeveloperWorks-Application.desktop";第二個實例將創建的文件類型是"Link" 的Desktop Entry文件"VisitDeveloperWorks-Link.desktop"。

圖4 "VisitDeveloperWorks-Application.desktop" / "VisitDeveloperWorks-Link.desktop"運行結果
圖4

5.1 創建"Type = Application"Desktop Entry文件實例

假設系統指定圖標目錄下存有圖片文件"gaim.png"gaim.png 。如圖5所示編輯文件"VisitDeveloperWorks-Application.desktop",并把結果存于"/usr/share/applications/"目錄下。

圖5 "VisitDeveloperWorks-Application.desktop"文件內容
圖5

該文件的核心內容是將應用程序圖標設置為"gaim.png"文件,將Desktop Entry文件的類型設置為"Application",并將應用程序所要執行的命令設置為"Firefox http://www.ibm.com/developerworks"。編輯完成后,在文件瀏覽器和應用程序瀏覽器下(如圖6所示)就可以看見該實例的顯示樣式。

圖6 "VisitDeveloperWorks-Application.desktop"文件在應用程序瀏覽器中的顯示樣式
圖6

5.2 創建"Type = Link"Desktop Entry文件實例

對上述"VisitDeveloperWorks-Application.desktop"文件進行如圖7所示的修改,并將文件更名為"VisitDeveloperWorks-Link.desktop",保存于"/usr/share/applications/"目錄下。

圖7 "VisitDeveloperWorks-Link.desktop"文件內容
圖7

該文件的核心內容是將 Desktop Entry 文件的類型設置為"Link",并將 Desktop Entry 文件指向的 URL 設置為"http://www.ibm.com/developerworks"。編輯完成后,在文件瀏覽器下(如圖8所示)就可以看見該實例的顯示樣式。值得注意的是,由于該實例并不是一個應用程序,因此在應用程序瀏覽器下是看不到相應快捷方式的。

圖8 "VisitDeveloperWorks-Link.desktop"文件在文件瀏覽器中的顯示樣式
圖8

6.結束語

Desktop Entry文件是Linux KDE 和Linux GNOME桌面系統中標準的程序啟動配置描述方式。本文對該文件格式的定義和應用進行了深入的探討。欲求更詳細的使用和編程信息,請查找相關參考文獻。

參考資料

[1] "Desktop Entry Specification"。[2] "Icon Theme Specification"。[3] "Startup Notification Protocol Specifications"。[4] "Desktop Specification Menu"。[5] "SUSE Package Conventions"。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美成人在线| 中文在线资源观看视频网站免费不卡| 久久精品91久久久久久再现| 国产精品成人播放| 午夜精品福利电影| 日韩av在线电影网| 久久久精品2019中文字幕神马| 91久久精品视频| 国产精品色婷婷视频| 国产精品免费视频xxxx| 久久久亚洲影院你懂的| 色婷婷**av毛片一区| 国产精品视频xxxx| 国产午夜精品全部视频在线播放| 欧美黄色免费网站| 日韩在线视频导航| 精品亚洲va在线va天堂资源站| 亚洲最大的av网站| 91九色精品视频| 欧美激情日韩图片| 国产精品吴梦梦| 亚洲精品日韩激情在线电影| 国产欧美一区二区三区四区| 欧美成人在线影院| 亚洲小视频在线| 欧美黑人国产人伦爽爽爽| 欧美精品videosex性欧美| 亚洲一区二区中文字幕| 欧美亚洲激情视频| 91a在线视频| 亚洲人成免费电影| 亚洲精品一区中文| 久久久久久高潮国产精品视| 欧美午夜电影在线| 中文字幕av一区中文字幕天堂| 欧美专区中文字幕| 色哟哟网站入口亚洲精品| 欧美最猛性xxxx| 欧美与黑人午夜性猛交久久久| 日韩成人在线视频观看| 国产精品美女主播| 国产精品96久久久久久又黄又硬| 国产日韩换脸av一区在线观看| 精品精品国产国产自在线| 最新69国产成人精品视频免费| 亚洲综合中文字幕在线| 欧美激情影音先锋| 国产亚洲精品久久久久动| 91精品国产综合久久香蕉最新版| 亚洲视屏在线播放| 亚洲深夜福利视频| 亚洲精品第一页| 日韩美女主播视频| 精品亚洲一区二区三区| 久久好看免费视频| 欧美日韩国产一中文字不卡| 国产欧亚日韩视频| 97超级碰在线看视频免费在线看| 国产不卡视频在线| 亚洲直播在线一区| 中文字幕日韩精品有码视频| 欧美精品激情blacked18| 成人h视频在线| 亚州成人av在线| 97精品国产97久久久久久春色| 亚洲一区美女视频在线观看免费| 国产精品美女免费视频| 久久精品国产亚洲一区二区| 国产一区在线播放| 亚洲最大福利视频| 欧美大片第1页| 日韩欧美精品中文字幕| www.欧美三级电影.com| 精品国产户外野外| 亚洲欧美制服丝袜| 国产日韩欧美在线观看| 午夜精品一区二区三区在线播放| 午夜精品免费视频| 国产亚洲激情在线| 国产mv久久久| 九九热在线精品视频| 成人国产精品久久久| 久久亚洲春色中文字幕| 亚洲欧美综合另类中字| 亚洲xxxx3d| 国产欧美亚洲视频| 91人成网站www| 国产在线拍揄自揄视频不卡99| 亚洲tv在线观看| 欧美丝袜一区二区三区| 岛国av一区二区在线在线观看| 国产精品美女www爽爽爽视频| 国产精品aaa| 欧美猛少妇色xxxxx| 国产在线不卡精品| 久久久久国产精品免费| 欧美日韩美女在线观看| 日韩视频永久免费观看| 国产日韩中文字幕在线| 色噜噜国产精品视频一区二区| 91精品国产成人| 日韩精品免费视频| 91精品久久久久久久久久久久久久| 国产精品久久久久久久久久久新郎| 国产视频自拍一区| 日韩精品在线免费观看| 亚洲自拍偷拍网址| 日韩精品一区二区三区第95| 中文字幕久精品免费视频| 欧美在线欧美在线| 青青久久aⅴ北条麻妃| 国产精品自拍视频| 色先锋资源久久综合5566| 亚洲国产成人精品一区二区| 亚洲美女激情视频| 国产精品一区二区女厕厕| 永久免费毛片在线播放不卡| 国产精品www色诱视频| 高清日韩电视剧大全免费播放在线观看| 91国内揄拍国内精品对白| 亚洲自拍偷拍在线| 91精品视频观看| 亚洲无亚洲人成网站77777| 欧美福利视频在线| 欧美精品在线观看91| 日韩精品视频在线观看免费| 欧美寡妇偷汉性猛交| 超在线视频97| 国产69精品久久久久9999| 欧美日韩国产中文精品字幕自在自线| 国产精品九九久久久久久久| 日本久久久久久久久| 欧美成在线观看| 中文字幕亚洲欧美日韩2019| 成人久久久久久久| 精品国产精品三级精品av网址| 欧美视频不卡中文| 91在线视频成人| 久久久亚洲影院你懂的| 亚洲欧美变态国产另类| 亚洲欧洲日产国码av系列天堂| 国产精品专区h在线观看| 国产97在线|日韩| 亚洲成人网久久久| 91色p视频在线| 亚洲伊人第一页| 国产一区二区精品丝袜| 久久777国产线看观看精品| 欧美成人免费大片| 中文字幕日韩av电影| 日韩国产精品亚洲а∨天堂免| 国产精品国内视频| 久久久精品影院| 久久精品亚洲国产| 萌白酱国产一区二区| 午夜精品www| 国产欧美久久久久久| 色综合视频网站| 国产精品高潮呻吟久久av野狼| 日本高清久久天堂| 国产91精品久久久久久久| 欧美极品xxxx| 久久久久久高潮国产精品视| 亚洲国产精品视频在线观看|