使用 Ansible 管理你的工作站:配置桌面设置

在本系列的第三篇(也是最后一篇)文章中,学习如何使用 Ansible 自动化 GNOME 配置更改。
296 位读者喜欢这篇文章。
cubes coming together to create a larger cube

Opensource.com

在本系列关于使用 Ansible 配置工作站的第一篇文章中,我们设置了一个仓库并配置了一些基本内容。在第二部分中,我们自动化了 Ansible,以便在仓库发生更改时自动应用设置。在这第三篇(也是最后一篇)文章中,我们将使用 Ansible 配置 GNOME 桌面设置。

此配置仅适用于较新的发行版(例如 Ubuntu 18.04,我将在示例中使用它)。旧版本的 Ubuntu 将无法工作,因为它们附带的 python-psutils 版本对于 Ansible 的 dconf 模块来说太旧而无法正常工作。如果您使用的是较新版本的 Linux 发行版,则应该没有问题。

在开始之前,请确保您已完成本系列的第一部分和第二部分,因为第三部分建立在这些基础之上。如果您尚未这样做,请下载您在前两篇文章中使用的仓库。我们将向其中添加更多功能。

设置壁纸和锁屏

首先,我们将创建一个任务手册来保存我们的 GNOME 设置。在仓库的根目录中,您应该有一个名为 local.yml 的文件。将以下行添加到其中

- include: tasks/gnome.yml

整个文件现在应如下所示

- hosts: localhost
  become: true
  pre_tasks:
    - name: update repositories
      apt: update_cache=yes
      changed_when: False

  tasks:
    - include: tasks/users.yml
    - include: tasks/cron.yml
    - include: tasks/packages.yml
    - include: tasks/gnome.yml

基本上,这添加了对名为 gnome.yml 的文件的引用,该文件将存储在仓库内的 tasks 目录中。我们尚未创建此文件,所以现在就创建它。在 tasks 目录中创建 gnome.yml 文件,并将以下内容放入其中

- name: Install python-psutil package
  apt: name=python-psutil

- name: Copy wallpaper file
  copy: src=files/wallpaper.jpg dest=/home/jay/.wallpaper.jpg owner=jay group=jay mode=600

- name: Set GNOME Wallpaper
  become_user: jay
  dconf: key="/org/gnome/desktop/background/picture-uri" value="'file:///home/jay/.wallpaper.jpg'"

请注意,此代码多次引用了我的用户名 (jay),因此请务必将每次出现的 jay 替换为您在机器上使用的用户名。此外,如果您没有使用 Ubuntu 18.04(就像我一样),您必须更改 apt 行以匹配您选择的发行版的软件包管理器,并确认您的发行版的 python-psutil 软件包的名称,因为它可能不同。

在示例任务中,我引用了 files 目录中名为 wallpaper.jpg 的文件。此文件必须存在,否则 Ansible 配置将失败。在 tasks 目录中,创建一个名为 files 的子目录。找到您喜欢的壁纸图像,将其命名为 wallpaper.jpg,并将其放入 files 目录中。如果文件是 PNG 图像而不是 JPG,请更改代码和仓库中的文件扩展名。如果您没有创意,我在本系列文章的仓库中提供了一个示例壁纸文件,您可以使用它。

完成所有这些更改后,将所有内容提交到您的仓库,并推送这些更改。回顾一下,您应该已完成以下操作

  • 修改了 local.yml 文件以引用 tasks/gnome.yml 剧本
  • 使用上述内容创建了 tasks/gnome.yml 剧本
  • tasks 目录内创建了一个 files 目录,其中包含一个名为 wallpaper.jpg 的图像文件(或您选择的任何名称)。

完成这些步骤并将更改推送回仓库后,配置应在其下次计划运行时自动应用。(您可能还记得我们在上一篇文章中自动化了此操作。)如果您赶时间,可以使用以下命令立即应用配置

sudo ansible-pull -U https://github.com/<github_user>/ansible.git

如果一切运行正确,您应该会看到新的壁纸。

让我们花点时间了解一下新的 GNOME 任务手册的作用。首先,我们添加了一个 play 来安装 python-psutil 软件包。如果我们不添加它,我们将无法使用 dconf 模块,因为它需要安装此软件包才能修改 GNOME 设置。接下来,我们使用 copy 模块将壁纸文件复制到我们的 home 目录,并将生成的文件命名为以句点开头,以将其隐藏。如果您不希望此文件位于 home 目录的根目录中,您可以随时指示此部分将其复制到其他位置——只要您在正确的位置引用它,它仍然可以工作。在下一个 play 中,我们使用 dconf 模块来更改 GNOME 设置。在本例中,我们调整了 /org/gnome/desktop/background/picture-uri 键,并将其设置为等于 file:///home/jay/.wallpaper.jpg。请注意剧本的这一部分中的引号——您必须始终在 dconf 值中使用两个单引号,如果值是字符串,则还必须包含双引号。

现在,让我们进一步配置,并将背景应用于锁屏。这是 GNOME 任务手册,但添加了两个额外的 play

- name: Install python-psutil package
  apt: name=python-psutil

- name: Copy wallpaper file
  copy: src=files/wallpaper.jpg dest=/home/jay/.wallpaper.jpg owner=jay group=jay mode=600

- name: Set GNOME wallpaper
  dconf: key="/org/gnome/desktop/background/picture-uri" value="'file:///home/jay/.wallpaper.jpg'"

- name: Copy lockscreenfile
  copy: src=files/lockscreen.jpg dest=/home/jay/.lockscreen.jpg owner=jay group=jay mode=600

- name: Set lock screen background
  become_user: jay
  dconf: key="/org/gnome/desktop/screensaver/picture-uri" value="'file:///home/jay/.lockscreen.jpg'"

如您所见,我们几乎做了与壁纸相同的事情。我们添加了两个额外的任务,一个用于复制锁屏图像并将其放置在我们的 home 目录中,另一个用于将设置应用于 GNOME,以便可以使用它。同样,请务必将您的用户名从 jay 更改,并将您想要的锁屏图片命名为 lockscreen.jpg 并将其复制到 files 目录。将这些更改提交到您的仓库后,新的锁屏应在下次计划的 Ansible 运行时应用。

应用新的桌面主题

设置壁纸和锁屏背景很酷,但让我们更进一步,应用桌面主题。首先,让我们在任务手册中添加一个指令,以安装 arc 主题的软件包。将以下代码添加到 GNOME 任务手册的开头

- name: Install arc theme
  apt: name=arc-theme

然后,在底部添加以下 play

- name: Set GTK theme
  become_user: jay
  dconf: key="/org/gnome/desktop/interface/gtk-theme" value="'Arc'"

您是否看到 GNOME 的 GTK 主题在您眼前发生了变化?我们添加了一个 play 以通过 apt 模块安装 arc-theme 软件包,并添加了另一个 play 以将此主题应用于 GNOME。

进行其他自定义

现在您已经更改了一些 GNOME 设置,请随意自行添加其他自定义设置。您可以在 GNOME 中调整的任何设置都可以通过这种方式自动化;设置壁纸和主题只是一些示例。您可能想知道如何找到您想要更改的设置。这是一个对我有用的技巧。

首先,通过在您管理的机器上运行以下命令来获取所有当前 dconf 设置的快照

dconf dump / > before.txt

此命令将您当前的所有更改导出到名为 before.txt 的文件。接下来,手动更改您要自动化的设置,并再次捕获 dconf 设置

dconf dump / > after.txt

现在,您可以使用 diff 命令来查看两个文件之间的差异

diff before.txt after.txt

这应该会为您提供已更改的键的列表。虽然手动更改设置确实违背了自动化的目的,但您实际上是在捕获在您更新首选设置时更改的键,这使您可以创建 Ansible play 来修改这些设置,这样您就永远不需要再次触摸这些设置。如果您需要还原您的机器,您的 Ansible 仓库将负责您的每一项自定义设置。如果您有多台机器,甚至是一组工作站,您只需要手动 进行一次更改,所有其他工作站都将应用新的设置并完全同步。

总结

如果您一直关注本系列文章,您应该知道如何设置 Ansible 以自动化您的工作站。这些示例提供了一个有用的基线,您可以使用语法和示例进行其他自定义。随着您的进行,您可以继续添加新的修改,这将使您的 Ansible 配置随着时间的推移而增长。

我以这种方式使用 Ansible 自动化了一切,包括我的用户帐户和密码;Vim、tmux 等的配置文件;桌面软件包;SSH 设置;SSH 密钥;以及基本上我可能想要自定义的一切。使用本系列文章作为起点将为您完全自动化您的工作站铺平道路。

标签
User profile image.
Jay LaCroix 是一位来自密歇根州的技术专家,专注于 Linux 和开源软件。自 2002 年以来一直使用 Linux,Jay 一直是 die-hard 粉丝。他目前是一位高级解决方案架构师和自由顾问,喜欢培训和授权他人使用 Linux 并充分利用这款出色的软件。

3 条评论

您好 Jay,
非常棒的文章,为我们使用 Mint 的笔记本电脑指明了正确的方向。它们被我们的难民护理人员用来访问我们的 Citrix 服务器。到目前为止,使用我们以 Microsoft 为中心的工具维护机器非常困难。
非常感谢!

问候,Oliver

嗨 Jay,

喜欢这个系列,绝对获得了一些好主意。快速提问,为什么您在 gnome.yml 中而不是 packages.yml 中添加了 apt 步骤?

干杯,Kevin

这是一个很棒的系列文章!一个小小的“小问题”(无论如何我还是弄清楚了) - 您在第 2 部分和第 3 部分中遗漏了提交 git 更改的基本步骤。但除此之外,不错的简洁文章,帮助我理解了这一点(断断续续使用 ansible 几年了,但主要只是通过 shell 脚本、其他人编写的剧本运行,更熟悉 Puppet) - 谢谢!

© . All rights reserved.