Como posso criar um novo perfil para o terminal Gnome via linha de comando?

14

Como todos sabem, você pode criar um novo perfil pelo menu, onde é perguntado qual perfil existente deve ser o pai do novo perfil e assim por diante. Mas como devo criar um novo perfil pela linha de comando?

Devo ler todos os valores existentes do perfil padrão via gconftool e configurá-los novamente com um novo nome ou existe alguma solução melhor? Se a resposta é sim: Tenho que prestar atenção no novo nome do perfil? Os novos são sempre chamados Profile0 , Profile1 , Profile2 etc.

    
por Wurstsalat 20.03.2013 / 17:49

4 respostas

2
# find out how many pofiles there are - at the beginning there will be just 1 - Default
profiles_list=$(gconftool-2 --get "/apps/gnome-terminal/global/profile_list" | sed "s|\[||;s|\]||;")
echo "1 Profiles List: " ${profiles_list}
last_profile=$(echo "${profiles_list}" | sed "s/^.*,//" | sed 's/Profile//')
echo "Last Profile Name/Number: " ${last_profile}

# set the "ProfileX" X number to 0 if only default is there or whatever the last is plus 1
if [ ${last_profile} == "Default" ]; then
    next_profile_number=0;
echo "1 New Profile Number: " ${next_profile_number}
else
    next_profile_number=$(( ${last_profile} + 1 ));
echo "2 New Profile Number: " ${next_profile_number}
fi
echo "New Profile Number: " ${next_profile_number}

# construct profiles list with extra profile "number"
profiles_list=$(echo "[${profiles_list},Profile${next_profile_number}]")
echo "1 Profiles List: " ${profiles_list}

# get a dump of the default profile, change global name to the new profile name
profileName=MyNewProfile
gconftool-2 --dump "/apps/gnome-terminal/profiles/Default" > /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml
sed -i "s|Default|Profile${next_profile_number}|g" /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# load new profile
gconftool-2 --load /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# tell gnome-terminal that is has another profile
gconftool-2 --set --type list --list-type string "/apps/gnome-terminal/global/profile_list" "${profiles_list}"

# set properties
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 boolean /apps/gnome-terminal/profiles/Profile${next_profile_number}/use_system_font "false"
gconftool-2 --set --type boolean /apps/gnome-terminal/profiles/Profile${next_profile_number}/use_theme_colors "false"
gconftool-2 --set --type boolean /apps/gnome-terminal/profiles/Profile${next_profile_number}/login_shell "true"
gconftool-2 --set --type boolean /apps/gnome-terminal/profiles/Profile${next_profile_number}/scrollback_unlimited "true"

# create a terminal
gnome-terminal --geometry=80x24+0+0 --profile=${profileName} title "${profileName}" --zoom 0.8 -e "/bin/sh"

    
por Michael Czapski 19.11.2016 / 06:53
8

Você não pode criar um novo perfil, mas pode descarregar sua configuração atual usando gconftool-2 , modificá-lo e carregá-lo.

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

Lembre-se de que ele retorna apenas os valores não padrão (ou o que o gconf detecta como não-padrão), portanto, o arquivo resultante não pôde ser concluído.

    
por Braiam 03.08.2013 / 20:10
2

Simples. Use:

Arquivo- > Novo perfil no seu terminal.

Veja aqui para mais detalhes.

Referências:

por Raynal Gobel 20.03.2015 / 04:16
2

Para Terminal GNOME > = 3.8 , para criar / editar / ler perfis através de cli, você pode usar dconf-cli ou gsettings . Minha escolha é dconf-cli .

% bl0ck_qu0te%

Crie um novo perfil

As etapas mínimas são

  1. Gere um UUID para o perfil executando o comando uuidgen
  2. Anexá-lo a list : dconf write "$dconfdir/list" "[..., 'UUID']"
  3. Defina seu visible-name : dconf write "$dconfdir/:UUID"/visible-name "'NAME'"

Depois disso, mesmo que muitas configurações não sejam definidas, um novo perfil será exibido na GUI do Terminal configurações para que você possa editar as configurações através da GUI.

Um script de trabalho:

#!/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)

Tenha cuidado com as aspas em torno do valor que você escreve. Como dito no manual ,

% bl0ck_qu0te%

Você pode definir mais opções do perfil através do cli, se quiser. Executar

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

para definir. Você pode usar dconf-editor para verificar as opções disponíveis. Navegue até um caminho como %código%. Seria melhor verificar um perfil antigo que tenha muitas opções definidas.

Duplicar um perfil

Você pode /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/ um perfil antigo e dconf dump para um existente. Então, para duplicar um perfil, você precisa criar um novo usando as etapas acima e copiar o perfil de um antigo para substituí-lo. Lembre-se de renomeá-lo depois de substituir.

Um script de trabalho:

# ... 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

Para obter o UUID de um perfil pelo 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)

Definir um perfil como padrão

Basta escrever o UUID do perfil na chave load :

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

Referência

  • Anthony25 / gnome-terminal-colors -solarizado . Eu descubro meu caminho lendo muitos códigos daqui. Realmente útil.
  • Manual de Referência do dconf
por joegnis 10.09.2017 / 22:49