Comment puis-je créer un nouveau profil pour le terminal Gnome via la ligne de commande?

15

Comme tout le monde le sait, vous pouvez créer un nouveau profil par le menu où l'on vous demande quel profil existant devrait être le parent de votre nouveau profil, etc. Mais comment dois-je créer un nouveau profil par la ligne de commande?

Dois-je lire toutes les valeurs existantes du profil par défaut via gconftool et les redéfinir sous un nouveau nom ou existe-t-il une meilleure solution? Si la réponse est oui: dois-je faire attention au nouveau nom de profil? Les nouvelles sont toujours appelés Profile0, Profile1, Profile2etc.

Wurstsalat
la source
Pour utiliser l'interface graphique, voir Comment puis-je créer un nouveau profil de terminal Gnome?
wjandrea

Réponses:

3
# savoir combien de fichiers il y a - au début, il n'y en aura qu'un - Par défaut
profiles_list = $ (gconftool-2 --get "/ apps / gnome-terminal / global / profile_list" | sed "s | \ [||; s | \] ||;")
echo "1 Liste des profils:" $ {profiles_list}
last_profile = $ (echo "$ {profiles_list}" | sed "s /^.*,//" | sed's / Profile // ')
echo "Nom / numéro du dernier profil:" $ {last_profile}

# définissez le numéro X "ProfileX" sur 0 si seule la valeur par défaut existe ou quel que soit le dernier plus 1
if [$ {last_profile} == "Default"]; ensuite
    next_profile_number = 0;
echo "1 nouveau numéro de profil:" $ {next_profile_number}
autre
    next_profile_number = $ (($ {last_profile} + 1));
echo "2 Nouveau numéro de profil:" $ {next_profile_number}
Fi
echo "Nouveau numéro de profil:" $ {next_profile_number}

# construire une liste de profils avec un "numéro" de profil supplémentaire
profiles_list = $ (echo "[$ {profiles_list}, Profile $ {next_profile_number}]"))
echo "1 Liste des profils:" $ {profiles_list}

# obtenir un vidage du profil par défaut, changer le nom global pour le nouveau nom de profil
profileName = MyNewProfile
gconftool-2 --dump "/ apps / gnome-terminal / profiles / Default"> /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml
sed -i "s | Valeur par défaut | Profil $ {next_profile_number} | g" /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# charger un nouveau profil
gconftool-2 --load /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# indique à gnome-terminal qui a un autre profil
gconftool-2 --set --type list --list-type string "/ apps / gnome-terminal / global / profile_list" "$ {profiles_list}"

# définir les propriétés
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"

# créer un terminal
gnome-terminal --geometry = 80x24 + 0 + 0 --profile = $ {profileName} title "$ {profileName}" --zoom 0.8 -e "/ bin / sh"

Michael Czapski
la source
9

Vous ne pouvez pas créer un nouveau profil, mais vous pouvez vider votre configuration actuelle, l'utiliser gconftool-2, la modifier et la charger.

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

N'oubliez pas qu'il ne renvoie que les valeurs non par défaut (ou ce que gconf détecte comme non par défaut), le fichier résultant n'a donc pas pu être complet.

Braiam
la source
5

Pour GNOME Terminal> = 3.8 , pour créer / éditer / lire des profils via cli, vous pouvez utiliser soit dconf-cliou gsettings. Mon choix est dconf-cli.

Le répertoire dconf du terminal GNOME est /org/gnome/terminal/legacy/profiles:. Toutes les opérations se déroulent dans ce répertoire. Je le stocke dans $dconfdirce qui est montré dans les scripts ci-dessous.

Créer un nouveau profil

Les étapes minimales sont

  1. Générez un UUID pour le profil en exécutant la commande uuidgen
  2. Ajoutez-le à list:dconf write "$dconfdir/list" "[..., 'UUID']"
  3. Réglez son visible-name:dconf write "$dconfdir/:UUID"/visible-name "'NAME'"

Après cela, même si de nombreux paramètres ne sont pas définis, un nouveau profil apparaîtra dans les paramètres de l'interface graphique du terminal afin que vous puissiez modifier les paramètres via l'interface graphique.

Un script de travail:

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

Faites attention aux citations autour de la valeur que vous écrivez. Comme indiqué dans le manuel ,

Lors de la définition d'une clé, vous devez également spécifier a VALUE. Le format de la valeur est celle d'un GVariant sérialisé, donc par exemple une chaîne doit inclure des citations explicites: "'foo'". Ce format est également utilisé lors de l'impression des valeurs.

Vous pouvez définir plus d'options du profil via cli si vous le souhaitez. Courir

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

mettre en place. Vous pouvez utiliser dconf-editorpour vérifier les options disponibles. Accédez à un chemin comme /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/. Il serait préférable de vérifier un ancien profil comportant de nombreuses options.

Dupliquer un profil

Vous pouvez dconf dumpun ancien profil et le loadremplacer par un existant. Donc, pour dupliquer un profil, vous devez en créer un nouveau en suivant les étapes ci-dessus et copier le profil d'un ancien pour le remplacer. N'oubliez pas de le renommer après avoir remplacé.

Un script de travail:

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

Pour obtenir l'UUID d'un profil par son nom:

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)

Définir un profil par défaut

Écrivez simplement l'UUID du profil sur la clé default:

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

Référence

joegnis
la source
Nous devons certainement voter pour cette réponse car c'est la plus correcte et la plus à jour! Je cherchais cela moi-même depuis un certain temps, je me suis mis dconf watch /et j'ai finalement compris ce qui se passait et la réponse est exacte comme l'a écrit @joegnis. Créez simplement un UUID, écrivez-le dans la base de données et définissez visible-nameet /list.
Kamil
2

Facile. Utilisation:

Fichier-> Nouveau profil sur votre terminal.

Voir ici pour plus de détails.

Les références:

Raynal Gobel
la source
1
La question dit de ne pas utiliser le menu, mais d'utiliser la ligne de commande à la place.
Jonathan Hartley
d'accord, je suppose que cela n'a pas beaucoup aidé
Raynal Gobel
1
Cela aide tous les autres d'entre nous qui viennent ici via Google - vous pouvez modifier la réponse pour dire que cela n'aide pas le PO, mais peut aider les autres ... (m'a aidé!)
sage
1
J'ai créé un nouveau Q&A pour l'interface graphique: Comment puis-je créer un nouveau profil de terminal Gnome?
wjandrea