Come posso creare un nuovo profilo per il terminale Gnome tramite la riga di comando?

Come tutti sanno, puoi creare un nuovo profilo dal menu in cui ti viene chiesto quale profilo esistente dovrebbe essere il genitore del tuo nuovo profilo e così via. Ma come dovrei creare un nuovo profilo dalla riga di comando?

Devo leggere tutti i valori esistenti dal profilo predefinito tramite gconftool e impostarli nuovamente con un nuovo nome o esiste una soluzione migliore? Se la risposta è sì: Devo prestare attenzione al nuovo nome del profilo? I nuovi sono sempre chiamati Profile0 , Profile1 , Profile2 ecc.

 # scopri quanti pofiles ci sono - all'inizio ci sarà solo 1 - Default
 profiles_list = $ (gconftool-2 --get "/ apps / gnome-terminal / global / profile_list" | sed "s | \ [||; s | \] ||;")
 echo "1 Lista dei profili:" $ {profiles_list}
 last_profile = $ (echo "$ {profiles_list}" | sed "s /^.*,//" | sed 's / Profile //')
 echo "Cognome / Nome ultimo profilo:" $ {last_profile}

 # imposta il numero X di "ProfileX" su 0 se è presente solo l'impostazione predefinita o qual è l'ultima più 1
 se [$ {last_profile} == "Default"];  poi
     next_profile_number = 0;
 echo "1 Nuovo numero profilo:" $ {next_profile_number}
 altro
     next_profile_number = $ (($ {last_profile} + 1));
 echo "2 Nuovo numero profilo:" $ {next_profile_number}
 fi
 echo "Nuovo numero profilo:" $ {next_profile_number}

 # costruisci lista profili con profilo extra "numero"
 profiles_list = $ (echo "[$ {profiles_list}, Profile $ {next_profile_number}]")
 echo "1 Lista dei profili:" $ {profiles_list}

 # ottiene un dump del profilo predefinito, cambia il nome globale nel nuovo nome profilo
 profileName = MioNuovoProfilo
 gconftool-2 --dump "/ apps / gnome-terminal / profiles / Default"> /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml
 sed -i "s | Default | Profilo $ {next_profile_number} | g" /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

 # carica il nuovo profilo
 gconftool-2 --load /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

 # tell gnome-terminal che ha un altro profilo
 gconftool-2 --set --type list --list-type string "/ apps / gnome-terminal / global / profile_list" "$ {profiles_list}"

 # imposta proprietà
 gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / visible_name "$ {profileName}"
 gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / exit_action "hold"
 gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / font "Monospace 14"
 gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / background_color "# 000000000000"
 gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / foreground_color "# 0000FFFF0000"
 gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / scrollbar_position "hidden"
 gconftool-2 --set --type booleano / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / use_system_font "false"
 gconftool-2 --set --type booleano / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / use_theme_colors "false"
 gconftool-2 --set --type booleano / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / login_shell "true"
 gconftool-2 --set --type booleano / apps / gnome-terminal / profiles / Profile $ {next_profile_number} / scrollback_unlimited "true"

 # crea un terminale
 gnome-terminal --geometry = 80x24 + 0 + 0 --profile = $ {profileName} titolo "$ {profileName}" --zoom 0.8 -e "/ bin / sh"

Non è ansible creare un nuovo profilo, ma è ansible scaricare la configurazione corrente, utilizzando gconftool-2 , modificarlo e caricarlo.

 gconftool-2 --dump '/apps/gnome-terminal' > gnome-terminal-conf.xml ## Modify the file here. gconftool-2 --load gnome-terminal-conf.xml 

Ricorda che restituisce solo i valori non predefiniti (o che gconf rileva come non predefiniti), quindi il file risultante non può essere completato.

Semplice. Uso:

File-> Nuovo profilo sul tuo terminale.

Vedi qui per ulteriori dettagli.

Riferimenti:

Per GNOME Terminal> = 3.8 , per creare / modificare / leggere i profili tramite cli, è ansible 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 dir. Lo memorizzo in $dconfdir che è mostrato negli script qui sotto.

Crea un nuovo profilo

I passaggi minimi sono

  1. Generare un UUID per il profilo eseguendo il comando uuidgen
  2. Aggiungilo alla list : dconf write "$dconfdir/list" "[..., 'UUID']"
  3. Imposta il suo visible-name : dconf write "$dconfdir/:UUID"/visible-name "'NAME'"

Dopodiché, anche se non sono state impostate molte impostazioni, un nuovo profilo verrà visualizzato nelle impostazioni della GUI di Terminal in modo che sia ansible 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, è necessario specificare anche un VALUE . Il formato del valore è quello di GVariant serializzato, quindi ad esempio una stringa deve includere virgolette esplicite: "'foo'" . Questo formato viene anche utilizzato quando si stampano valori.

Puoi impostare più opzioni del profilo tramite cli se lo desideri. Correre

 dconf write /org/gnome/terminal/legacy/profiles:/:UUID/KEY "'NAME'" 

impostare. Puoi usare dconf-editor per controllare le opzioni disponibili. Passare a un percorso come /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/ . Sarebbe meglio controllare un vecchio profilo che ha molte opzioni impostate.

Duplica un profilo

Puoi dconf dump un vecchio profilo e load su uno esistente. Quindi, per duplicare un profilo, devi crearne uno nuovo usando i passaggi precedenti e copiare il profilo di un vecchio per sovrascriverlo. Ricordarsi 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 sul default della chiave:

 dconf write $dconfdir/default "'$UUID'" 

Riferimento

  • Anthony25 / gnome-terminal-colors-solarized . Capisco il mio modo leggendo un sacco di codici da qui. Davvero utile
  • dconf Manuale di riferimento