Per GNOME Terminal> = 3.8 , per creare / modificare / leggere profili tramite cli, è possibile utilizzare dconf-cli
o gsettings
. La mia scelta è dconf-cli
.
La directory dconf del Terminale GNOME è
/org/gnome/terminal/legacy/profiles:
. Tutte le operazioni avvengono in questa directory. Lo memorizzo in $dconfdir
cui è mostrato negli script di seguito.
Crea un nuovo profilo
I passaggi minimi sono
- Generare un UUID per il profilo eseguendo il comando
uuidgen
- Aggiungilo a
list
:dconf write "$dconfdir/list" "[..., 'UUID']"
- Imposta il suo
visible-name
:dconf write "$dconfdir/:UUID"/visible-name "'NAME'"
Successivamente, anche se non sono state impostate molte impostazioni, nelle impostazioni della GUI di Terminal verrà visualizzato un nuovo profilo in modo da poter modificare le impostazioni tramite la GUI.
Una sceneggiatura funzionante:
#!/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)
Fai attenzione alle virgolette intorno al valore che scrivi. Come detto nel manuale ,
Quando si imposta una chiave, è inoltre necessario specificare a VALUE
. Il formato per il valore è quello di un GVariant serializzato, così per esempio una stringa deve includere citazioni esplicite: "'foo'"
. Questo formato viene utilizzato anche per la stampa di valori.
Se lo desideri, puoi impostare più opzioni del profilo tramite cli. Correre
dconf write /org/gnome/terminal/legacy/profiles:/:UUID/KEY "'NAME'"
impostare. Puoi usare dconf-editor
per controllare le opzioni disponibili. Navigare verso un percorso simile
/org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/
. Sarebbe meglio controllare un vecchio profilo che ha molte opzioni impostate.
Duplica un profilo
È possibile dconf dump
un vecchio profilo e load
farlo su uno esistente. Quindi, per duplicare un profilo, devi crearne uno nuovo seguendo i passaggi precedenti e copiare il profilo di un vecchio per sovrascriverlo. Ricorda di rinominarlo dopo l'override.
Una sceneggiatura funzionante:
# ... 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
Per ottenere l'UUID di un profilo con il suo nome:
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)
Imposta un profilo come predefinito
Basta scrivere l'UUID del profilo sulla chiave default
:
dconf write $dconfdir/default "'$UUID'"
Riferimento