Как я могу изменить тему указателя мыши из командной строки?
В прошлом я пытался использовать 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