Для GNOME Terminal> = 3.8 , чтобы создавать / редактировать / читать профили через cli, вы можете использовать либо dconf-cli
или gsettings
. Мой выборdconf-cli
.
Каталог dconf терминала GNOME - это
/org/gnome/terminal/legacy/profiles:
. Все операции происходят в этом реж. Я храню это в$dconfdir
котором показано в сценариях ниже.
Создать новый профиль
Минимальные шаги
- Сгенерируйте UUID для профиля, выполнив команду
uuidgen
- Добавить его к
list
:dconf write "$dconfdir/list" "[..., 'UUID']"
- Установите его
visible-name
:dconf write "$dconfdir/:UUID"/visible-name "'NAME'"
После этого, даже если многие параметры не заданы, в настройках GUI терминала появится новый профиль, так что вы сможете редактировать настройки через GUI.
Рабочий скрипт:
#!/bin/bash
dconfdir=/org/gnome/terminal/legacy/profiles:
create_new_profile() {
local profile_ids=($(dconf list $dconfdir/ | grep ^: |\
sed 's/\///g' | sed 's/://g'))
local profile_name="$1"
local profile_ids_old="$(dconf read "$dconfdir"/list | tr -d "]")"
local profile_id="$(uuidgen)"
[ -z "$profile_ids_old" ] && local lb="[" # if there's no `list` key
[ ${#profile_ids[@]} -gt 0 ] && local delimiter=, # if the list is empty
dconf write $dconfdir/list \
"${profile_ids_old}${delimiter} '$profile_id']"
dconf write "$dconfdir/:$profile_id"/visible-name "'$profile_name'"
echo $profile_id
}
# Create profile
id=$(create_new_profile TEST)
Будьте осторожны с кавычками вокруг значения, которое вы пишете. Как сказано в руководстве ,
При настройке ключа также необходимо указать VALUE
. Формат значения является то , что сериализованным GVariant, так , например , строка должна содержать явные кавычки: "'foo'"
. Этот формат также используется при распечатке значений.
Вы можете установить дополнительные параметры профиля через cli, если хотите. Бегать
dconf write /org/gnome/terminal/legacy/profiles:/:UUID/KEY "'NAME'"
установить. Вы можете использовать dconf-editor
для проверки доступных опций. Перейдите к пути, как
/org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/
. Было бы лучше проверить старый профиль, который имеет множество параметров.
Дублировать профиль
Вы можете dconf dump
старый профиль иload
его существующий. Таким образом, чтобы дублировать профиль, вам нужно создать новый, используя шаги, описанные выше, и скопировать старый профиль, чтобы переопределить его. Не забудьте переименовать его после переопределения.
Рабочий скрипт:
# ... codes from last script
duplicate_profile() {
local from_profile_id="$1"; shift
local to_profile_name="$1"; shift
local profile_ids=($(dconf list $dconfdir/ | grep ^: |\
sed 's/\///g' | sed 's/://g'))
# If UUID doesn't exist, abort
in_array "$from_profile_id" "${profile_ids[@]}" || return 1
# Create a new profile
local id=$(create_new_profile "$to_profile_name")
# Copy an old profile and write it to the new
dconf dump "$dconfdir/:$from_profile_id/" \
| dconf load "$dconfdir/:$id/"
# Rename
dconf write "$dconfdir/:$id"/visible-name "'$to_profile_name'"
}
# Create a profile from an existing one
duplicate_profile $id TEST1
Чтобы получить UUID профиля по имени:
get_profile_uuid() {
# Print the UUID linked to the profile name sent in parameter
local profile_ids=($(dconf list $dconfdir/ | grep ^: |\
sed 's/\///g' | sed 's/://g'))
local profile_name="$1"
for i in ${!profile_ids[*]}; do
if [[ "$(dconf read $dconfdir/:${profile_ids[i]}/visible-name)" == \
"'$profile_name'" ]]; then
echo "${profile_ids[i]}"
return 0
fi
done
}
id=$(get_profile_uuid Default)
Установить профиль по умолчанию
Просто напишите UUID профиля для ключа default
:
dconf write $dconfdir/default "'$UUID'"
Ссылка