SDB:制作 KDM GDM 主题

跳转至: 导航, 搜索

Template:Working

本教学教您如何制作 KDM/GDM 登录管理器的主题。KDM/GDM 均统一采用了 GNOME greeter 的 XML 标准,使用预制部件进行构型,使用与 CSS 类似的盒模型进行部件的定位。

设计

由于预制固件的原因,KDM/GDM 主题并不能与 LightDM 等其他登录管理器的主题互通。因此设计时应注意不要设计出其他登录管理器风格的主题,以至于无法编码。

例如:

User1: Password Field >>
User2
User3

这样的设计就是 KDM/GDM 无法实现的。因为 KDM/GDM 使用了 userlist 这一预制部件,其显示格式为:

User1:
User2:
User3:

因此无法在其中相应定制密码框。(即使该 XML 标准有自定义部件功能)

编码

.desktop 文件

这主要是用于预览时使用的一些原数据:

~#: cat KdmGreeterTheme.desktop 
# This is not really a .desktop file like the rest, but it is   useful to treat
# it as such
[KdmGreeterTheme]
Greeter=openSUSE.xml
Name=openSUSE 12.2 KDM Theme
Description=12.2 version of openSUSE KDM theme (lightray)
Author=Eugene Trounev[it-s], Bruno Friedmann[tigerfoot], Marguerite Su[marguerite]
Copyright=GPL v3.0 2012 openSUSE Artwork Team
Screenshot=screenshot.png

.xml 文件

这里就是完全遵循 greeter.dtd 的 xml 核心控制文件了。主要处理部件的定位。

文档

Themed Greeter

示例

/usr/share/kde4/apps/kdm/themes/openSUSE/openSUSE.xml

头部

<?xml version="1.0"?>
<!DOCTYPE greeter SYSTEM "greeter.dtd">
<greeter>

尾部

</greeter>

Item

Item 是 KDM/GDM 主题的基本元素。它可以接受的参数有 type 类型和 id。可用的 type 类型有:

  • button 按钮
  • entry 文本
  • label 标签,必须同时有一个 text 节点来写文本内容。
  • list 用户列表。只有在配置启用了用户列表时才会有。
  • pixmap 背景图片或装饰图片
  • rect 最基本的 Item 类型。一个长方体
  • svg SVG 图片

id 不是绝对的,可以自己起名,但也有一些预留的名称:

  • entry 类型可以用 user-pw-entry id,这用于输入用户名和密码。
  • list 类型可用 userlist id 以显示用户列表。
  • label 类型可用如下 id:clock 系统时间; pam-prompt,登录提示; pam-error 登录错误; pam-error-logo,登录时显示一张小图; pam-message 登录消息; timed-label 登录时间等。

定位

Item 可使用 pos 标签来进行自身的定位:

<pos anchor="c" x="50%" y="50%" width="100%" height="100%"/>

其中 anchor 是它的中心,四个边和四个角。按照地图的方位进行命名。x/y 是它的定位基准点相对于它的上级元素的左上角的偏移。寬高是它自身的寬高。使用用它的定位基准点(上级元素的 x/y)作为它自身的 anchor 的位置这一方法来定位。详情见图:

Greeter.png

注意事项

Item 不可直接嵌套

<item type="rect" id="item1">
   <item type="rect" id="item2">
      [...]
   </item>
</item>

这样是不行的。会导致两个 item 都看不见。要使用 box 或 fixed 部件来缓冲一下:

<item type="rect" id="item1">
   <box [...参数]>
     <item type="rect" id="item2">
        [...]
     </item>
   </box>
</item>

第一级部件的定位一定要正确

请参考定位部分。由于它的盒模型和 CSS 的有些不一样,如果第一级定位错误的话,那么由于惯性思维,后面嵌套的部分您很可能就不知道怎么才能准确定位了。

调试

不重新登录即可查看效果

您需要安装 `x11-server-extra` 软件包(主要用到它的 Xephyr 程序)

编辑 /usr/share/kde4/config/kdm/kdmrc:

[Xdmcp]
# Whether KDM should listen to incoming XDMCP requests.
# Default is false
Enable=true

编辑 /etc/X11/xdm/Xaccess, 确保:

*                                       #any host can get a login window

设置正确。

然后打开 Konsole/GNOME Terminal,使用:

 Xephyr :1 -query localhost -screen 1024x768 :1

即可查看主题。还可以按 [PrintScreen] 键截图。

参考文献