过去,我曾尝试使用 Unity Tweak Tool 来更改鼠标指针主题。但是,我也想从终端更改它。如何在 Ubuntu 16.04 上执行此操作?
答案1
后台设置如何工作
每个用户的个人资料都由数据库管理DConf
。您可以阅读我对这个问题的回答以了解更多信息:基于 GUI 的应用程序是否在后台执行 shell 命令? 每个特定设置都有与之关联的模式(有点像 URL)和键(特定设置的名称)。
dconf watch /
让我们通过运行然后在 UTT 中更改指针主题来找出当我们更改光标主题时 Unity Tweak Tool 会改变哪些设置:
$ dconf watch /
/org/gnome/desktop/interface/cursor-theme
'crystalblue_classic'
太好了,现在我们知道要改变什么模式和密钥了!
gsettings 工具 - 调整者的朋友
幸运的是,有一个名为的命令行实用程序gsettings
,我们可以使用它来更改所需的设置。此工具通常用于 shell 脚本。对于其他类型的语言(例如 Python 或 C),存在 GSettings 库,允许我们执行相同的操作。在这里我们特别想使用它,gsettings
因为它可以在命令行上使用。
需要注意的区别是,与 不同dconf
,模式是用点分隔的,而不是用斜线分隔的。因此,gsettings
可以理解org.gnome.desktop.interface
模式。
因此,我们可以这样做:
$ gsettings set org.gnome.desktop.interface cursor-theme 'redglass'
请注意,在这个例子中,我使用的Redglass
是我已经安装的主题之一,您可能没有,因此请使用您在 UTT 中列出的一些值。
查找架构的值
通常,可以使用以下选项来查找gsettings
架构上的所有可能选项range
:
$ gsettings range com.canonical.Unity.Launcher launcher-position
enum
'Left'
'Bottom'
不幸的是,我们需要用来改变光标主题的模式没有enum
值:
$ gsettings range org.gnome.desktop.interface cursor-theme
type s
因此,或者,您可以做的(以及 UTT 显然所做的)是列出/usr/share/icons
文件夹中包含cursors
文件夹的所有目录,如下所示:
$ ls -d /usr/share/icons/*/cursors
/usr/share/icons/crystalblue_classic/cursors/ /usr/share/icons/crystalgray_nonanim/cursors/ /usr/share/icons/crystalwhiteleft_nonanim/cursors/
... more output here
然后只需选择每个主题的文件夹名称作为新值。
进一步了解 - 编写 Shell 脚本
当然,我们不想反复处理多个命令。相反,让我们通过 shell 脚本来简化它,在这个特定情况下 - 一个bash
脚本(因为我们想利用数组等高级功能,并且因为我们不追求可移植性到 Ubuntu 以外的系统)将列出可用的主题并允许我们选择我们想要的主题。
#!/usr/bin/env bash
fifo="/tmp/themes_script.fifo"
mkfifo "$fifo"
declare -a themes
find /usr/share/icons -maxdepth 2 -type d -name "cursors" -printf "%P\n" > "$fifo" &
while IFS= read -r line
do
themes+=("${line%/*}")
done < "$fifo"
rm "$fifo"
echo ">>> Please enter the number of new theme for cursor"
select opt in "${themes[@]}"
do
if [ $REPLY -le ${#themes} ]
then
gsettings set org.gnome.desktop.interface cursor-theme \'$opt\' &&
exit 0
else
echo "Improper argument" > /dev/stderr
exit 1
fi
done
测试运行:
bash-4.3$ ./change_cursor_theme.sh
>>> Please enter the number of new theme for cursor
1) crystalblueleft_nonanim 14) crystalgray_nonanim
2) crystalgreenleft_classic 15) DMZ-Black
3) crystalwhite_nonanim 16) crystalgrayleft
4) handhelds 17) crystalblueleft_classic
5) crystalgreen 18) Deepin-sapphire
6) whiteglass 19) crystalwhiteleft
7) crystalgray 20) crystalgreenleft_nonanim
8) crystalwhiteleft_nonanim 21) crystalgrayleft_nonanim
9) redglass 22) DMZ-White
10) crystalblue 23) crystalblueleft
11) crystalwhite 24) crystalblue_nonanim
12) crystalblue_classic 25) crystalgreenleft
13) crystalgreen_nonanim 26) crystalgreen_classic
#? 9
bash-4.3$
答案2
除了上述 Sergiy Kolodyazhnyy 的回答之外,还值得检查用户的本地目录,因为大多数主题默认安装在那里:
#!/usr/bin/env bash
fifo="/tmp/themes_script.fifo"
mkfifo "$fifo"
declare -a themes
find /usr/share/icons -maxdepth 2 -type d -name "cursors" -printf "%P\n" > "$fifo" &
find ~/.icons -maxdepth 2 -type d -name "cursors" -printf "%P\n" >> "$fifo" &
while IFS= read -r line
do
themes+=("${line%/*}")
done < "$fifo"
rm "$fifo"
echo ">>> Please enter the number of new theme for cursor"
select opt in "${themes[@]}"
do
if [ $REPLY -le ${#themes} ]
then
gsettings set org.gnome.desktop.interface cursor-theme \'$opt\' &&
exit 0
else
echo "Improper argument" > /dev/stderr
exit 1
fi
done