Como posso alterar o tema do ponteiro do mouse a partir da linha de comando?

3

No passado, tentei usar o Unity Tweak Tool para alterar meu tema de ponteiro do mouse. No entanto, quero alterá-lo do meu terminal também. Como posso fazer isso no Ubuntu 16.04?

    
por Vitor Abella 08.07.2017 / 01:11

1 resposta

2

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$ 
    
por Sergiy Kolodyazhnyy 08.07.2017 / 07:47