KDE Kiosk 模式

作者:Caleb Tennis

KDE 桌面最强大的方面之一是能够完全自定义用户体验。大多数 KDE 程序使用桌面系统提供的核心功能和插件,从而创建一致的用户界面和易于访问的配置设置。KDE 的 Kiosk 模式是此接口的一个流行的扩展,它允许系统管理员为最终用户配置桌面的所有方面,并可以选择阻止最终用户修改提供的设置。

KDE 应用程序使用类似于 Microsoft Windows INI 文件的配置框架。这种文件类型的一个优点是管理员或用户可以轻松地直接手动编辑配置文件。INI 文件格式是一个普通的文本文件,它被分成更小的命名部分,每个部分都有一对或多对键/值。这些值由应用程序直接使用和存储

...
[GroupName]
key=value
key2=value2
...

配置文件位于多个位置,主要取决于正在使用的发行版。当应用程序尝试查找其配置时,它会按照预定义的搜索顺序进行扫描。可以使用以下命令查看搜索配置文件的目录列表kde-config --path config。显示的目录实际上是按照它们列出的相反顺序搜索的。此搜索顺序由以下规则集构成

  1. /etc/kderc:可以在此文件中指定目录的搜索路径。

  2. KDEDIRS:一个标准环境变量,设置为将 KDE 应用程序指向 KDE 库和应用程序的安装目录。它很可能已经在登录时设置。如果 KDE 的安装目录尚不存在,则会自动将其附加到此列表。

  3. KDEDIR:一个较旧的环境变量,现在被认为已弃用,而推荐使用 KDEDIRS。如果设置了 KDEDIRS,则配置将忽略此变量。

  4. 正在运行的可执行文件的目录。

  5. KDEHOME 或 KDEROOTHOME:通常设置为 ~/.kde。前者适用于所有用户,后者适用于 root 用户。

配置文件存储在以 /share/config 结尾的目录树中,因此像 KDEHOME 这样的环境变量目录会附加 /share/config 以构成配置文件目录名。

当应用程序请求其配置信息时,KDE 会在上述所有目录中搜索与应用程序关联的文件,并将它们合并到一个程序的配置对象中。信息是逐个键组合的——任何冲突都会接收链中最后读取的值。由于 KDEHOME 文件始终最后读取,因此对文件所做的任何本地用户更改始终会覆盖其他配置文件中的值。这就是以下命令的输出目录的原因kde-config命令以相反的顺序显示——它们是根据其中包含的配置文件的优先级列出的。

由于配置文件值向下级联,因此系统管理员可以在较高级别的目录中预设某些配置值,以用作所有用户的默认值,或者至少在这些用户进行任何更改之前。例如,如果系统管理员想要为所有用户设置默认壁纸,直到这些用户进行自定义更改为止,则只需编辑较高级别配置目录中的 kdesktoprc 文件即可提供此功能

[Desktop0]
...
Wallpaper=/usr/kde/3.3/share/wallpapers/custompaper.jpg
...

KDE Kiosk 模式的功能之一是能够锁定从链中较早的配置文件中读取的值,以便稍后读取的值无法覆盖它们。此实用程序不仅允许系统管理员预设某些配置项,而且还允许管理员锁定这些配置项,以便最终用户无法进行自定义更改。以这种方式锁定配置值很容易。

假设管理员想要锁定 Konqueror 配置,以便导航工具栏始终以文本形式显示。简单扫描 $KDEHOME/share/config/konquerorrc 文件会显示以下信息

...
[KonqMainWindow Toolbar mainToolBar]
IconText=TextOnly
...

此配置项指定 Konqueror 在主工具栏中使用文本而不是图标。在 Konqueror 中更改此值很容易——右键单击 Konqueror 工具栏并选择“文本位置”以在设置之间切换。图 1 和图 2 显示了带有文本和图标的工具栏的差异。

KDE Kiosk Mode

图 1. 带有 TextOnly 设置的 Konqueror 主工具栏

KDE Kiosk Mode

图 2. 带有 IconOnly 设置的 Konqueror 主工具栏

要为用户锁定此值,管理员只需在更高级别的配置目录中创建或编辑 konquerorrc 即可。要使此值不可更改,只需按如下所示编辑文件

[KonqMainWindow Toolbar mainToolBar]
IconText[$i]=TextOnly

上面的 [$i] 指定此配置值是不可变的,这意味着 Konqueror 应该使用此配置值,并且 合并通常会覆盖此设置的较低级别目录中的任何值。配置目录结构中更下游的任何包含 [KonqMainWindow Toolbar mainToolBar] 组的配置文件都不能覆盖 IconText 值。

一旦保存此文件并重新启动 Konqueror,对导航工具栏的文本位置的任何更改都不会在 Konqueror 重新启动之间保存。这是因为该值已锁定在较高级别的配置目录中,因此无法在较低级别的目录中覆盖它。

在更大的范围内,可以将整组配置指定为不可变的。将组设置为不可变也会使该组中的所有值都不可变。例如,在 KCalc 的配置文件 kcalcrc 中

...
[Precision][$i]
fixed=true
precision=12
...

以 Precision 组设置为不可变的方式启动 kcalc 会使更改这些值变得不可能。图 3 和图 4 显示了锁定和未锁定的 kcalc Precision 设置之间的差异。

KDE Kiosk Mode

图 3. 带有锁定 Precision 设置的 kcalc 常规设置对话框

KDE Kiosk Mode

图 4. 带有未锁定 Precision 设置的 kcalc 常规设置对话框

最后,可以通过在文件顶部放置 [$i] 来使应用程序的整个配置文件变为不可变的。此不可变标记会级联到文件中包含的所有组和键/值对。以这种方式将配置文件设置为不可变会完全禁止对应用程序配置进行任何更改。

或者,如果 KDE 应用程序没有对配置文件的写入权限,则它也被认为是不可变的配置文件。可以直接在 KDEHOME 目录中的配置文件上设置此文件权限限制,以防止用户编辑配置。

例如,保存不可写的 kickerrc 文件会限制用户对 kicker 面板进行任何更改。许多其他 KDE 应用程序都遵循类似的过程,尽管可能需要重新启动应用程序才能使其重新读取其新配置。

KDE Kiosk Mode

图 5. kicker 的配置文件标记为不可变。它明显缺少句柄,这允许自定义其中包含的小程序。

KDE Kiosk Mode

图 6. 普通的 Kicker

操作限制

除了能够为用户锁定配置项之外,管理员还可以删除用户可以执行的某些操作的功能。操作只是用户可以执行的操作,例如“文件→新建”。由于大多数 KDE 应用程序都提供通用操作,因此预定义的标准操作限制很容易锁定。程序操作限制在 kdeglobals 文件中配置,该文件位于上面注释的相同配置目录结构中。

以下代码片段禁用 KDE 应用程序主工具栏上提供的标准“帮助”菜单

...
[KDE Action Restrictions][$i]
action/help=false
...
KDE Kiosk Mode

图 7. 带有“帮助”的 Konqueror

KDE Kiosk Mode

图 8. 没有“帮助”的 Konqueror

另一个选项是禁用 Konqueror 的“书签”功能。这可以通过以下方式实现

...
[KDE Action Restrictions][$i]
action/bookmarks=false
...

并非所有操作限制都必须是菜单项。例如,以下代码片段禁用任何需要 root 访问权限的选项

...
[KDE Action Restrictions][$i]
user/root=false
...

可以设置更多操作。更完整的列表可以在 kiosk 文档中找到。许多操作在 KDE 应用程序中是标准的。但是,某些应用程序提供自己的本地操作,这些操作也可以受到限制。一些更有趣的操作是

  • print/system:禁用选择打印系统的能力。

  • shell_access:禁用启动 shell 的能力。

  • logout:禁用用户注销。

  • run_command:禁用 Alt-F2 运行命令。

  • lineedit_text_completion:禁用行编辑记住以前的条目以进行部分文本完成。

限制其他资源

除了配置文件之外,KDE 应用程序还在 KDEDIRS 目录中使用其他类型的资源。与上面的配置文件示例类似,这些资源通过安装在 KDEHOME 中的资源文件进行扩展。KDE 也提供了限制对这些类型文件访问的能力。此配置信息存储在 kdeglobals 配置文件中。例如,以下 kdeglobals 代码片段限制用户添加和使用自定义图标集的能力,而不是较高级别资源目录中已存在的图标集

...
[KDE Resource Restrictions][$i]
icon=false
...

表 1 显示了 KDE 定义的资源类型列表。

表 1. 资源类型

资源类型位置
appsshare/applnk
configshare/config
datashare/apps
exebin
htmlshare/doc/HTML
iconshare/icon
liblib
localeshare/locale
mimeshare/mimelnk
pixmapshare/pixmaps
servicesshare/services
servicetypesshare/servicetypes
soundshare/sounds
templatesshare/templates
wallpapershare/wallpapers
xdgdata-appsshare/applications
控制中心限制

尽管可以删除控制中心菜单项,但用户仍然可以控制设置。可以设置控制中心限制,以确保用户无法进行许多全局系统更改。

kdeglobals 中的以下部分禁止用户访问相应的控制模块。可以使用以下命令查看模块的完整列表kcmshell --list命令

...
[KDE Control Module Restrictions][$i]
kde-crypto.desktop=false
kde-clock.desktop=false
...
URL 限制

KDE 甚至提供了限制输入到 Konqueror 或使用 KDE 内部 URL 库的另一个程序中的 URL 的能力。要阻止对特定网站的 URL 访问,请在 kdeglobals 中使用以下内容

...
[KDE URL Restrictions][$i]
rule_count=n
rule_1=open,,,,http,example.com,,false
rule_2=open,,,,file,,/mnt/share,false
rule_3=list,,,,file,,/mnt/cdrom,true
...
rule_n=...
...

规则的格式为:rule_N=<action>,<referrer protocol>,<referrer host>,<referrer path>,<URL protocol>,<URL host>,<URL path>,<enabled>。任何未明确列出的选项默认都匹配所有内容。

上面的第一个规则限制用户访问 example.com 网站。第二个规则阻止用户打开或保存在 /mnt/share 目录中的任何文件。第三个规则阻止用户甚至查看 /mnt/cdrom 目录中的文件列表。

以下规则阻止用户使用 http 访问特定域,强制他们改用 https

..
[KDE URL Restrictions][$i]
rule_count=2
rule_1=open,,,,http!,*example.com,,false
rule_2=open,,,,https,*example.com,,true
..

URL 限制约定是匹配名称相似的协议,因此涉及 http 的规则也应包含 https。在上面的示例中,http! 用于仅匹配 http 而不匹配 https。

KDE Kiosk 工具

最近在自动化 kiosk 环境方面的工作促使 Kiosk 管理工具的产生(请参阅在线资源)。该程序自动化了 KDE 支持的许多高级 kiosk 功能的管理。管理员可以使用 Kiosk 管理工具自定义本文中介绍的许多项目,而无需手动编辑配置文件。Kiosk 管理工具还允许管理员创建多个 kiosk 配置文件,在中央机器上维护配置文件,并通过网络使用 SSH 等协议分发配置框架。尽管该工具尚未支持可以自定义的每个可能的配置值,但未来的版本肯定会增加更多的可配置性。

KDE Kiosk Mode

图 9. Kiosk 管理工具使管理员能够创建和部署 kiosk 配置。

总结

通过使用 KDE 的 Kiosk 框架提供的高级配置功能,可以完全自定义桌面体验。无论是管理多个工作站配置,还是仅为新用户提供默认配置,管理员都拥有足够的权力来创建所需的配置结果。本文仅开始触及可能的配置项的表面。经验和实验将为创建自定义桌面配置的所有可用项目提供更深入的见解。

本文的资源: www.linuxjournal.com/article/7927

Caleb Tennis 是印第安纳州哥伦布市一家小型研发公司的设计工程师。他参与了许多开源项目,包括 KDE、Comedi 和 Gentoo Linux。在天气好的时候,他喜欢花时间玩轮滑和滑水,但他在这两方面都不擅长。

加载 Disqus 评论