我的桌面環境是 Gnome,非 Gnome 使用者不適用
不過 gnome-terminal 似乎不吃 fontconfig 的設定,而且能選擇的字體特別的少
少到我即使安裝了新字體到系統,gnome-terminal 能選的字體也不會增加
我就很好奇,gnome-terminal 的字體是怎麼調用的 ?
於是我先用 $ ps aux | grep gnome-terminal 找出 gnome-terminal 的 PID
接著用 $ strace -p $PID -e trace=openat 追蹤 gnome-terminal 開啟檔案的系統呼叫
我一邊期待改了設定就能追蹤到字體檔案被調用的系統呼叫,一邊小心翼翼的按下修改
於是我追蹤到了以下兩行重點 :
openat(AT_FDCWD, "/run/user/1000/dconf/user", O_RDWR|O_CREAT, 0600) = 17
openat(AT_FDCWD, "/home/yotsuba/.config/dconf/user", O_RDONLY) = 17
我完全看不懂這兩個檔案是幹麻的 ? 但是出現在我的家目錄肯定和字體檔案相關了
Google 一下發現原來 dconf 是 Gnome 桌面程式專用的設定檔
而 /home/yotsuba/.config/dconf/user 應該是我的 dconf 資料庫沒錯
大概看了一下 dconf 的 man page,操作上感覺挺簡單的
然後總覺得 $ dconf dump / 的輸出感覺有點像一個完整的檔案系統
這裡的 / 並不是我們 Linux 的根目錄,應該是 dconf 自己的根目錄
另外我發現一個很有用的指令,我可以用 $ dconf watch / 繼續觀察 dconf 的變化
這樣觀察起來比 strace 有效率多了
而當我下一次修改字體的時候,它出現了 :
/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/font
'Ubuntu Mono 13'
而且 dconf 是有提供 read 和 write 指令的,也就是說我可以把自己想要的字體寫回去
於是我使用 $ dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/font "'Monaco Bold 13'" 便成功了
Monaco Bold 就是我想要的字體,13 則是字體大小
這裡有一個重點,由於 $ dconf write 需要一個 key 和 value,就和 $ dconf watch 的輸出一樣
重點在於 $ dconf watch 剛才輸出的 value 是 'Ubuntu Mono 13'
對,那個單引號也算在 value 的一部分喔
如果你直接在 shell 輸入 'value' 或 "value",最終都是以 value 被當參數傳進去了
而因為我們希望它真正傳入的字串是 'value',所以要用雙引號包住單引號
所以我們要使用 "'Monaco Bold 13'" 去傳入 'Monaco Bold 13'
這個細節沒處理好,$ dconf write 會報錯喔