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

15

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

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

Wurstsalat
fonte
Para usar a GUI, consulte Como criar um novo perfil de terminal Gnome?
Wjandrea

Respostas:

3
# descobrir quantos arquivos existem - no início, haverá apenas 1 - Padrão
profiles_list = $ (gconftool-2 --get "/ apps / gnome-terminal / global / profile_list" | sed "s | \ [| |; s | \] ||;")
eco "1 lista de perfis:" $ {profiles_list}
last_profile = $ (echo "$ {profiles_list}" | sed "s /^.*,//" | sed 's / perfil //')
eco "Nome / número do último perfil:" $ {last_profile}

# defina o número X "ProfileX" como 0 se apenas o padrão estiver lá ou o último for mais 1
if [$ {last_profile} == "Padrão"]; então
    next_profile_number = 0;
eco "1 Novo número de perfil:" $ {next_profile_number}
outro
    next_profile_number = $ (($ {last_profile} + 1));
echo "2 Novo número de perfil:" $ {next_profile_number}
fi
echo "Novo número de perfil:" $ {next_profile_number}

# construa a lista de perfis com o perfil "número" extra
profiles_list = $ (eco "[$ {profiles_list}, perfil $ {next_profile_number}]")
eco "1 lista de perfis:" $ {profiles_list}

# obtenha um despejo do perfil padrão, altere o nome global para o novo nome do perfil
profileName = MyNewProfile
gconftool-2 --dump "/ apps / gnome-terminal / profiles / Padrão"> /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml
sed -i "s | Padrão | Perfil $ {next_profile_number} | g" /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# carregar novo perfil
gconftool-2 --load /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# tell gnome-terminal que possui outro perfil
gconftool-2 --set --type list - string do tipo list "/ apps / gnome-terminal / global / profile_list" "$ {profiles_list}"

# definir propriedades
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} / fonte "Monospace 14"
gconftool-2 --set --type string / apps / gnome-terminal / profiles / Perfil $ {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 / Perfil $ {next_profile_number} / scrollbar_position "hidden"
gconftool-2 --set --type booleano / apps / gnome-terminal / profiles / Perfil $ {next_profile_number} / use_system_font "false"
gconftool-2 --set --type booleano / apps / gnome-terminal / profiles / Perfil $ {next_profile_number} / use_theme_colors "false"
gconftool-2 --set --type booleano / apps / gnome-terminal / profiles / Perfil $ {next_profile_number} / login_shell "true"
gconftool-2 --set --type booleano / apps / gnome-terminal / profiles / Perfil $ {next_profile_number} / scrollback_unlimited "true"

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

Michael Czapski
fonte
9

Você não pode criar um novo perfil, mas pode despejar 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.

Braiam
fonte
5

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

O diretório dconf do Terminal GNOME é /org/gnome/terminal/legacy/profiles:. Todas as operações acontecem neste diretório. Eu guardo no $dconfdirqual é mostrado nos scripts abaixo.

Crie um novo perfil

Etapas mínimas são

  1. Gere um UUID para o perfil executando o comando uuidgen
  2. Acrescente-o 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 estejam definidas, um novo perfil será exibido nas configurações da GUI do Terminal para que você possa editar as configurações pela 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 ,

Ao definir uma chave, você também precisa especificar a VALUE. O formato para o valor é a de um GVariant serializado, então por exemplo, uma cadeia tem de incluir citações explícitas: "'foo'". Este formato também é usado ao imprimir valores.

Você pode definir mais opções do perfil através do CLI, se desejar. Corre

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

pôr. Você pode usar dconf-editorpara verificar as opções disponíveis. Navegue para um caminho como /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/. Seria melhor verificar um perfil antigo com muitas opções definidas.

Duplicar um perfil

Você pode criar um dconf dumpperfil antigo e loadum existente. Portanto, 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 após a substituição.

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

Simplesmente escreva o UUID do perfil na chave default:

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

Referência

joegnis
fonte
Definitivamente, precisamos aprovar esta resposta, pois esta é a mais correta e atualizada! Eu estava procurando por mim mesmo por algum tempo, definido dconf watch /e finalmente entendi o que estava acontecendo e a resposta é exata como o @joegnis escreveu. Basta criar um UUID, gravá-lo no banco de dados e definir visible-namee /list.
18718 Kamil
2

Simples. Usar:

Arquivo-> Novo Perfil no seu terminal.

Veja aqui para mais detalhes.

Referências:

Raynal Gobel
fonte
1
A pergunta diz não usar o menu, mas usar a linha de comando.
Jonathan Hartley
bem, acho que não ajuda muito
Raynal Gobel
1
Ela não ajuda todo o resto de nós que vêm aqui via Google - você pode editar a resposta para dizer que isso não ajuda o OP, mas pode ajudar os outros ... (me ajudou!)
sábio
1
Criei uma nova seção de perguntas e respostas para a GUI: Como posso criar um novo perfil de terminal do Gnome?
Wjandrea