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

В прошлом я попытался использовать Инструмент Тонкой настройки Единицы для изменения моей темы указателя мыши. Однако я хочу изменить его от своего терминала также. Как я могу сделать это на Ubuntu 16.04?

4
задан 8 July 2017 в 03:04

2 ответа

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

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

Давайте узнаем, какая установка делает Инструмент Тонкой настройки Единицы, изменяются, когда мы изменяем тему курсора путем выполнения dconf watch / и затем изменяя тему указателя в UTT:

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

Большой, теперь мы знаем что схема и ключ к изменению!

Инструмент gsettings - друг tweaker

К счастью для нас там существует названная утилита командной строки 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

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

Взятие его далее - создание сценария оболочки

Конечно, мы не хотим иметь дело с несколькими командами много раз. Скорее позволяет, делают это простым с помощью сценария оболочки, в данном случае - a 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$ 
3
ответ дан 1 December 2019 в 10:00

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

#!/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
0
ответ дан 26 October 2020 в 19:11

Другие вопросы по тегам:

Похожие вопросы: