SDB:KIWI Cookbook GNOME System

跳转到:导航搜索


构建一个使用最小GNOME桌面环境的镜像。自定义基本示例以启用自动登录,自动启动Firefox,并在启动时自定义GNOME。
Icon-checked.png
此过程至少在Kiwi版本3.75 ( kiwi --version ) 上进行了测试



一个最小的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
如果您正在打包 ATI 或 NVIDIA 卡的专有图形驱动程序,请不要使用 -i 选项。


随着 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 页面

# man kiwi::config.sh

这就是使我们的最小 GNOME 基于镜像工作的全部配置。让我们创建镜像并检查它。

# kiwi --prepare /usr/share/doc/packages/kiwi/examples/suse-11.1/suse-min-gnome -root /tmp/mymingnome
# kiwi --create /tmp/mymingnome -d /tmp/mymingnome-result

这将花费一些时间,因为需要从 openSUSE 存储库下载大量数据。为了加快此过程,您可以复制示例并修改存储库定义以指向本地安装源。此过程在 Start Cooking 部分中描述。

完成镜像创建过程后,您可以使用您最喜欢的虚拟化环境测试您的镜像。

# qemu /tmp/mymingnome-result/suse-11.1-gnome-demo.i686-1.0.1.vmdk
关于镜像名称和以 64 位模式构建的注意事项与 之前 提到的注意事项相同。


完成启动过程后,您将看到熟悉的 GDM 登录屏幕。

roottux 的密码与我们之前的示例一致,并在 config.xml 文件中设置为 linux

以下部分讨论可以单独或组合应用的配置选项,如本例所示。每个部分显示 Kiwi 配置目录(/tmp/gnome-exa)的更改,然后是 prepare 和 create 步骤。您可以选择通过直接将更改应用于解包的镜像树(/tmp/mymingnome)然后执行 create 步骤来跳过 prepare 步骤。虽然此快捷方式将为本示例节省时间,但对于实际项目来说,本质上是有风险的。直接应用于解包的镜像目录的更改很容易被忘记,如果未应用于 Kiwi 配置目录,则会在重新创建镜像时丢失。

自动登录配置


在此步骤中,我们将修改示例的配置,因此您需要制作基本示例的副本以创建一个工作树。

# cp -r /usr/share/doc/packages/kiwi/examples/suse-11.1/suse-min-gnome /tmp/gnome-exa

为示例中的用户(tux)设置自动登录非常简单。只需将以下行添加到 /tmp/gnome-exa/config.sh(或您选择的位置中的 config.sh 文件)

 baseUpdateSysConfig /etc/sysconfig/displaymanager DISPLAYMANAGER_AUTOLOGIN tux

现在重建镜像并进行测试,您将看到 tux 用户将自动登录到系统。

# kiwi --prepare /tmp/gnome-exa -root /tmp/mygnome-exa
# kiwi --create /tmp/mygnome-exa -d /tmp/mygnome-exa-result
# qemu /tmp/mygnome-exa-result/suse-11.1-gnome-demo.i686-1.0.1.vmdk
关于镜像名称和以 64 位模式构建的注意事项与 之前 提到的注意事项相同。


现在我们已经配置了自动登录,自动运行程序也可能很有用。下一节将展示如何配置环境以执行此操作。


登录时启动程序


自动运行程序的机制与上一节描述的自动登录功能无关。因此,您可以选择省略自动登录功能的设置,仍然可以在给定用户登录时自动启动程序。

在本节中,我们将继续使用先前设置的工作目录,即使用 /tmp/gnome-exa。将自动启动的程序是 Firefox,但当然可以是您想要自动启动的任何可执行文件。

首先创建 GNOME 用于自动启动程序的目录。

# mkdir -p /tmp/gnome-exa/root/home/tux/.config/autostart

替换 /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=

现在我们准备好重建和测试了。

# rm -rf /tmp/mygnome-exa
# kiwi --prepare /tmp/gnome-exa -root /tmp/mygnome-exa
# kiwi --create /tmp/mygnome-exa -d /tmp/mygnome-exa-result
# qemu /tmp/mygnome-exa-result/suse-11.1-gnome-demo.i686-1.0.1.vmdk
关于镜像名称和以 64 位模式构建的注意事项与 之前 提到的注意事项相同。

如果您通过覆盖机制包含自定义脚本,则可以在 *.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 工具进行修改时,此目录会更新。要在桌面图标上创建目录,请在我们的配置树中执行以下操作

# mkdir -p /tmp/mygnome-exa/root/home/tux/.gconf/apps/nautilus/desktop

现在使用您最喜欢的编辑器在先前创建的目录中创建文件 %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 配置目录中,如下所示

# mkdir -p /tmp/mygnome-exa/root/etc/gconf/gconf.xml.vendor
# cp /etc/gconf/gconf.xml.vendor/%gconf-tree.xml /tmp/mygnome-exa/root/etc/gconf/gconf.xml.vendor

现在你已经有了一个基本的配置可以开始工作。使用你喜欢的编辑器编辑此文件,并搜索 <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 配置树中。

# mkdir -p /tmp/gnome-exa/root/usr/share/backgrounds

创建一个目录,以便我们可以存储想要使用的背景图像。 接下来,将你的图像(在我们的示例中称为 myImage.png)复制到新创建的目录中

 cp path_to_image/myImage.png /tmp/gnome-exa/root/usr/share/backgrounds

现在创建用于配置文件的目录,以设置背景图像。

# mkdir -p /tmp/gnome-exa/root/home/tux/.gconf/desktop/gnome/background

使用你喜欢的编辑器,在刚刚创建的目录中创建 %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 拾取。 因此,在使用自动登录时,在系统范围内应用任何配置更改会更可靠。