В прошлом я попытался использовать Инструмент Тонкой настройки Единицы для изменения моей темы указателя мыши. Однако я хочу изменить его от своего терминала также. Как я могу сделать это на Ubuntu 16.04?
Профилем каждого пользователя управляют DConf
база данных. Можно прочитать больше об этом мой ответ по этому вопросу: основанное на GUI приложение выполняет команды оболочки в фоновом режиме? Каждая конкретная установка имеет схему - вид подобных URL - и ключ - название конкретной установки - связанный с ним.
Давайте узнаем, какая установка делает Инструмент Тонкой настройки Единицы, изменяются, когда мы изменяем тему курсора путем выполнения dconf watch /
и затем изменяя тему указателя в UTT:
$ dconf watch /
/org/gnome/desktop/interface/cursor-theme
'crystalblue_classic'
Большой, теперь мы знаем что схема и ключ к изменению!
К счастью для нас там существует названная утилита командной строки 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$
в дополнение к ответу Сергея Колодяжного выше, стоит также проверить локальный каталог пользователя, потому что большинство тем устанавливаются там по умолчанию:
#!/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