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


15

Come tutti sanno, puoi creare un nuovo profilo dal menu in cui ti viene chiesto quale profilo esistente dovrebbe essere il genitore per il 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 di nuovo con un nuovo nome o esiste una soluzione migliore? Se la risposta è sì: devo prestare attenzione al nome del nuovo profilo? Quelli nuovi sono sempre chiamati Profile0, Profile1, Profile2etc.


Risposte:


3
# 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 Elenco profili:" $ {profiles_list}
last_profile = $ (echo "$ {profiles_list}" | sed "s /^.*,//" | sed 's / Profile //')
echo "Cognome / numero profilo:" $ {last_profile}

# imposta il numero X "ProfileX" su 0 se esiste solo il valore predefinito o qualunque sia l'ultimo più 1
if [$ {last_profile} == "Predefinito"]; poi
    next_profile_number = 0;
echo "1 Nuovo numero di profilo:" $ {next_profile_number}
altro
    next_profile_number = $ (($ {last_profile} + 1));
echo "2 Nuovo numero di profilo:" $ {next_profile_number}
fi
echo "Nuovo numero di profilo:" $ {next_profile_number}

# costruire un elenco di profili con "numero" di profilo aggiuntivo
profiles_list = $ (echo "[$ {profiles_list}, profilo $ {next_profile_number}]")
echo "1 Elenco profili:" $ {profiles_list}

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

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

# indica a 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 "nascosto"
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"


9

Non è possibile creare un nuovo profilo, ma è possibile scaricare la configurazione corrente, utilizzarla gconftool-2, modificarla e caricarla.

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 ciò che gconf rileva come non predefiniti), quindi il file risultante non può essere completato.


5

Per GNOME Terminal> = 3.8 , per creare / modificare / leggere profili tramite cli, è possibile utilizzare dconf-clio 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 $dconfdircui è mostrato negli script di seguito.

Crea un nuovo profilo

I passaggi minimi sono

  1. Generare un UUID per il profilo eseguendo il comando uuidgen
  2. Aggiungilo a list:dconf write "$dconfdir/list" "[..., 'UUID']"
  3. 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-editorper 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 dumpun vecchio profilo e loadfarlo 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


Dobbiamo assolutamente votare questa risposta in quanto questa è la più corretta e aggiornata! Lo stavo cercando da tempo, dconf watch /ho impostato e finalmente ho capito cosa sta succedendo e la risposta è esatta come ha scritto @joegnis. Basta creare un UUID, scriverlo nel database e impostare visible-namee /list.
Kamil,

2

Semplice. Uso:

File-> Nuovo profilo sul tuo terminale.

Vedi qui per ulteriori dettagli.

Riferimenti:


1
La domanda dice che non si utilizza il menu, ma si utilizza invece la riga di comando.
Jonathan Hartley,

okay, suppongo che non abbia aiutato molto
Raynal Gobel,

1
Aiuta tutti gli altri che vengono qui tramite Google - potresti modificare la risposta per dire che non aiuta l'OP, ma può aiutare gli altri ... (mi ha aiutato!)
saggio

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.