使用Ansible管理你的工作站:配置桌面設(shè)置
在本系列第三篇(也是***一篇)文章中,我們將使用 Ansible 自動(dòng)化配置 GNOME 桌面設(shè)置。
在本系列關(guān)于使用 Ansible 配置工作站的***篇文章中,我們設(shè)置了一個(gè)倉庫并配置了一些基本的東西。在第二篇文章中,我們配置了 Ansible 以使其在對倉庫進(jìn)行更改時(shí)自動(dòng)應(yīng)用設(shè)置。在第三篇(也是***一篇)文章中,我們將使用 Ansible 配置 GNOME 桌面設(shè)置。
此配置只適用于較新的發(fā)行版(例如我將在示例中使用的 Ubuntu 18.04)。較舊版本的 Ubuntu 將無法運(yùn)行,因?yàn)樗鼈兏綆Я艘粋€(gè)老版本的 python-psutils
,對于 Ansible 的 dconf
模塊無法正常工作。如果你使用的是較新版本的 Linux 發(fā)行版,則應(yīng)該沒有問題。
在開始之前,確保你已經(jīng)完成了本系列的***部分和第二部分,因?yàn)榈谌糠纸⒃诖嘶A(chǔ)之上的。如果還沒有,下載前兩篇文章中一直使用的 GitHub 倉庫,我們將為其添加更多功能。
設(shè)置壁紙和鎖屏
首先,我們將創(chuàng)建一個(gè)任務(wù)手冊來保存我們的 GNOME 設(shè)置。在倉庫的根目錄中,應(yīng)該有一個(gè)名為 local.yml
的文件,添加以下行:
- include: tasks/gnome.yml
整個(gè)文件應(yīng)如下所示:
- 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
文件的引用,它將存儲(chǔ)在倉庫內(nèi)的 tasks
目錄中。我們還沒有創(chuàng)建這個(gè)文件,現(xiàn)在就來創(chuàng)建它。在 tasks
目錄中創(chuàng)建 gnome.yml
文件,并將以下內(nèi)容放入:
- 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
),因此確保使用你機(jī)器上的用戶名替換每次出現(xiàn)的 jay
。另外,如果你沒有像我一樣使用 Ubuntu 18.04,你將必須更改 apt
一行來匹配你所選擇的發(fā)行版的包管理器,并確認(rèn) python-psutil
包的名稱,因?yàn)樗赡苡兴煌?/p>
在示例任務(wù)中,我引用了 file
目錄下的 wallpaper.jpg
文件,此文件必須存在,否則 Ansible 配置將失敗。在 tasks
目錄中,創(chuàng)建一個(gè)名為 files
的子目錄。找到你喜歡的壁紙圖片,將其命名為 wallpaper.jpg
,然后把它放在 files
目錄中。如果文件是 PNG 圖像而不是 JPG,在代碼和倉庫中更改文件擴(kuò)展名。如果你覺得沒有創(chuàng)意,我在 GitHub 倉庫 中有一個(gè)示例壁紙文件,你可以使用它。
完成所有這些更改后,將內(nèi)容提交到 GitHub 倉庫,并推送這些更改??偨Y(jié)一下,你應(yīng)該完成以下工作:
- 修改
local.yml
文件以引用tasks/gnome.yml
- 使用上面提到的內(nèi)容創(chuàng)建
tasks/gnome.yml
- 在
tasks
目錄中創(chuàng)建一個(gè)files
目錄,其中有一個(gè)名為wallpaper.jpg
的圖像文件(或者你選擇的任何名稱)。
完成這些步驟并將更改推送到倉庫后,配置應(yīng)該在下次計(jì)劃運(yùn)行期間自動(dòng)應(yīng)用。(你可能還記得我們在上一篇文章中對此進(jìn)行了自動(dòng)化。)如果你想節(jié)省時(shí)間,可以使用以下命令立即應(yīng)用配置:
sudo ansible-pull -U https://github.com/<github_user>/ansible.git
如果一切正常,你應(yīng)該可以看到你的新壁紙。
讓我們花一點(diǎn)時(shí)間來了解新的 GNOME 任務(wù)手冊的功能。首先,我們添加了一個(gè)計(jì)劃來安裝 python-psutil
包。如果不添加它,我們就不能使用 dconf
模塊,因?yàn)樗枰谛薷?GNOME 設(shè)置之前安裝這個(gè)包。接下來,我們使用 copy
模塊將壁紙文件復(fù)制到我們的 home
目錄,并將生成的文件命名為以點(diǎn)開頭的隱藏文件。如果你不希望此文件放在 home
目錄的根目錄中,你可以隨時(shí)指示此部分將其復(fù)制到其它位置 —— 只要你在正確的位置引用它,它仍然可以工作。在下一個(gè)計(jì)劃中,我們使用 dconf
模塊來更改 GNOME 設(shè)置。在這種情況下,我們調(diào)整了 /org/gnome/desktop/background/picture-uri
鍵并將其設(shè)置為 file:///home/jay/.wallpaper.jpg
。注意本節(jié)中的引號 —— 你必須在 dconf
值中使用兩個(gè)單引號,如果值是一個(gè)字符串,還必須包含在雙引號內(nèi)。
現(xiàn)在,讓我們進(jìn)一步進(jìn)行配置,并將背景應(yīng)用于鎖屏。這是現(xiàn)在的 GNOME 任務(wù)手冊,但增加了兩個(gè)額外的計(jì)劃:
- 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'"
正如你所看到的,我們做的事情和設(shè)置壁紙時(shí)差不多。我們添加了兩個(gè)額外的任務(wù),一個(gè)是復(fù)制鎖屏圖像并將其放在我們的 home
目錄中,另一個(gè)是將設(shè)置應(yīng)用于 GNOME 以便使用它。同樣,確保將 jay
更改為你的用戶名,并命名你想要的鎖屏圖片 lockscreen.jpg
,并將其復(fù)制到 files
目錄。將這些更改提交到倉庫后,在下一次計(jì)劃的 Ansible 運(yùn)行期間就會(huì)應(yīng)用新的鎖屏。
應(yīng)用新的桌面主題
設(shè)置壁紙和鎖屏背景很酷,但是讓我們更進(jìn)一步來應(yīng)用桌面主題。首先,讓我們在我們的任務(wù)手冊中添加一條指令來安裝 arc
主題的包。將以下代碼添加到 GNOME 任務(wù)手冊的開頭:
- name: Install arc theme
apt: name=arc-theme
然后,在底部,添加以下動(dòng)作:
- name: Set GTK theme
become_user: jay
dconf: key="/org/gnome/desktop/interface/gtk-theme" value="'Arc'"
你看到 GNOME 的 GTK 主題在你眼前變化了嗎?我們添加了一個(gè)動(dòng)作來通過 apt
模塊安裝 arc-theme
包,另一個(gè)動(dòng)作將這個(gè)主題應(yīng)用到 GNOME。
進(jìn)行其它定制
既然你已經(jīng)更改了一些 GNOME 設(shè)置,你可以隨意添加其它定制。你在 GNOME 中調(diào)整的任何設(shè)置都可以通過這種方式自動(dòng)完成,設(shè)置壁紙和主題只是幾個(gè)例子。你可能想知道如何找到要更改的設(shè)置,以下是一個(gè)我用的技巧。
首先,通過在你管理的計(jì)算機(jī)上運(yùn)行以下命令,獲取所有當(dāng)前 dconf
設(shè)置的快照:
dconf dump / > before.txt
此命令將所有當(dāng)前更改導(dǎo)出到名為 before.txt
的文件中。接下來,手動(dòng)更改要自動(dòng)化的設(shè)置,并再次獲取 dconf
設(shè)置:
dconf dump / > after.txt
現(xiàn)在,你可以使用 diff
命令查看兩個(gè)文件之間的不同之處:
diff before.txt after.txt
這應(yīng)該會(huì)給你一個(gè)已更改鍵值的列表。雖然手動(dòng)更改設(shè)置確實(shí)違背了自動(dòng)化的目的,但你實(shí)際上正在做的是獲取更新***設(shè)置時(shí)更改的鍵,這允許你創(chuàng)建 Ansible 任務(wù)以修改這些設(shè)置,這樣你就再也不需要碰這些設(shè)置了。如果你需要還原機(jī)器,Ansible 倉庫會(huì)處理好你的每個(gè)定制。如果你有多臺(tái)計(jì)算機(jī),甚至是一組工作站,則只需手動(dòng)進(jìn)行一次更改,所有其他工作站都將應(yīng)用新設(shè)置并完全同步。
***
如果你已經(jīng)閱讀完本系列文章,你應(yīng)該知道如何設(shè)置 Ansible 來自動(dòng)化工作站。這些示例提供了一個(gè)有用的基礎(chǔ),你可以使用這些語法和示例進(jìn)行其他定制。隨著你的進(jìn)展,你可以繼續(xù)添加新的修改,這將使你的 Ansible 配置一直增長。
我已經(jīng)用 Ansible 以這種方式自動(dòng)化了一切,包括我的用戶帳戶和密碼、Vim、tmux 等配置文件、桌面包、SSH 設(shè)置、SSH 密鑰,基本上我想要自定義的一切都使用了。以本系列文章作為起點(diǎn),將為你實(shí)現(xiàn)工作站的完全自動(dòng)化鋪平道路。