桌面項

出自 Arch Linux 中文维基

XDG 桌面配置項規範定義了一個標準,用於在實現了XDG 桌面菜單規範的桌面環境裡將應用程式集成到應用程式菜單中。(譯註:下文中「XDG 桌面配置項」簡稱為「桌面項」)

基礎[編輯 | 編輯原始碼]

每個桌面項必須具有一個Type關鍵字和一個Name關鍵字。可以定義桌面項在應用程式菜單中的外觀(非必須)。

桌面項可用的有效類型有三種:

Application
定義如何啟動應用程式以及它支持的 MIME 類型(由 XDG MIME Applications 使用)。 使用XDG Autostart應用程式項可以通過將它們放在特定目錄中以實現自動啟動。應用程式項使用.desktop擴展名。 請參閱 #應用程式項
Link
定義URL的快捷方式。連結項使用.desktop擴展名。
Directory
定義應用程式菜單中子菜單的外觀。目錄項使用.directory擴展名。

以下部分將大致解釋這些是如何創建和驗證的。

應用程式項[編輯 | 編輯原始碼]

應用程式的桌面項或.desktop文件通常是元信息資源和應用程式快捷方式的組合。對於系統範圍內安裝的應用程式,這些文件通常位於 /usr/share/applications//usr/local/share/applications/。而~/.local/share/applications/用於用户特定的應用程式。後者(用户條目)優先於前者(系統條目)。

文件示例[編輯 | 編輯原始碼]

下面是一個帶有附加註釋的結構示例。 這個例子只是為了給人一個快速的印象,並沒有展示如何使用所有可能的關鍵字。完整的關鍵字清單可在 freedesktop 規範 中找到。

[Desktop Entry]

# type关键字如上所述
Type=Application

# 本文件所遵循的桌面项规范版本
Version=1.0

# 应用程序的名称
Name=jMemorize

# 显示为工具提示的注释
Comment=Flash card based learning tool

# 可执行文件所在的目录
Path=/opt/jmemorise

# 可执行文件,可以带参
Exec=jmemorize

# 图标名称
Icon=jmemorize

# 应用程序是否需要运行在终端中
Terminal=false

# 本桌面项将显示在哪些分类中
Categories=Education;Languages;Java;
注意: 只有TypeName是必須的。

關鍵字賦值[編輯 | 編輯原始碼]

所有可用的關鍵字都可以在freedesktop網站上找到。

例如,Type關鍵字定義了三種類型的桌面項:應用程式(type 1)、連結(type 2)和目錄(type 3)。

  • Version 關鍵字不代表應用程式的版本,而是代表該文件符合的桌面項規範的版本。
  • NameGenericNameComment 通常包含它們組合形式的冗餘值,例如:
Name=Pidgin Internet Messenger
GenericName=Internet Messenger

或者

Name=NoteCase notes manager
Comment=Notes Manager

應該避免這種情況,因為它只會讓用户感到困惑。Name關鍵字應僅包含名稱,或者可能是縮寫/首字母縮略詞(如果可用)。

  • GenericName 應該説明您通常如何描述該應用程式提供的功能(即 Firefox 是「Web 瀏覽器」)。
  • Comment 旨在包含任何有用的附加信息。

驗證[編輯 | 編輯原始碼]

隨着時間的推移,某些關鍵字已被棄用,您可能需要使用 desktop-file-validate(1) 來驗證您的桌面項,它是 desktop-file-utils 軟件包的一部分。要驗證,請運行:

$ desktop-file-validate <your desktop file>

這將為您提供非常詳細且有用的警吿和錯誤消息。

安裝[編輯 | 編輯原始碼]

使用 desktop-file-install(1) 將桌面文件安裝到目標目錄。例如:

$ desktop-file-install --dir=$HOME/.local/share/applications ~/app.desktop

刷新桌面項數據庫[編輯 | 編輯原始碼]

要使~/.local/share/applications中定義的桌面項生效,請運行以下命令:

$ update-desktop-database ~/.local/share/applications
提示:添加 -v(詳細)參數以顯示可能的桌面輸入錯誤。

圖標[編輯 | 編輯原始碼]

參閱圖標主題規範

通用圖標格式[編輯 | 編輯原始碼]

以下是圖標常用圖像格式的概述。

支持 freedesktop.org 標準指定的圖標圖像格式
擴展名 全稱和/或説明 圖像類型 是否容器型 是否支持
.png 便攜式網絡圖形 位圖
.svg(z) 可縮放矢量圖形 矢量圖 是(可選)
.xpm X PixMap 位圖 是(不推薦)
.gif 圖像互換格式 位圖
.ico Windows圖標格式 位圖
.icns Apple圖標格式 位圖

圖標格式轉換[編輯 | 編輯原始碼]

本文或本章節可能需要合併到ImageMagick#Usage

附註: 應歸屬該文。(在 Talk:桌面項 中討論)

如果您偶然發現 freedesktop.org 標準不支持的圖標格式(例如 gifico),您可以使用「轉換」工具 (這是 imagemagick 包的一部分)將其轉換為支持/推薦的格式,例如:

$ convert <icon name>.gif <icon name>.png

如果您從 ico 之類的容器格式轉換,您將獲得以 <icon name>-<number> 形式封裝在 ico 文件中的所有圖像。如果你想知道圖像的大小,或者像 ico 這樣的容器文件中的圖像數量,你可以使用 identify 工具(它也是 imagemagick 的一部分):

$ identify /usr/share/vlc/vlc48x48.ico
/usr/share/vlc/vlc48x48.ico[0] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[1] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[2] ICO 128x128 128x128+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[3] ICO 48x48 48x48+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[4] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[5] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb

如您所見,示例 ico 文件,雖然它的名稱可能暗示一個大小為 48x48 的圖像,但包含不少於 6 個不同的大小,其中一個甚至大於 48x48,即 128x128。

或者,您可以使用 icotool(來自 icoutils)從 ico 容器中提取 png 圖像:

$ icotool -x <icon name>.ico

要從 .icns 容器中提取圖像,可以使用 icns2png(由 libicns 提供):

$ icns2png -x <icon name>.icns

獲取圖標[編輯 | 編輯原始碼]

附帶「.desktop」文件的軟件包肯定包含一個或一組圖標。有時開發人員雖然沒有創建「.desktop」文件,但可能會附帶圖標。所以一個好的開始是在源包中尋找圖標。

您可以首先使用 find 過濾擴展名,然後使用 grep 進一步過濾某些常用關聯詞,如包名、「icon」、「logo」等,源碼包中可能有很多圖片。

$ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"

如果應用程式的開發人員沒有在他們的源包中包含圖標,那麼下一步就是在他們的網站上進行搜索。

一些項目,例如 tvbrowserAUR 有一個 藝術品/徽標頁面,可以在其中找到其他圖標。如果一個項目是多平台的,可能會出現這樣的情況,即使 linux/unix 包沒有附帶圖標,Windows 包也可能提供圖標。如果項目使用 版本控制系統,如 CVS/SVN/等。並且您對它有一些經驗,您也可以考慮瀏覽它以獲取圖標。

如果一切都失敗了,該項目可能還沒有圖標/徽標。

圖標文件路徑[編輯 | 編輯原始碼]

freedesktop.org 標準 規定了程序應以何種順序和目錄查找圖標:

  1. $HOME/.icons(為了向後兼容)
  2. $XDG_DATA_DIRS/icons
  3. /usr/share/pixmaps

工具[編輯 | 編輯原始碼]

arronax[編輯 | 編輯原始碼]

Arronax 是一個圖形程序,用於創建和修改應用程式和位置的桌面項。

alacarte[編輯 | 編輯原始碼]

alacarte 是一個使用 freedesktop.org 菜單規範的 GNOME 圖形菜單編輯器。它還支持覆蓋桌面項。

gendesk[編輯 | 編輯原始碼]

gendesk 最初是一個 Arch Linux 特定的工具,用於通過直接從 PKGBUILD 文件中獲取所需信息來生成 .desktop 文件。 現在它是一個接受命令行參數的通用工具。

可以從 這個網站 自動下載圖標(如果網站可用的話)。(圖標的來源是可配置的)。

用法[編輯 | 編輯原始碼]

  • gendesk 添加到 makedepends
  • 啟動 prepare() 功能:
gendesk --pkgname "$pkgname" --pkgdesc "$pkgdesc"
  • 或者,如果已經提供了一個圖標(例如,$pkgname.png),可以指定 -n 參數限定不下載圖標或使用默認圖標。例如:
gendesk -n --pkgname "$pkgname" --pkgdesc "$pkgdesc"
  • $srcdir/$pkgname.desktop 將被創建並安裝在 package() 函數中:
install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
  • 圖標可以這樣安裝:
install -Dm644 "$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"
  • --name='程序名稱' 這個參數指定程序在菜單中的名稱。
  • --exec='/opt/some_app/elf --some-arg --other-arg' 這種形式設置可執行文件字段。

lsdesktopf[編輯 | 編輯原始碼]

lsdesktopfAUR可列出可用的「.desktop」文件或搜索它們的內容。

$ lsdesktopf
$ lsdesktopf --list
$ lsdesktopf --list gtk zh_TW,zh_CN,en_GB

它還可以執行 MIME 類型相關的搜索。參閱XDG MIME Applications#lsdesktopf

fbrokendesktop[編輯 | 編輯原始碼]

fbrokendesktopAUR Bash 腳本用於檢測指向不存在路徑的無效Exec值。沒有任何參數,它使用 DskPath 數組中的預設目錄。它僅顯示完整路徑和文件名丟失的無效「.desktop」。

例如

$ fbrokendesktop
$ fbrokendesktop /usr
$ fbrokendesktop /usr/share/xsessions/icewm.desktop

提示與技巧[編輯 | 編輯原始碼]

從終端運行一個桌面項[編輯 | 編輯原始碼]

如果安裝了 gtk3,可以運行 gtk-launch application.desktop

或者安裝 dex 包並運行 dex /path/to/application.desktop

編輯 .desktop 文件[編輯 | 編輯原始碼]

對於系統範圍的 .desktop 文件(例如,從軟件包安裝的文件),首先將相關的 .desktop 文件(例如,從 /usr/share/applications/ 複製到 /usr/share/applications/) {ic|$XDG_DATA_HOME/applications/}}(例如 ~/.local/share/applications/)。 這可以防止在 系統升級 期間更新軟件包時覆蓋您的更改。 本地用户特定的「.desktop」文件應自動優先於系統範圍的文件。 現在您可以根據需要修改本地用户特定的「.desktop」文件。

注意: 如果您已將此應用程式配置為自動啟動,則 $XDG_CONFIG_HOME/autostart 中可能已經存在系統桌面條目的副本,如 XDG Autostart。 如果您只想在自動啟動時修改行為,請繼續編輯此文件。 否則,如果您想在所有情況下修改行為,您應該:
  • 將桌面文件從 $XDG_CONFIG_HOME/autostart/ 移動到 $XDG_DATA_HOME/applications
  • 使用 ls -l,確保此桌面條目是您可以編輯的常規文件,而不是指向系統位置的連結。如果是連結,請按照上述説明將其替換為原件的副本。
  • 建立一個指向用户應用程式目錄的符號連結(為方便起見,默認 XDG 目錄被替換):

​​​

 ln -s ~/.local/share/applications/desktop_entry ~/.config/autostart/

​​​

現在,您的應用程式啟動器中的文件將與自動啟動的文件保持一致。

編輯環境變量[編輯 | 編輯原始碼]

要設置 環境變量,在 .desktop 文件中,編輯 Exec= 行以首先使用 env(1) 命令設置變量。例如,將原始行註釋掉:

~/.local/share/applications/abiword.desktop
...
# Exec=abiword %U
Exec=env LANG=he_IL.UTF-8 abiword %U
...

編輯命令行參數[編輯 | 編輯原始碼]

要更改或添加命令行參數,請編輯 Exec= 行以附加所需的選項。 例如,將原始行註釋掉:

~/.local/share/applications/steam.desktop
...
# Exec=/usr/bin/steam-runtime %U
Exec=/usr/bin/steam-runtime -no-browser %U
...

隱藏桌面項[編輯 | 編輯原始碼]

可以通過多種方式控制桌面條目的可見性。有關詳細信息,請參閱 桌面條目規範。 將以下行之一添加到您的 .desktop 文件中:

  • All 桌面環境,選擇以下一項(或兩項):
    • 為您不希望在菜單中顯示的應用程式添加行 NoDisplay=true
    • 為您認為已刪除且不希望在菜單中顯示的應用程式添加行 Hidden=true
  • Specified 桌面環境,選擇以下之一,其中 desktop_names 是以分號分隔的桌面環境列表(例如 GNOMEGNOME ;Xfce;KDE;):
    • 添加行 NotShowIn=desktop_names 以「隱藏」僅在指定桌面環境中的條目。
    • 將行 OnlyShowIn=desktop_names 添加到僅在指定桌面環境中的「顯示」條目中。

參閱[編輯 | 編輯原始碼]