SDB:KIWI Cookbook GNOME System
所有 KIWI 编辑
一个最小的GNOME Appliance - 我们的第五个配方
虽然我们之前的配方侧重于我们可以使用Kiwi创建的各种类型的镜像,但此配方更侧重于 appliance 的内容和一些配置问题。首先,我们将查看 suse-min-gnome 示例,然后扩展该示例以启用自动登录并展示如何自动启动特定应用程序。
此 appliance 使用的默认镜像类型是 VMware 镜像,因为它提供了最大的测试灵活性。您可以使用 qemu、VirtualBox 或 VMware player 或 server 来测试生成的镜像。镜像描述也配置为创建 Live CD/DVD,但您需要使用 --type iso 命令行参数来生成 ISO 镜像。
无需多言,让我们开始吧。
最小GNOME appliance
准备时间
- 30 分钟
烹饪时间
- 10 - 12 分钟,具体取决于带宽(参见之前的讨论)和主机的硬件
配料
- 一个正在运行的 openSUSE 11.1 系统
- 一个 openSUSE 11.1 仓库
- 安装了最新版本的 KIWI 工具集(至少版本 3.75)
- 已安装 kiwi-doc 包
- 大约 1 GB 的可用磁盘空间
该配方基于 suse-min-gnome 示例,该示例位于 /usr/share/doc/packages/kiwi/examples/suse-11.x/suse-min-gnome,并随 kiwi-doc 包一起安装。
使用图形登录
为了使图形登录工作,我们需要在镜像中包含 X 服务器,因此我们有一个
<package name="xorg-x11-server"/>
条目在我们的 <packages> 部分。在此示例中,我们希望使用 GNOME 作为桌面环境,并使用 GDM 作为图形登录管理器。因此,我们使用
<package name="gdm"/>
在我们的 <packages> 部分。请注意,在 <packages> 元素中指定 gdm 并结合 patternType="plusRecommended" 和 patternPackageType="plusRecommended" 属性足以创建一个最小的 GNOME 界面。
为了更好地配合,系统还包括 Perl、Python 和一个编辑器 (Vim)
<package name="python"/> <package name="perl"/> <package name="vim"/>
过去的一大难题一直是 X 服务器配置。一种解决方法是使用通用的基于帧缓冲的 xorg.conf 文件作为 Kiwi 配置目录的根树中的覆盖文件。但是,正如您检查我们的示例结构时所见,唯一使用的覆盖文件是 etc/init.d/boot.local。得益于 sax2 中的自动配置模式,我们可以简单地在启动时配置 X 服务器,而无需用户交互。boot.local 的内容非常简短,如下所示。
# Create the X-server configuration file if it does not yet exist
if [ ! -f /etc/X11/xorg.conf ]; then
/usr/sbin/sax2 -c 0 -a -i &>/dev/null
fi
随着 openSUSE 11.2 的发布,X 服务器将自动配置自身,因此不再需要 boot.local 覆盖文件,因此 openSUSE 11.2 示例不包含任何覆盖文件。
配置好 X 服务器后,我们需要确保 GDM 启动并且系统启动到运行级别 5。这“魔法”在 config.sh 中使用 Kiwi 提供的函数完成。感兴趣的函数调用如下
baseUpdateSysConfig /etc/sysconfig/windowmanager DEFAULT_WM gnome baseUpdateSysConfig /etc/sysconfig/displaymanager DISPLAYMANAGER gdm baseSetRunlevel 5 suseConfig
config.sh 中可用的函数分为两类,SUSE 特定函数和与发行版无关的函数。SUSE 特定函数具有 suse 前缀,如 suseConfig,与发行版无关的函数具有 base 前缀,如 baseSetRunlevel。
baseUpdateSysConfig 函数接受 3 个参数,即要修改的镜像中文件的完全限定路径,应在该文件中设置的变量以及变量的值。请注意,baseUpdateSysConfig 函数不会创建新变量,它只会对已存在于配置文件中的变量进行操作。以我们对 baseUpdateSysConfig 的第一次调用为例,这将导致在我们的镜像中的 /etc/sysconfig/windowmanager 中出现以下条目:
DEFAULT_WM="gnome"
baseSetRunlevel 函数设置 appliance 的默认运行级别,在这种情况下,我们想要一个具有网络的全用户图形环境,因此我们将运行级别设置为 5。
更改配置文件后,我们调用 suseConfig 以将更改应用于系统。
config.sh 中可用的预定义函数记录在 KIWI Image System Cookbook 中,或者您可以按如下方式访问 config.sh 的 man 页面
这就是使我们的最小 GNOME 基于镜像工作的全部配置。让我们创建镜像并检查它。
这将花费一些时间,因为需要从 openSUSE 存储库下载大量数据。为了加快此过程,您可以复制示例并修改存储库定义以指向本地安装源。此过程在 Start Cooking 部分中描述。
完成镜像创建过程后,您可以使用您最喜欢的虚拟化环境测试您的镜像。
完成启动过程后,您将看到熟悉的 GDM 登录屏幕。
root 和 tux 的密码与我们之前的示例一致,并在 config.xml 文件中设置为 linux。
自动登录配置
在此步骤中,我们将修改示例的配置,因此您需要制作基本示例的副本以创建一个工作树。
为示例中的用户(tux)设置自动登录非常简单。只需将以下行添加到 /tmp/gnome-exa/config.sh(或您选择的位置中的 config.sh 文件)
baseUpdateSysConfig /etc/sysconfig/displaymanager DISPLAYMANAGER_AUTOLOGIN tux
现在重建镜像并进行测试,您将看到 tux 用户将自动登录到系统。
现在我们已经配置了自动登录,自动运行程序也可能很有用。下一节将展示如何配置环境以执行此操作。
登录时启动程序
自动运行程序的机制与上一节描述的自动登录功能无关。因此,您可以选择省略自动登录功能的设置,仍然可以在给定用户登录时自动启动程序。
在本节中,我们将继续使用先前设置的工作目录,即使用 /tmp/gnome-exa。将自动启动的程序是 Firefox,但当然可以是您想要自动启动的任何可执行文件。
首先创建 GNOME 用于自动启动程序的目录。
替换 /tmp/gnome-exa(如果您选择不同的位置进行操作)和 tux(如果您选择在 config.xml 中配置不同的用户)。
现在使用您最喜欢的编辑器在 /tmp/gnome-exa/root/home/tux/.config/autostart 中创建文件 firefox.desktop。文件名并不重要,但我发现使用文件名指示它所相关的程序很有用。将以下行添加到此文件并保存它。
[Desktop Entry] Type=Application Name=Firefox Exec=firefox Icon= Comment=
现在我们准备好重建和测试了。
如果您通过覆盖机制包含自定义脚本,则可以在 *.desktop 文件中指定完全限定路径,例如
[Desktop Entry] Type=Application Name=My-Script Exec=/opt/mysetup/myscript Icon= Comment=
将执行文件 /opt/mysetup/myscript(该文件需要具有执行权限)。
这完成了示例的自动启动部分。在下一节中,我们将查看一些更多的 GNOME 自定义以完成操作。
一些GNOME自定义
桌面图标移除
如果您喜欢干净的桌面,即没有图标弄乱您美丽的背景视图,则可以使用以下步骤删除启动镜像时显示的图标。
首先,我们通过将以下内容插入 /tmp/mygnome-exa/config.sh(在调用 suseConfig 之后)来删除默认图标“帮助”和“openSUSE”。要求是此部分的位置必须在 baseCleanMount 的调用之前。
#====================================== # Remove system default desktop icons #-------------------------------------- rm -f /usr/share/dist/desktop-files/*
这处理了 4 个图标中的 2 个。请注意,这具有系统范围的影响,即这些图标现在已从系统的所有用户的桌面上消失。
如果您想禁用“主目录”和“回收站”图标,您有两种选择:系统范围的修改和基于每个用户的修改。下面显示了两种方法。
首先,让我们看看如何基于每个用户删除桌面图标。
移除“主目录”和“回收站”图标
在 GNOME 中,应用程序和桌面的配置存储在用户的家目录中的隐藏 .gconf 目录中。当您通过 gconf-editor 工具进行修改时,此目录会更新。要在桌面图标上创建目录,请在我们的配置树中执行以下操作
现在使用您最喜欢的编辑器在先前创建的目录中创建文件 %gconf.xml 并添加以下内容。
<?xml version="1.0"?>
<gconf>
<entry name="trash_icon_visible" mtime="1108553948" type="bool" value="false">
</entry>
<entry name="home_icon_visible" mtime="1108553943" type="bool" value="false">
</entry>
</gconf>
这将关闭桌面图标的显示。有关格式的详细信息,请参阅 GNOME 文档。
如果系统上只有一个用户,这当然很好。但是,如果您有许多用户并希望默认隐藏图标,则更容易对整个系统进行修改。下一节介绍了如何操作。
默认移除“主目录”和“回收站”图标
系统范围内的默认设置存储在文件 /etc/gconf/gconf.xml.vendor/%gconf-tree.xml 中。此文件由 gconf2-branding-openSUSE 包放置到我们的镜像中。从头开始重新创建文件只是为了进行一些修改,这太麻烦了。最简单的方法是将文件从您的运行系统复制到 Kiwi 配置目录中,如下所示
现在你已经有了一个基本的配置可以开始工作。使用你喜欢的编辑器编辑此文件,并搜索 <dir name="nautilus">。 在这一部分,你会找到一个 <dir name="desktop"> 子部分。 在关闭标签 </desktop> 之前,添加以下内容
<entry name="trash_icon_visible" mtime="1108553948" type="bool" value="false"> </entry> <entry name="home_icon_visible" mtime="1108553943" type="bool" value="false"> </entry>
保存文件,你就完成了。
现在你可以像之前一样重新构建镜像并进行测试。 一旦系统启动并运行,桌面图标将不可见。
通过此方法,你可以自定义 GNOME 的所有内容,无论是基于每个用户还是系统范围。 目录的结构遵循 gconf-editor 工具中功能的布局。 对于基于用户的自定义,创建适当的目录并将一个 %gconf.xml 文件放入该目录中。 对于系统范围的配置,在 %gconf-tree.xml 文件中创建一个 <dir> 部分。
作为另一个自定义示例,下面的部分将展示桌面背景的自定义。
自定义桌面背景
在本节中,我们将只关注基于用户的桌面自定义。 首先,将我们想要的背景图像放置到 Kiwi 配置树中。
创建一个目录,以便我们可以存储想要使用的背景图像。 接下来,将你的图像(在我们的示例中称为 myImage.png)复制到新创建的目录中
cp path_to_image/myImage.png /tmp/gnome-exa/root/usr/share/backgrounds
现在创建用于配置文件的目录,以设置背景图像。
使用你喜欢的编辑器,在刚刚创建的目录中创建 %gconf.xml 文件,内容如下。
<?xml version="1.0"?>
<gconf>
<entry name="primary_color" mtime="1237339199" type="string">
<stringvalue>#393937374b4b</stringvalue>
</entry>
<entry name="secondary_color" mtime="1237339199" type="string">
<stringvalue>#424252528f8f</stringvalue>
</entry>
<entry name="color_shading_type" mtime="1237339200" type="string">
<stringvalue>solid</stringvalue>
</entry>
<entry name="picture_options" mtime="1237339199" type="string">
<stringvalue>stretched</stringvalue>
</entry>
<entry name="picture_filename" mtime="1237339199" type="string">
<stringvalue>/usr/share/backgrounds/Tux-Linux_1024x768_openSUSE.png</stringvalue>
</entry>
</gconf>
完成
重新构建并测试,你的图像现在将成为桌面背景。
快速总结
本示例的前两部分同样适用于 KDE,将 gdm 替换为 kdm,将 gnome 替换为 kde。 示例的自定义部分仅适用于 GNOME。
使用 config.sh 中的预定义函数,你可以在镜像中进行大量的配置更改,而无需使用叠加文件。 使用叠加文件允许你自定义 GNOME 的外观,使其符合你的喜好。
免责声明
应用 GNOME 的每个用户配置并使用自动登录时,配置可能不会始终被 gconfd 拾取。 因此,在使用自动登录时,在系统范围内应用任何配置更改会更可靠。