Como funcionam as configurações sob o capô
Cada perfil de usuário é gerenciado por DConf
database. Você pode ler mais sobre isso minha resposta sobre esta questão: A aplicação baseada em GUI executa comandos shell em segundo plano? Cada configuração particular tem esquema - uma espécie de URL - e chave - um nome de uma configuração específica - associado a ele.
Vamos descobrir que configuração o Unity Tweak Tool altera quando alteramos o tema do cursor, executando dconf watch /
e, em seguida, alterando o tema do ponteiro em UTT:
$ dconf watch /
/org/gnome/desktop/interface/cursor-theme
'crystalblue_classic'
Ótimo, agora sabemos qual esquema e chave para mudar!
A ferramenta gsettings - amigo do tweaker
Para nossa sorte, existe um utilitário de linha de comando chamado gsettings
, que podemos usar para alterar as configurações de que precisamos. Esta ferramenta é freqüentemente usada em scripts de shell. Para outros tipos de linguagens, como Python ou C, existem bibliotecas GSettings que nos permitem fazer as mesmas coisas. Aqui, queremos especificamente usar gsettings
, porque ele pode ser usado na linha de comando.
A diferença a notar é que, ao contrário de dconf
, os esquemas são separados por pontos, em vez de separados por barras. Assim, gsettings
entenderia org.gnome.desktop.interface
schema.
Assim, o que podemos fazer é isto:
$ gsettings set org.gnome.desktop.interface cursor-theme 'redglass'
Observe que neste exemplo eu estou usando Redglass
como um dos temas que eu instalei, o que você pode não ter, então use alguns dos valores que você listou em UTT.
Localizando valores do esquema
Normalmente, o que pode ser feito para encontrar todas as opções possíveis no gsettings
schema é usar a opção range
:
$ gsettings range com.canonical.Unity.Launcher launcher-position
enum
'Left'
'Bottom'
Infelizmente, o esquema que precisamos usar para alterar o tema do cursor não tem enum
valores:
$ gsettings range org.gnome.desktop.interface cursor-theme
type s
Assim, alternativamente, o que você pode fazer (e o que o UTT aparentemente faz) é listar todos os diretórios na pasta /usr/share/icons
que possuem a pasta cursors
da seguinte forma:
$ 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
Em seguida, basta selecionar o nome da pasta de cada tema como novo valor.
Continuando - fazendo um script de shell
Claro que não queremos lidar com vários comandos repetidas vezes. Em vez disso, vamos simplificar através de um shell script, neste caso em particular - um script bash
(porque queremos usar recursos avançados como arrays e porque não estamos nos esforçando para portabilidade para sistemas que não sejam o Ubuntu) que listará temas disponíveis e nos permitirá selecionar o que queremos.
#!/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
Execução de teste:
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$