同步操作将从 深度社区/docs 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
title: 判断是否社区版、如何显示 Logo 以及获取发行版名称
date: 2020-12-11 10:56:23
permalink: /pages/1dbe1c/
判断是否社区版、如何显示 Logo 以及获取发行版名称
应用有时会收到类如在某个特定版本中不包含指定功能的需求,例如“社区版不包含开发者模式”、“社区版显示 deepin 字样”、“社区版提供以管理员身份打开”等。对于这些问题,尽管看上去是可以直接通过判断是否为社区版来做到,但实际都应采取不同的方案实现。下面即提供了从 DTK 中获取此类信息的途径以及概述如何判断选取那种方案进行实现的方式。
[TOC]
应用有时会收到类如在某个特定版本中不包含指定功能的需求,例如“社区版不包含开发者模式”、“社区版显示 deepin 字样”、“社区版提供以管理员身份打开”等。对于这些问题,尽管看上去是可以直接通过判断是否为社区版来做到,但实际都应采取不同的方案实现。下面即提供了从 DTK 中获取此类信息的途径以及概述如何判断选取那种方案进行实现的方式。
DTK 中的 DSysInfo 提供了此类需求所对应的可能适用的信息,包括如下这些。
由于 DDE 本身可以在很多发行版中运行,例如官方的 UOS 和 Deepin,以及社区维护的 Archlinux 和 Ubuntu 等。DSysInfo 中包含了名为 ProductType 的枚举,对应了常见的发行版类型。若需判断当前发行版是否为 Deepin,则只需通过静态函数 DSysInfo::productType()
即可获得对应枚举。
注意:Deepin 曾经也有专业版和服务器版提供给厂商,故不能简单的通过判断是否为社区版来判断是否应当显示 Deepin,对于此类判断应当显示何种版本的需求,请看下一条。
由我们官方维护的版本包括了社区版、专业版、服务器版和个人版这些不同类型的版本,以后也可能会有新增版本。在 DSysInfo 中提供了静态函数 DSysInfo::deepinType()
来对应 /etc/deepin-version
文件里提供的对应版本信息。
需要注意的是,在 deepin-version
配置文件中,早期 Deepin
社区版使用的为 Desktop
(即桌面版)作为社区版字段,现在我们也仍然保持了这个记法。
为了方便,DTK 提供了 DSysInfo::isCommunityEdition()
静态函数判断当前版本是否为社区版,当前(2020/04/09)的实现逻辑为,如果当前使用的版本不是专业版、个人版或服务器版,且当前的发行版不是 UOS (UOS 不提供社区版)的话,则认为当前是社区版。
注意:非 Linux 环境下(例如 Windows 下),此函数调用一律返回 true 。
在 v20
后的版本,Deepin
和 UOS
提供了 /usr/share/deepin/distribution.info 配置文件用以针对不同发行版提供不同的定制显示方案,包括了发行版名称、Logo和网站等信息。
DTK 提供了从上述配置文件读取信息的接口,并提供了当配置文件不存在时的显示行为,可以直接使用 DTK
提供的接口获得对应信息。
为了方便,DTK
提供了DSysInfo::distributionOrgLogo()
接口来获取常见场景下应当显示的 Logo
。其中对于第一个参数 Logo
,保持 DSysInfo::OrgType
为 Distribution (默认值,表示发行版本身),并通过第二个参数传递不同类型即可获得不同类型的 Logo,另可以通过第三个参数获得回落选项,便于当无对应配置时显示自己的提供的 Logo
。
此接口提供了四种类型的 Logo,分别为普通大小(Normal)、小尺寸 Logo (Light,关于对话框使用此 Logo)、纯色符号化 Logo(Symbolic,预留的类型,暂时不建议使用)、和透明 Logo(Transparent,用于水印等场景)。简单起见,可以直接打开 /usr/share/deepin/distribution
位置来核对 Logo 是否符合需求。
通过 DSysInfo::distributionOrgName
和 DSysInfo::distributionOrgWebsite
即可获取定制的显示名称和网址。
注意:此处的名称是适用于对用户展示的名称,和当前使用的是何种发行版无关,例如配置文件可以提供“统一操作系统”等名称,实际发行版类型建议通过 productType
接口判断。
当有版本差异需求时,应当先明确差异本身通过何种手段进行控制。具体情况应当视实际情况决定,但通常可以根据如下原则判断:
对于可以通过判断所需功能的接口是否存在的情况,直接判断接口是否存在,而不需要判断发行版或系统版本。
例如如下需求不应当判断是否为社区版来决定是否显示:
应当确认自己的需求到底是只和发行版有关还是只和是否是商业版本有关,简单起见可以假定两个场景来判断:“我的需求,在 Deepin 专业版 中应当具有怎样的行为”和“我的需求,在 Archlinux DDE 桌面环境中应当具有怎样的行为”。
如下需求不应当判断是否为社区版来决定其行为:
A:不需要。
A:如下:
A:对于本地化的文案,可以。对于非本地化的文案,不可以。
由于大多数应用依赖 DTK 提供的接口来获得当前的版本类型等信息,此处 Type 对应了 DSysInfo::DeepinType 枚举的值,由于 DTK 要保证兼容性,故无法随意变更解析规则。
若确实有充足的理由进行此类变更(一般会拒绝随意修改此配置),应当发起需求变更申请并由开发评估讨论,并尽可能采取不影响二进制(ABI)兼容和接口(API)兼容的方案进行变更。变更请协调 deepin-desktop-base 包的维护者(当前 @赖洪圣 )和 DTK 的 dtkcore 项目维护者 (当前 @陈可 )一同核对。
一般情况下,应用可以并应当通过 DSysInfo::DeepinType
枚举自行进行差异化显示行为。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。