¿Cómo puedo crear un nuevo perfil para el terminal Gnome a través de la línea de comando?

15

Como todos saben, puede crear un nuevo perfil mediante el menú donde se le pregunta qué perfil existente debe ser el padre de su nuevo perfil, etc. Pero, ¿cómo debo crear un nuevo perfil mediante la línea de comando?

¿Debo leer todos los valores existentes del perfil predeterminado a través de gconftool y configurarlos nuevamente con un nuevo nombre o hay alguna solución mejor? Si la respuesta es sí: ¿Tengo que prestar atención al nuevo nombre de perfil? Los nuevos son siempre llamados Profile0, Profile1, Profile2etc.

Wurstsalat
fuente

Respuestas:

3
# averigüe cuántos archivos hay - al principio solo habrá 1 - Predeterminado
profiles_list = $ (gconftool-2 --get "/ apps / gnome-terminal / global / profile_list" | sed "s | \ [||; s | \] ||;")
echo "1 Lista de perfiles:" $ {profiles_list}
last_profile = $ (echo "$ {profiles_list}" | sed "s /^.*,//" | sed 's / Profile //')
echo "Último nombre / número de perfil:" $ {last_profile}

# establezca el número X "ProfileX" en 0 si solo existe el valor predeterminado o el último es más 1
if [$ {last_profile} == "Predeterminado"]; luego
    next_profile_number = 0;
echo "1 Nuevo número de perfil:" $ {next_profile_number}
más
    next_profile_number = $ (($ {last_profile} + 1));
echo "2 Nuevo número de perfil:" $ {next_profile_number}
fi
echo "Nuevo número de perfil:" $ {next_profile_number}

# construir lista de perfiles con perfil adicional "número"
profiles_list = $ (echo "[$ {profiles_list}, Perfil $ {next_profile_number}]")
echo "1 Lista de perfiles:" $ {profiles_list}

# obtener un volcado del perfil predeterminado, cambiar el nombre global al nuevo nombre de perfil
profileName = MyNewProfile
gconftool-2 --dump "/ apps / gnome-terminal / profiles / Default"> /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml
sed -i "s | Default | Perfil $ {next_profile_number} | g" /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

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

# tell gnome-terminal que tiene otro perfil
gconftool-2 --set --type list --list-type string "/ apps / gnome-terminal / global / profile_list" "$ {profiles_list}"

# establecer propiedades
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"

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

Michael Czapski
fuente
9

No puede crear un nuevo perfil, pero puede volcar su configuración actual, usarla gconftool-2, modificarla y cargarla.

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

Recuerde que solo devuelve los valores no predeterminados (o lo que gconf detecta como no predeterminado), por lo que el archivo resultante no se pudo completar.

Braiam
fuente
5

Para GNOME Terminal> = 3.8 , para crear / editar / leer perfiles a través de cli, puede usar dconf-clio gsettings. Mi elección es dconf-cli.

El directorio dconf de GNOME Terminal es /org/gnome/terminal/legacy/profiles:. Todas las operaciones suceden en este directorio. Lo guardo en el $dconfdirque se muestra en los scripts a continuación.

Crea un nuevo perfil

Los pasos mínimos son

  1. Genere un UUID para el perfil ejecutando el comando uuidgen
  2. Añádelo a list:dconf write "$dconfdir/list" "[..., 'UUID']"
  3. Establecer su visible-name:dconf write "$dconfdir/:UUID"/visible-name "'NAME'"

Después de eso, incluso si no se configuran muchas configuraciones, aparecerá un nuevo perfil en la configuración de la GUI de la Terminal para que pueda editar la configuración a través de la GUI.

Un guión de trabajo:

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

Tenga cuidado con las citas alrededor del valor que escribe. Como se dice en el manual ,

Al configurar una clave, también necesita especificar a VALUE. El formato para el valor es el de un GVariant serializado, por lo que por ejemplo una cadena debe incluir cotizaciones explícitas: "'foo'". Este formato también se utiliza al imprimir valores.

Puede configurar más opciones del perfil a través de cli si lo desea. correr

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

para establecer Puede usar dconf-editorpara verificar las opciones disponibles. Navega a un camino como /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/. Sería mejor verificar un perfil antiguo que tiene muchas opciones establecidas.

Duplicar un perfil

Puede dconf dumpun perfil antiguo y loaduno existente. Por lo tanto, para duplicar un perfil, debe crear uno nuevo siguiendo los pasos anteriores y copiar un perfil antiguo para anularlo. Recuerde cambiarle el nombre después de anularlo.

Un guión de trabajo:

# ... 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 obtener el UUID de un perfil por su nombre:

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)

Establecer un perfil como predeterminado

Simplemente escriba el UUID del perfil en la clave default:

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

Referencia

joegnis
fuente
Definitivamente debemos votar esta respuesta ya que esta es la más correcta y actualizada. Estuve buscando esto por un tiempo, configuré dconf watch /y finalmente obtuve lo que está sucediendo y la respuesta es exacta como escribió @joegnis. Simplemente cree un UUID, escríbalo en la base de datos y establezca visible-namey /list.
Kamil
2

Sencillo. Utilizar:

Archivo-> Nuevo perfil en su terminal.

Ver aquí para más detalles.

Referencias

Raynal Gobel
fuente
1
La pregunta dice que no usa el menú, sino la línea de comandos.
Jonathan Hartley
bien, supongo que eso no ayudó mucho
Raynal Gobel
1
Ayuda a todos los demás que venimos aquí a través de Google: puede editar la respuesta para decir que no ayuda al OP, pero puede ayudar a otros ... (¡me ayudó!)
sabio
1
He creado un nuevo Q&A para GUI: ¿Cómo puedo crear un nuevo perfil de Terminal Gnome?
wjandrea