我想在 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
从共享或本地目录加载文件。最后,单击菜单小程序即可查看快捷方式。
发现捷径
已添加到~/.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 位系统中测试运行。