Как я могу изменить тему указателя мыши из командной строки?

В прошлом я пытался использовать Unity Tweak Tool, чтобы изменить тему указателя мыши. Тем не менее, я хочу изменить его из моего терминала, а также. Как я могу сделать это на Ubuntu 16.04?

1 ответ

Решение

Как настройки работают под капотом

Профиль каждого пользователя управляется DConf база данных. Вы можете прочитать больше об этом в моем ответе на этот вопрос: приложение на основе графического интерфейса выполняет команды оболочки в фоновом режиме? Каждый конкретный параметр имеет схему - что-то вроде URL - и ключ - имя определенного параметра - связанный с ним.

Давайте выясним, какие настройки изменяет Unity Tweak Tool при изменении темы курсора, запустив dconf watch / а затем изменить тему указателя в UTT:

$ dconf watch /
/org/gnome/desktop/interface/cursor-theme
  'crystalblue_classic'

Отлично, теперь мы знаем, какую схему и ключ нужно изменить!

Инструмент gsettings - друг твикера

К счастью для нас, существует утилита командной строки под названием gsettings, который мы можем использовать для изменения настроек, которые нам нужны. Этот инструмент часто используется в сценариях оболочки. Для других типов языков, таких как 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

А затем просто выберите имя папки каждой темы в качестве нового значения.

Идем дальше - делаем сценарий оболочки

Конечно, мы не хотим иметь дело с несколькими командами снова и снова. Скорее, давайте сделаем это просто через скрипт оболочки, в данном конкретном случае - 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$ 

Помимо ответа Сергея Колодяжного выше, стоит также проверить локальный каталог пользователя, потому что большинство тем устанавливаются там по умолчанию:

#!/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
Другие вопросы по тегам