SDB:制作 KDM GDM 主题
目录
设计
由于预制固件的原因,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 核心控制文件了。主要处理部件的定位。
文档
示例
/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 的位置这一方法来定位。详情见图:
注意事项
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] 键截图。