如何创建仅包含一个类别内容的 Xfce 应用程序菜单?

如何创建仅包含一个类别内容的 Xfce 应用程序菜单?

我想在 Xfce 中创建一个不包含子菜单的应用程序菜单,而只包含.desktop该类别中所有文件的应用程序启动器virtualization。如果您不确定我指的是什么,请参阅下面的屏幕截图。

在此输入图像描述

在这个屏幕截图中,如果我有办法的话,就不会有虚拟化子菜单,而是“Arch Linux”,“CentOS 7-1511”,“Debian 8.2”,ETC。这些虚拟机的所有其他.desktop文件将直接放置在虚拟化应用程序菜单中。我之前写过自定义.menu文件,并且尝试过:

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">

<Menu>
  <Name>Virtualization</Name>
  <Directory>xfce-virtualization.directory</Directory>
  <!-- Read standard .directory and .desktop file locations -->
  <DefaultAppDirs/>
  <DefaultDirectoryDirs/>

  <!-- Read in overrides and child menus from applications-merged/ -->
  <DefaultMergeDirs/>
  <!-- Virtualization Software-->
  <Include>
    <And>
      <Category>Virtualization</Category>
    </And>
  </Include>

  <Layout>
    <Merge type="menus"/>
  </Layout>

</Menu>

但它给了我一个空的虚拟化应用程序菜单。

答案1

为了找到应用程序的快捷方式,.desktop文件必须位于默认目录之一,例如~/.local/share/applications当前用户或/usr/share/applications所有用户的默认目录。

如果您不确定您的情况出了什么问题,请查看我在 Xubuntu 14.04 (Xfce 4.10) 中测试的工作示例,如下所示。

设置示例

以下设置假设:

  • 快捷方式(.desktop文件)已创建并包含至少一个类别,该类别可以存在(即“系统”)或不存在(即“自定义”、“虚拟”);
  • 快捷方式已移至共享或本地目录,即~/.local/share/applications
  • 已创建菜单(.menu文件),以便包含特定定义类别的快捷方式(即“虚拟”);
  • 菜单放置在适当的位置,即~/.config/menus目录

.menu文件包含以下内容。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Menu
  PUBLIC '-//freedesktop//DTD Menu 1.0//EN'
  'http://standards.freedesktop.org/menu-spec/menu-1.0.dtd'>
<Menu>
    <Name>Parent</Name>
    <!--This defines where to find .desktop files-->
    <DefaultAppDirs />
    <!--This affects what entries will appear under "Parent"-->
    <Include>
        <Category>Virtual</Category>
        <Category>X-Xfce-Toplevel</Category>
    </Include>
    <!--This includes what entries will appear under "Child" -->
    <Menu>
        <Name>Child</Name>
        <Include>
        <Filename>exo-terminal-emulator.desktop</Filename>
        </Include>
    </Menu>
    <!--This affects how will the entries appear under "Parent"-->
    <Layout>
        <Menuname>Child</Menuname>
        <Filename>xfce4-about.desktop</Filename>
        <Filename>exo-file-manager.desktop</Filename>
        <Filename>exo-terminal-emulator.desktop</Filename>
        <Filename>vm-test.desktop</Filename>
    </Layout>
</Menu>

在此示例中,我仅创建了一个名为的自定义快捷方式vm-test.desktop,该快捷方式将显示在“父级”菜单下。其他.desktop文件已存在于~/.local/share/applications/usr/share/applications目录中。我故意将这些包括在内,以表明它在两种方面都有效。

截图示例

将“应用程序菜单”小程序添加到 Xfce 面板,然后选择“使用自定义菜单文件”并.menu从共享或本地目录加载文件。最后,单击菜单小程序即可查看快捷方式。

Xfce 菜单小程序属性

Xfce 菜单小程序演示

发现捷径

已添加到~/.local/share/applications目录的快捷方式也将被 Whisker 菜单或应用程序菜单小程序(使用默认文件)自动找到.menu

.desktop指定不存在类别或未指定任何类别的文件将显示在“其他”类别下。如果有多个或多个类别,则仅出现在现有类别即“系统”下,不会出现在“其他”下。

.desktop要理解这一点,请参阅我在上面的示例中使用的文件的内容。

[Desktop Entry]
Version=1.0
Type=Application
Name=VirtualBox VM test
Comment=Run "test" VM in VirtualBox
Exec=virtualbox --startvm "test"
Icon=virtualbox
Terminal=false
StartupNotify=false
Categories=Custom;System;Virtual;
Name[en_US]=VirtualBox VM test
GenericName=VM test

因此,自定义快捷方式将根据指定的类别出现在应用程序菜单中的“系统”类别下。此外,由于它指定了“虚拟”类别,因此自定义.menu文件可以轻松包含.desktop具有“虚拟”类别的任何文件。

补充笔记

.desktop在Debian中,默认情况下没有文件~/.local/share/applications并且~/.config/menus目录不存在(需要手动创建)。

已在 Xubuntu 14.04 (Xfce 4.10) 和 Debian 8.3 Xfce (Xfce 4.10) 32 位系统中测试运行。

参考

相关内容