桌面項
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;
Type
和Name
是必須的。關鍵字賦值[編輯 | 編輯原始碼]
所有可用的關鍵字都可以在freedesktop網站上找到。
例如,Type
關鍵字定義了三種類型的桌面項:應用程式(type 1)、連結(type 2)和目錄(type 3)。
Version
關鍵字不代表應用程式的版本,而是代表該文件符合的桌面項規範的版本。
Name
、GenericName
和Comment
通常包含它們組合形式的冗餘值,例如:
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
(詳細)參數以顯示可能的桌面輸入錯誤。圖標[編輯 | 編輯原始碼]
參閱圖標主題規範。
通用圖標格式[編輯 | 編輯原始碼]
以下是圖標常用圖像格式的概述。
擴展名 | 全稱和/或説明 | 圖像類型 | 是否容器型 | 是否支持 |
---|---|---|---|---|
.png | 便攜式網絡圖形 | 位圖 | 否 | 是 |
.svg(z) | 可縮放矢量圖形 | 矢量圖 | 否 | 是(可選) |
.xpm | X PixMap | 位圖 | 否 | 是(不推薦) |
.gif | 圖像互換格式 | 位圖 | 否 | 否 |
.ico | Windows圖標格式 | 位圖 | 是 | 否 |
.icns | Apple圖標格式 | 位圖 | 是 | 否 |
圖標格式轉換[編輯 | 編輯原始碼]
如果您偶然發現 freedesktop.org 標準不支持的圖標格式(例如 gif
或 ico
),您可以使用「轉換」工具 (這是 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 標準 規定了程序應以何種順序和目錄查找圖標:
$HOME/.icons
(為了向後兼容)$XDG_DATA_DIRS/icons
/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'
這種形式設置可執行文件字段。
- 更多信息請參閱 gendesk 項目。
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
是以分號分隔的桌面環境列表(例如GNOME
、GNOME ;Xfce;KDE;
):
- 添加行
NotShowIn=desktop_names
以「隱藏」僅在指定桌面環境中的條目。
- 添加行
- 將行
OnlyShowIn=desktop_names
添加到僅在指定桌面環境中的「顯示」條目中。
- 將行