Linux桌面菜单(.menu)规范

Version 1.1,最新版
20 August 2016


文章目录

  • 介绍
  • 文件位置
  • .desktop文件的扩展
    • 使用Categories和OnlyShowIn的例子
  • 菜单文件的格式
    • 文件类型声明
    • 元素
  • 示例菜单文件
  • A.注册类别
    • 主要类别
    • 其他类别
    • 保留类别
  • B.注册OnlyShowIn环境
  • C.将您的应用程序集成到菜单中
    • 添加菜单项
    • 安装位置

介绍

本文档定义了如何构建用户可见的应用程序层次结构,通常以菜单的形式显示。它允许第三方软件添加适用于所有桌面的菜单项,并允许系统管理员以影响所有桌面的方式编辑菜单。

基本方案非常简单。有关每个应用程序(菜单项)的信息存储在桌面入口文件中(请参阅桌面入口文件标准)。然后,XML配置文件定义菜单项的分层排列(布局)和实际需要显示的菜单项。

由于即要支持传统桌面入口的层次结构,又要允许第三方扩展菜单布局,所以需要合并两个菜单布局。

除了严格定义每个菜单的规范之外,本规范还提到了许多布局/呈现方式。这一部分规范是可选的,实际上可以选择忽略这些提示。

文件位置

本规范中涉及的文件根据 桌面基本目录规范 定位。

以下是此规范定义的文件:

  • $XDG_CONFIG_DIRS/menus/${XDG_MENU_PREFIX}applications.menu
$XDG_CONFIG_DIRS 默认位置为 $HOME/.config : /etc/xdg 

例如,它应该将$XDG_MENU_PREFIX环境变量分别设置 为“gnome-”、“kde-”。
如果系统同时包含GNOME和KDE桌面环境,则可以决定使用gnome-applications.menu作为GNOME会话中的菜单布局,将kde-applications.menu作为KDE会话中的菜单布局。

如果用户拥有自己的${XDG_MENU_PREFIX}applications.menu,它将取代系统的applications.menu。

  • $XDG_CONFIG_DIRS/menus/applications-merged/

    默认合并目录包含在元素中。按照惯例,第三方可以在此位置添加新的

    文件以创建自己的子菜单。

    请注意,根据所使用的桌面环境,使用gnome-applications.menu或kde-applications.menu;在两种情况下,仍必须使用applications-merged作为默认合并目录。

    对于除应用程序主要菜单之外的任务或菜单,可以选择使用除application.menu以外的名称的.menu文件。在这种情况下,默认合并目录名称的第一部分是从.menu文件的名称派生的。

    例如,在使用preferences.menu文件来描述附加菜单的系统中,preferences.menu文件中元素中包含的默认合并目录将变为 $XDG_CONFIG_DIRS/ menus / preferences-merged /

  • $XDG_DATA_DIRS/applications/

    该目录包含每个可能菜单项的.desktop文件。$XDG_DATA_DIRS中的每个目录都应该被使用(即,从所有目录中收集桌面入口,而不仅仅是存在的第一个目录入口)。当两个桌面入口具有相同名称时,将使用路径中较早出现的那个。

    菜单文件中的元素表示默认的桌面入口位置列表应该被扫描。如果菜单文件不包含,则不扫描这些位置。

  • $XDG_DATA_DIRS/desktop-directories/

    此目录可能包含与菜单布局中的文件夹关联的目录入口。每个目录都应该被使用。仅使用以.directory结尾的文件; 其他文件被忽略。

    菜单文件中的元素表示此默认的目录条目位置列表。如果菜单文件不包含,则不扫描这些位置。

.desktop文件的扩展

该规范增加了三个新领域的桌面项:Categories, OnlyShowIn和NotShowIn。

Categories字段是用于对菜单项进行分类的字符串列表。例如,AudioVideo类别中的应用程序 可能最终出现在“声音和视频”子菜单中。附录A.注册类别 列举了标准类别。不在此文档中的类别必须以字符串“X-”作为前缀,表示它们是扩展名。类别区分大小写。

桌面入口文件应列出所有适用的类别。他们不应该列出只是模糊或可能适用的类别,因为用户最终会在六个地方看到相同的桌面入口。但通常情况下,给出的几个类别总有适用的。

OnlyShowIn字段是一个字符串列表,用于标识应显示在特定的环境。如果存在 OnlyShowIn字段,则应该标明。字符串区分大小写。附录B.Registered OnlyShowIn Environments 枚举了某些常见的环境。

NotShowIn字段是一个字符串列表,用于标识不应显示在特定的环境。如果存在NotShowIn字段,则应该标明。字符串区分大小写。附录B.Registered OnlyShowIn Environments枚举了某些常见的环境。

不在此文档中的环境必须以字符串“X-”作为前缀,表示它们是扩展名。环境区分大小写。

使用Categories和OnlyShowIn的例子

  • 基于Qt的图像查看器的桌面入口可能包含以下Categories行:
    Categories=Qt;Graphics;RasterGraphics;Viewer;
  • Octave,一个命令行的数学程序(还应该有Terminal=true这一行)的桌面入口
    Categories=ConsoleOnly;Math;
  • 仅应出现在GNOME中的GNOME特定计算器程序的桌面文件,可能包含下面字段:
	Categories=GNOME;Utility;
	OnlyShowIn=GNOME;

菜单文件的格式

菜单文件必须是格式良好的XML文件,并以扩展名“.menu”结尾。它们还应符合菜单文件DTD,这意味着不允许对文件格式进行特定的扩展。如果实现遇到不符合相关DTD的菜单文件,则可能会停止运行。请注意,关联的DTD版本可能与本文档中定义的版本不同。

当更新现有菜单文件时,可能需要将标识符更新为较新版本的DTD。永远不应将现有菜单文件的标识符更新为旧版本。为了与更新的版本保持兼容,应该忽略并保留它不知道如何处理的任何XML元素,属性和属性值。

文件类型声明

此版本规范的菜单文件必须使用以下命名空间,公共和系统标识符:

命名空间:http://www.freedesktop.org/standards/menu

1.1的公共标识符:PUBLIC “-//freedesktop//DTD Menu 1.0//EN”

1.1的系统标识符:http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd

这是一个示例文档类型声明:


所有菜单文件必须包含文档类型声明,以便实现可以适应此规范的不同版本(因此实现可以根据DTD验证菜单文件)。

元素

根元素是

。每个元素可以包含任意数量的嵌套元素,表示子菜单。


	
	

<Menu>
	
	<AppDir>/usr/share/applinkAppDir>
Menu>

比如: /foo/bar/Hello.desktop 的桌面文件id号为 Hello.desktop
   /foo/bar/bo/oz/Hello.desktop 的桌面文件id号为 bo-oz-Hello.desktop

如果作为给出的文件名不是绝对路径,则它应该相对于要解析的菜单文件的位置。
递归扫描,向后合并
元素与元素的顺序不相关,也便于合并。

<Menu>
	<DefaultAppDirs/>
Menu>

该元素没有内容。默认包含app dir位置($datadir/applications/)的元素列表。将扩展为列表时,搜索路径中较早的默认位置稍后会在

中显示,以便它们具有优先级。
$datadir默认为 ~/.local/share : /usr/local/share : /usr/share

<Menu>
	<Directory>/usr/share/desktop-directoriesDirectory>
Menu>

该元素的内容是目录名称。递归扫描,向后合并。只加载以扩展名“.directory”结尾的文件
例如,如果/usr/share/desktop-directories指定为,则相对路径 /usr/share/desktop-directories/foo/bar.directory为 foo/bar.directory。

<Menu>
	<DefaultDirectoryDirs />
Menu>
<Menu>
	<Name>金山办公Name>
Menu>

必须元素。字段不得以斜杠字符(“/”)开头。例如,“Foo/Bar/Baz”是有效的菜单路径。


	金山办公
	wps-office.directory

给定指定的 .directory文件

  • and
    未分配桌面入口
  • and
    如果菜单包含元素后面没有元素,则应忽略该菜单。
<Menu>
	<Name>ApplicationsName>
	<Directory>kf5-unknown.directoryDirectory>
	<OnlyUnallocated/>
	<Include>
		<Not>
			
			<And>
				<Category>CoreCategory>
				<Not><Category>KDECategory>Not>
			And>
			
			<Category>X-SuSE-YaSTCategory>
			<Category>X-KDE-settings-hardwareCategory>
			<Filename>kde-medianotifications.desktopFilename>
			<Filename>kde-audioencoding.desktopFilename>
		Not>
	Include>
Menu>

使用元素指定匹配规则。


<Menu>
	<MergeFile type="path" />
Menu>
<Menu>
	<MergeDir>/usr/share/merger-dirMergeDir>
Menu>
<Menu>
	<DefaultMergeDirs />
Menu>

  • 旧版菜单层次结构

  • 包含KDE支持的传统桌面文件位置,其硬编码前缀为“kde-”,
<Move>
  <Old>FooOld>
  <New>BarNew>
  <Old>Foo2Old>
  <New>Bar2New>
Move>   

元素包含一对 / 元素

<DefaultLayout>
	<Merge type="menus"/>
	<Merge type="files"/>
	<Separator/>
	<Menuname>MoreMenuname>
DefaultLayout>

示例菜单文件



<Menu>
	<Name>ApplicationsName>
	<Directory>Applications.directoryDirectory>
	
	
	
	<DefaultAppDirs/>
	<DefaultDirectoryDirs/>
	
	
	<MergeDir>applications-mergedMergeDir>
	
	
	<LegacyDir>/usr/share/applnkLegacyDir>
	
	
	<DefaultLayout>
	<Merge type="menus"/>
	<Merge type="files"/>
	<Separator/>
	<Menuname>MoreMenuname>
	DefaultLayout>
	
	
	<Move>
	<Old>FooOld>
	<New>BarNew>
	<Old>Foo2Old>
	<New>Bar2New>
	Move>          
	
	
	<Menu>
	<Name>PreferencesName>
	<Directory>Preferences.directoryDirectory>
	<MergeFile>preferences.menuMergeFile>
	Menu>
	
	
	<Menu>
	<Name>OfficeName>
	<Directory>Office.directoryDirectory>
	<Include>
	 <Category>OfficeCategory>
	Include>
	<Exclude>
	 <Filename>foo.desktopFilename>
	Exclude>
	Menu>

Menu>

A.注册类别

主要类别

Main Category Description Notes
AudioVideo 音频、视频类相关类软件
Audio 音频 必须包括AudioVideo
Video 视频 必须包括AudioVideo
Development 编程开发
Education 教育类、学习类
Game 游戏娱乐
Graphics 用于查看,创建或处理图形的应用程序
Network 网络应用程序,需要联网才能使用的应用
Office 办公室类型
Science 科学软件
Settings 设置应用程序 可能出现在单独的菜单中或作为“控制中心”的一部分
System 系统工具
Utility 小型实用应用,“配件”

其他类别

Additional Category Description Related Categories
Building 构建应用程序的工具 Development
Debugger 调试应用程序的工具 Development
IDE IDE应用程序 Development
GUIDesigner GUI设计应用程序 Development
Profiling 分析工具 Development
RevisionControl 像cvs或subversion这样的应用程序 Development
Translation 翻译工具 Development
Calendar 日历应用程序 Office
ContactManagement 例如地址簿 Office
Database 数据库 Office or Development or AudioVideo
Dictionary 字典 Office or TextTools
Chart 图表应用程序 Office
Email 邮件 Office or Network
Finance 金融相关 Office
FlowChart 流程图应用程序 Office
PDA PDA管理工具 Office
ProjectManagement 项目管理应用 Office or Development
Presentation 演示软件 Office
Spreadsheet 电子表格 Office
WordProcessor 文字处理器 Office
2DGraphics 基于2D的图形应用 Graphics
VectorGraphics 用于查看,创建或处理矢量图形的应用程序 Graphics;2DGraphics
RasterGraphics 用于查看,创建或处理栅格(位图)图形的应用程序 Graphics;2DGraphics
3DGraphics 用于查看,创建或处理3-D图形的应用程序 Graphics
Scanning 扫描文件/文本的工具 Graphics
OCR 光学字符识别应用 Graphics;Scanning
Photography 相机工具等 Graphics or Office
Publishing 桌面出版应用程序和颜色管理工具 Graphics or Office
Viewer 用于查看 例如图形或pdf文件的工具 Graphics or Office
TextTools 文本工具实用程序 Utility
DesktopSettings 桌面配置工具 Settings
HardwareSettings 管理硬件组件的工具,如声卡,视频卡或打印机 Settings
Printing 管理打印机的工具 HardwareSettings;Settings
PackageManager 包管理器应用程序 Settings
Dialup 拨号程序 Network
InstantMessaging 即时消息客户端 Network
Chat 聊天客户端 Network
IRCClient IRC客户端 Network
Feed RSS,播客和其他基于订阅的内容 Network
FileTransfer FTP或P2P程序等工具 Network
HamRadio HAM无线电软件 Network or Audio
News 新闻阅读器或新闻自动收报机 Network
P2P 一个P2P程序 Network
RemoteAccess 远程管理PC的工具 Network
Telephony 通过PC拨打电话 Network
TelephonyTools 电话工具,拨号,管理PBX,… Utility
VideoConference 视频会议软件 Network
WebBrowser Web浏览器 Network
WebDevelopment 适用于Web开发人员的工具 Network or Development
Midi 一个与MIDI相关的应用程序 AudioVideo;Audio
Mixer Just a mixer AudioVideo;Audio
Sequencer 一个音序器 AudioVideo;Audio
Tuner 一个调谐器 AudioVideo;Audio
TV 电视应用程序 AudioVideo;Video
AudioVideoEditing 编辑音频/视频文件 Audio or Video or AudioVideo
Player 播放音频/视频文件 Audio or Video or AudioVideo
Recorder 记录音频/视频文件 Audio or Video or AudioVideo
DiscBurning 刻录光盘 AudioVideo
ActionGame 动作游戏 Game
AdventureGame 冒险游戏 Game
ArcadeGame 街机游戏 Game
BoardGame 棋牌游戏 Game
BlocksGame 落块游戏 Game
CardGame 纸牌游戏 Game
KidsGame 适合孩子的游戏 Game
LogicGame 像拼图等逻辑游戏 Game
RolePlaying 角色扮演游戏 Game
Shooter 射击游戏 Game
Simulation 模拟游戏 Game
SportsGame 体育比赛游戏 Game
StrategyGame 策略游戏 Game
Art 教授艺术的软件 Education or Science
Construction Education or Science
Music 音乐软件 AudioVideo or Education
Languages 学习外语的软件 Education or Science
ArtificialIntelligence 人工智能软件 Education or Science
Astronomy 天文软件 Education or Science
Biology 生物学软件 Education or Science
Chemistry 化学软件 Education or Science
ComputerScience 计算机科学软件 Education or Science
DataVisualization 数据可视化软件 Education or Science
Economy 经济软件 Education or Science
Electricity 电力软件 Education or Science
Geography 地理软件 Education or Science
Geology 地质软件 Education or Science
Geoscience 地球科学软件,GIS Education or Science
History 历史软件 Education or Science
Humanities 哲学,心理学和其他人文科学的软件 Education or Science
ImageProcessing 图像处理软件 Education or Science
Literature 文学软件 Education or Science
Maps 用于查看地图,导航,地图,GPS的软件 Education or Science or Utility
Math 数学软件 Education or Science
NumericalAnalysis 数值分析软件 Education;Math or Science;Math
MedicalSoftware 医疗软件 Education or Science
Physics 物理学软件 Education or Science
Robotics 机器人软件 Education or Science
Spirituality 宗教和精神软件,神学 Education or Science or Utility
Sports 体育软件 Education or Science
ParallelComputing 并行计算软件 Education;ComputerScience or Science;ComputerScience
Amusement 一个简单的娱乐
Archiving 存档/备份数据的工具 Utility
Compression 管理压缩数据/归档的工具 Utility;Archiving
Electronics 电子软件,例如电路设计师
Emulator 另一个平台的模拟器,例如DOS模拟器 System or Game
Engineering 工程软件,例如CAD程序
FileTools 文件工具 Utility or System
FileManager 文件管理器 System;FileTools
TerminalEmulator 终端 System
Filesystem 文件系统工具 System
Monitor 监视监视某些资源或活动的应用程序/小程序 System or Network
Security 一种安全工具 Settings or System
Accessibility 无障碍 Settings or Utility
Calculator 一个计算器 Utility
Clock 时钟应用程序/小程序 Utility
TextEditor 文本编辑器 Utility
Documentation 帮助或文档
Adult 处理成人或显性材料的应用
Core 重要的应用程序,是桌面的核心,例如文件管理器或帮助浏览器
KDE 基于KDE库的应用程序 QT
GNOME 基于GNOME库的应用程序 GTK
XFCE 基于XFCE库的应用程序 GTK
GTK 基于GTK +库的应用程序
Qt 基于Qt库的应用程序
Motif 基于Motif库的应用程序
Java 基于Java GUI库的应用程序,例如AWT或Swing
ConsoleOnly 仅适用于终端(基于文本或命令行应用程序)的应用程序

保留类别

保留类别 描述
Screensaver 屏幕保护程序(启动此应用应激活屏幕保护程序)
TrayIcon 主要是“系统托盘”或“通知区域”的图标的应用程序(打开普通窗口的应用程序,恰好有托盘图标也不应列出此类别)
Applet 将在面板或其他此类应用程序中运行的applet,可能是特定于桌面的
Shell 一个shell(一个实际的特定shell,如 bash或者tcsh,而不是TerminalEmulator)

B.注册OnlyShowIn环境

OnlyShowIn Value Environment
GNOME GNOME桌面
KDE KDE桌面
LXDE LXDE桌面
LXQt LXQt桌面
MATE MATÉ桌面
Razor Razor-qt桌面
ROX ROX桌面
TDE Trinity桌面
Unity Unity Shell
XFCE XFCE桌面
EDE EDE桌面
Cinnamon Cinnamon桌面
Pantheon Pantheon桌面
Old 传统菜单系统

C.将您的应用程序集成到菜单中

添加菜单项

.desktop文件安装在$datadir/applications/中,命名如:vendor-foo.desktop或者vendor/foo.desktop
.menu文件安装在$sysconfdir/menus/applications-merged/
.directory文件安装在$datadir/desktop-directories/

安装位置

$datadir默认为$HOME/.local/share : /usr/local/share : /usr/share
$sysconfig默认为/etc/xdg/

  • .desktop文件
    datadir/applications/shinythings-webmirror.desktop:
[Desktop Entry]
Encoding=UTF-8
Type=Application

Exec=webmirror
Icon=webmirror

Name=WebMirror
Name[nl]=WebSpiegel

datadir/applications/shinythings-webmirror-admin.desktop:

[Desktop Entry]
Encoding=UTF-8
Type=Application

Exec=webmirror-admintool
Icon=webmirror-admintool

Name=WebMirror Admin Tool
Name[nl]=WebSpiegel Administratie Tool
  • .directory文件
    datadir/desktop-directories/shinythings-webmirror.directory:
[Desktop Entry]
Encoding=UTF-8

Icon=webmirror

Name=WebMirror
Name[nl]=WebSpiegel
  • .menu文件
    sysconfdir/menus/application-merged/shinythings-webmirror.menu:


	Applications
	
		WebMirror
		shinythings-webmirror.directory
		
			shinythings-webmirror.desktop
			shinythings-webmirror-admin.desktop
		
	

原文链接:https://specifications.freedesktop.org/menu-spec/menu-spec-latest.html

你可能感兴趣的:(linux,linux)