Xdg-menu - Arch Linux 中文维基

跳至內容

# Xdg-menu

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Xdg-menu，最近一次同步於 2020-04-10，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

xdg-menu是一個用於為以下窗口管理器生成XDG桌面菜單的工具：

- awesome
- Blackbox
- Fluxbox
- FVWM
- IceWM
- Openbox
- twm
- Window Maker

KDE, Gnome, Xfce，Enlightenment已經兼容XDG。

## 安裝

安裝archlinux-xdg-menu包包。

## 菜單層級結構

- 應用
  - 輔助功能
  - 附件
  - 開發
  - 教育
  - 遊戲
  - 圖形
  - 網際網路
  - 多媒體
  - 辦公
  - 其他
  - 科學
  - 設置
  - 系統

## 配置

Xdg_menu依賴三類信息來生成菜單：一個根菜單（即通常通過命令行傳入的 XML 菜單模板）、上次運行時緩存的信息，以及一系列配置文件。

- 你可以在`/etc/xdg/menus`中找到一些XML菜單模板.
- 如果更改 xdg_menu 的代碼以更改菜單布局，請確保刪除`~/.xdg_menu_cache`中的所有內容，否則你可能將花費數小時試圖弄明白為什麼對Perl腳本所做的修改沒有生效。
- 各個應用程式的配置文件位於`/usr/share/applications`。

其他配置文件目錄可以在`/usr/share`下找到。在大多數情況下，你無需改動這些文件。不過，如果你希望調整菜單的布局，可以通過修改菜單模板以進行小幅調整。若需大幅改動，則需要直接修改Xdg_menu的Perl腳本本身。

如果你發現某些應用程式未顯示在菜單中，或者其名稱顯示異常，那麼你需要檢查 `/usr/share/applications` 目錄下的相應 `.desktop` 文件，並參考桌面入口規範。

### 從其他目錄添加桌面入口

默認情況下，Xdg-menu會加載那些將桌面入口（desktop entry）安裝到`/usr/share/applications`的應用程式。若要將桌面入口安裝在用戶目錄（例如`~/.local/share/applications`）中的應用程式也加入菜單的菜單中，需編輯`/etc/xdg/menus/arch applications.menu`文件，並為相關目錄添加`<AppDir>`標籤，如下所示：

    /etc/xdg/menus/arch-applications.menu

    <Menu>

      <Name>Applications</Name>
      <Directory>Arch-Applications.directory</Directory>
      <DefaultAppDirs/>
      <AppDir>/home/username/.local/share/applications</AppDir>
      <DefaultDirectoryDirs/>
      <DefaultMergeDirs/>
      ...

## 使用

### xdg_menu

    xdg_menu [--format <format>] [--desktop <desktop>]
             [--charset <charset>] [--language <language>]
    	 [--root-menu <root-menu>] [--die-on-error]
    	 [--fullmenu] [--help]

    	format - output format
    	         possible formats: twm, WindowMaker, fvwm2, icewm, ion3
    	                           blackbox, fluxbox, openbox,
    				   xfce4, openbox3, openbox3-pipe, awesome
    				   readable
    		 default: WindowMaker

     	fullmenu  - output a full menu and not only a submenu

    	desktop - desktop name for NotShowIn and OnlyShowIn
    		 default: the same as format

    	charset - output charset
    		 default: <locale>

    	language - output language
    		 default: <locale>

    	root-menu - location of root menu file
    		 default: /opt/gnome/etc/xdg/menus/applications.menu

    	die-on-error - abort execution on any error,
    		 default: try to continue

    	verbose - print debugging information

    	help - print this text

### update-menus

update-menus 可根據 XDG 數據更新窗口管理器（WM）的菜單，並可配置為自動執行此操作。

該腳本是xdg_menu的一個封裝，依賴於 `/etc/update-menus.conf`配置文件

要使用它，你需要安裝 archlinux-xdg-menu包 (其中包含xdg_menu)

在`/etc/update-menus.conf` 文件中，你需要從支持的窗口管理器列表中選擇需要為其生成菜單的WM。配置文件中允許使用#添加注釋。

所有生成的菜單都會存放在`/var/cache/xdg-menu/`目錄下。有關具體窗口管理器的配置示例，請參閱本頁的「WM特定示例」部分。

## 示例

### Awesome窗口管理器

#### 使用 xdg_menu ：

    $ xdg_menu --format awesome > ~/.config/awesome/xdg_menu.lua

編輯 rc.lua ，按如下方式更改

- 添加一行require語句，以加載你生成的xdg_menu.lua文件
- 在你的awful.menu對象中添加一個菜單項，調用xgd_menu生成的應用程式菜單

    ...
    xdg_menu = require("xdg_menu")
    ...

    ...
    mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                        { "Applications", xdg_menu },
                                        { "open terminal", terminal }
                                      }
                            })
    ...

### IceWM

## 使用 xdg_menu

    $ xdg_menu --format icewm --fullmenu --root-menu /etc/xdg/menus/arch-applications.menu >>~/.icewm/programs

#### 使用 update-menus

- 在 /etc/update-menus.conf 取消對icewm的注釋
- 使用root用戶運行 update-menus 命令
- 將 ~/.icewm/programs 符號連結到 /var/cache/xdg-menu/icewm/programs

### Ion3

#### 使用 xdg_menu

    $ xdg_menu --format ion3  --root-menu /etc/xdg/menus/arch-applications.menu >~/.ion3/default-session--0/_xdg-menu.lua

之後，將 cfg_menus.lua 更改為包含 _xdg-menu.lua 文件，並將菜單添加到主菜單中。例如：

    ...

    dopath("_xdg-menu")

    -- Main menu
    defmenu("mainmenu", {
        submenu("XDG Menu",         "<NAME-OF-FIRST-MENU-IN-_xdg-menu.lua-FILE>"),
        submenu("Programs",         "appmenu"),
        menuentry("Lock screen",    "ioncore.exec_on(_, 'xlock')"),
        menuentry("Help",           "mod_query.query_man(_)"),
        menuentry("About Ion",      "mod_query.show_about_ion(_)"),
        submenu("Styles",           "stylemenu"),
        submenu("Session",          "sessionmenu"),
    })

    ...

#### 使用update-menus

- 在 /etc/update-menus.conf 取消對ion3的注釋
- 使用root用戶運行 update-menus 命令
- 將 cfg_menus.lua 更改為包含 xdg-menu.lua 文件，並將菜單添加到主菜單中

例如:

    ...

    dopath("/var/cache/xdg-menu/ion3/xdg-menu.lua")

    -- Main menu
    defmenu("mainmenu", {
        submenu("XDG Menu",         "<NAME-OF-FIRST-MENU-IN-xdg-menu.lua-FILE>"),
        submenu("Programs",         "appmenu"),
        menuentry("Lock screen",    "ioncore.exec_on(_, 'xlock')"),
        menuentry("Help",           "mod_query.query_man(_)"),
        menuentry("About Ion",      "mod_query.show_about_ion(_)"),
        submenu("Styles",           "stylemenu"),
        submenu("Session",          "sessionmenu"),
    })

    ...

### FluxBox

#### 使用 xdg_menu

    $ xdg_menu --format fluxbox  --root-menu /etc/xdg/menus/arch-applications.menu >~/.fluxbox/my-menu

將菜單文件更改為包含生成的菜單。

例如添加行:

    [include] (my-menu)

#### 使用 update-menus

- 在 /etc/update-menu.conf 中取消對fluxbox的注釋
- 使用root用戶運行 update-menus
- 將菜單文件更改為包含生成的菜單

例如添加行:

    [include] (/var/cache/xdg-menu/fluxbox/boxrc)

### OpenBox

#### 使用 xdg_menu

生成菜單:

    $ xdg_menu --format openbox3 --root-menu /etc/xdg/menus/arch-applications.menu > xdg-menu.xml

然後手動將其添加到 menu.xml 中。例如，將 xdg-menu.xml 放入 menu.xml 並添加：

    <menu id="Applications" />

進入根菜單。

#### 作為管道菜單

使用 xdg_open 作為管道菜單，您可以獲得額外的好處，即在安裝新應用程式時，菜單會自動更新。

在 menu.xml 中的根菜單標記之間添加以下內容:

    <menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" />

一個非常基本的例子:

    <?xml version="1.0" encoding="UTF-8"?>

    <openbox_menu xmlns="http://openbox.org/3.4/menu">

    <menu id="root-menu" label="Openbox 3">
      <menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" />
      <separator />
      <item label="Log Out">
        <action name="Exit">
          <prompt>yes</prompt>
        </action>
      </item>
    </menu>

    </openbox_menu>

#### 使用 update-menus

- 在 /etc/update-menu.conf 中取消對openbox的注釋
- 以root用戶運行 update-menus
- 將 menu.xml 文件更改為包含生成的菜單

例如，在根菜單中添加以下內容:

    <menu id="xdg-menu" label="XDG Menu" execute="cat /var/cache/xdg-menu/openbox/menu.xml"/>

### Twm

#### 使用 xdg_menu

使用

    $ xdg_menu --format twm --root-menu /etc/xdg/menus/arch-applications.menu >my-twm-menu

並手動添加到 twmrc 中。對於具有m4預處理的twm衍生物，如vtwm或ctwm，可通過添加

    sinclude(`/PATH/TO/my-twm-menu')

到 *twmrc.

#### 使用 update-menus

- 在 /etc/update-menu.conf 中取消對twm的注釋
- 添加到 /etc/X11/twm/system.twmrc 文件應用程式菜單中 (添加以下這行:

     "apps"          f.menu "Applications"

)到菜單中

- 使用root用戶運行 update-menus
- 運行 twm -f /var/cache/xdg-menu/twm/twmrc

(您還需要將其他自定義項添加到 /etc/X11/twm/system.twmrc)

### WindowMaker

#### 使用 xdg_menu

使用

    $ xdg_menu --format WindowMaker --root-menu /etc/xdg/menus/arch-applications.menu >my-wm-menu

然後添加

    #include "my-wm-menu"

到你的 WindowMaker 菜單文件。

您還可以使用WPrefs「應用程式菜單定義」，並將xdg命令作為參數添加到「生成的子菜單」對象中。

#### 使用 update-menus

- 在 /etc/update-menus.conf 取消對 WindowMaker 的注釋
- 用root用戶運行 update-menus
- 添加

    #include "/var/cache/xdg-menu/WindowMaker/wmrc"

到你的菜單文件

### Fvwm2

#### 使用 xdg_menu

生成菜單

    $ xdg_menu --format fvwm2 --root-menu /etc/xdg/menus/arch-applications.menu >fvwm2-menu

然後把菜單添加到根菜單

    read fvwm2-menu

    AddToMenu MenuFvwmRoot  "Root Menu"             Title
    +                       "&0. XDG Menu"          Popup xdg_menu

#### 使用 update-menus

- 在 /etc/update-menus.conf 取消對 fvwm2 的注釋
- 使用root用戶運行 update-menus
- 修改你的 .fvwm2rc 以使其包含創建的菜單，示例:

    AddToMenu MenuFvwmRoot  "Root Menu"             Title
    +                       "&0. XDG Menu"          Popup xdg_menu

    read /var/cache/xdg-menu/fvwm2/fvwm2rc

### BlackBox

#### 使用 xdg_menu

    $ xdg_menu --format blackbox  --root-menu /etc/xdg/menus/arch-applications.menu >my-menu

修改你的菜單文件以使其包含創建的菜單

例如添加:

    [include] (my-menu)

#### 使用 update-menus

- 在 /etc/update-menus.conf 取消 blackbox 的注釋
- 使用root用戶運行 update-menus
- 更改你的菜單文件以使其包含創建的菜單

例如添加:

    [include] (/var/cache/xdg-menu/blackbox/boxrc)

## 另請參見

- Sawfish#Menus
- https://github.com/gapan/xdgmenumaker

分類：​

- Freedesktop.org

Xdg-menu
新增話題