Wie kann ich über die Befehlszeile ein neues Profil für das Gnome-Terminal erstellen?

15

Wie jeder weiß, können Sie über das Menü ein neues Profil erstellen, in dem Sie gefragt werden, welches vorhandene Profil das übergeordnete Profil für Ihr neues Profil sein soll. Aber wie soll ich ein neues Profil über die Befehlszeile erstellen?

Soll ich jeden vorhandenen Wert aus dem Standardprofil über gconftool lesen und unter einem neuen Namen neu setzen oder gibt es eine bessere Lösung? Wenn die Antwort ja lautet: Muss ich auf den neuen Profilnamen achten? Die Neuen sind immer aufgerufen Profile0, Profile1, Profile2usw.

Wurstsalat
quelle
Informationen zur Verwendung der Benutzeroberfläche finden Sie unter Wie kann ich ein neues Gnome-Terminal-Profil erstellen?
wjandrea

Antworten:

3
# Finde heraus, wie viele Pofile es gibt - am Anfang wird es nur 1 geben - Default
profiles_list = $ (gconftool-2 --get "/ apps / gnome-terminal / global / profile_list" | sed "s | \ [||; s | \] ||;")
Echo "1 Profilliste:" $ {profiles_list}
last_profile = $ (echo "$ {profiles_list}" | sed "s /^.* ,//" | sed 's / Profile //')
Echo "Name / Nummer des letzten Profils:" $ {last_profile}

# setze die "ProfileX" X-Nummer auf 0, wenn nur die Standardeinstellung vorhanden ist oder was auch immer die letzte plus 1 ist
if [$ {last_profile} == "Default"]; dann
    next_profile_number = 0;
Echo "1 New Profile Number:" $ {next_profile_number}
sonst
    next_profile_number = $ (($ {last_profile} + 1));
Echo "2 New Profile Number:" $ {next_profile_number}
fi
Echo "Neue Profilnummer:" $ {next_profile_number}

# Konstruiere Profilliste mit extra Profil "Nummer"
profiles_list = $ (Echo "[$ {profiles_list}, Profil $ {next_profile_number}]")
Echo "1 Profilliste:" $ {profiles_list}

# Sichern Sie sich das Standardprofil, und ändern Sie den globalen Namen in den neuen Profilnamen
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

# Neues Profil laden
gconftool-2 --loade /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# gnome-terminal mitteilen, das ein anderes Profil hat
gconftool-2 --set --type list --list-type string "/ apps / gnome-terminal / global / profile_list" "$ {profiles_list}"

# Eigenschaften festlegen
gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profil $ {nächste_profilnummer} / sichtbarer_name "$ {profilname}"
gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profil $ {next_profile_number} / exit_action "hold"
gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profil $ {nächste_profilnummer} / font "Monospace 14"
gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profile $ {nächste_profilnummer} / background_color "# 000000000000"
gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profil $ {next_profile_number} / foreground_color "# 0000FFFF0000"
gconftool-2 --set --type string / apps / gnome-terminal / profiles / Profil $ {next_profile_number} / scrollbar_position "hidden"
gconftool-2 --set --type boolean / apps / gnome-terminal / profiles / Profil $ {next_profile_number} / use_system_font "false"
gconftool-2 --set --type boolean / apps / gnome-terminal / profiles / Profil $ {next_profile_number} / use_theme_colors "false"
gconftool-2 --set --type boolean / apps / gnome-terminal / profiles / Profil $ {next_profile_number} / login_shell "true"
gconftool-2 --set --type boolean / apps / gnome-terminal / profiles / Profil $ {next_profile_number} / scrollback_unlimited "true"

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

Michael Czapski
quelle
9

Sie können kein neues Profil erstellen, aber Sie können Ihre aktuelle Konfiguration sichern, indem gconftool-2Sie sie verwenden , ändern und laden.

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

Denken Sie daran, dass nur die nicht standardmäßigen Werte zurückgegeben werden (oder was gconf als nicht standardmäßig erkennt), sodass die resultierende Datei nicht vollständig sein konnte.

Braiam
quelle
5

Für GNOME Terminal> = 3.8 können Sie zum Erstellen / Bearbeiten / Lesen von Profilen über cli entweder dconf-clioder verwenden gsettings. Meine Wahl ist dconf-cli.

Das Verzeichnis dconf von GNOME Terminal lautet /org/gnome/terminal/legacy/profiles:. Alle Operationen finden in diesem Verzeichnis statt. Ich speichere es, in $dconfdirdem in den Skripten unten gezeigt wird.

Erstellen Sie ein neues Profil

Mindestschritte sind

  1. Generieren Sie eine UUID für das Profil, indem Sie den Befehl ausführen uuidgen
  2. Hänge es an list:dconf write "$dconfdir/list" "[..., 'UUID']"
  3. Stellen Sie seine visible-name :dconf write "$dconfdir/:UUID"/visible-name "'NAME'"

Danach wird in den GUI-Einstellungen von Terminal ein neues Profil angezeigt, damit Sie die Einstellungen über die GUI bearbeiten können, auch wenn nicht viele Einstellungen festgelegt wurden.

Ein funktionierendes Skript:

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

Achten Sie auf die Anführungszeichen um den Wert, den Sie schreiben. Wie im Handbuch gesagt ,

Beim Festlegen eines Schlüssels müssen Sie auch a angeben VALUE. Das Format für den Wert ist die ein serialisiert GVariant, so zB ein String explizite Anführungszeichen enthalten muss: "'foo'". Dieses Format wird auch beim Ausdrucken von Werten verwendet.

Sie können weitere Optionen des Profils über cli festlegen, wenn Sie möchten. Lauf

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

zu setzen. Mit können dconf-editorSie verfügbare Optionen prüfen. Navigieren Sie zu einem Pfad wie /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/ . Es ist besser, ein altes Profil zu überprüfen, für das viele Optionen festgelegt wurden.

Dupliziere ein Profil

Sie können dconf dumpein altes Profil undload es einem vorhandenen zuordnen. Um ein Profil zu duplizieren, müssen Sie ein neues mit den obigen Schritten erstellen und ein altes Profil kopieren, um es zu überschreiben. Denken Sie daran, es nach dem Überschreiben umzubenennen.

Ein funktionierendes Skript:

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

So rufen Sie die UUID eines Profils anhand seines Namens ab:

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)

Ein Profil als Standard festlegen

Schreiben Sie einfach die UUID des Profils in den Schlüssel default:

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

Referenz

joegnis
quelle
Wir müssen diese Antwort auf jeden Fall positiv bewerten, da dies die zutreffendste und aktuellste ist! Ich habe selbst eine Zeit lang danach gesucht, eingestellt dconf watch /und endlich erfahren, was los ist, und die Antwort ist genau so, wie @joegnis geschrieben hat. Erstellen Sie einfach eine UUID, schreiben Sie sie in die Datenbank und legen Sie visible-nameund fest /list.
Kamil
2

Einfach. Verwenden:

Datei-> Neues Profil auf Ihrem Terminal.

Siehe hier für weitere Details.

Verweise:

Raynal Gobel
quelle
1
Die Frage lautet nicht über das Menü, sondern über die Befehlszeile.
Jonathan Hartley
Okay, denke, das hat nicht viel geholfen
Raynal Gobel
1
Es hilft uns allen, die über Google hierher kommen - Sie können die Antwort so ändern, dass sie dem OP nicht hilft, aber anderen helfen kann ... (hat mir geholfen!)
Salbei
1
Ich habe eine neue Frage und Antwort für die Benutzeroberfläche erstellt: Wie kann ich ein neues Gnome Terminal-Profil erstellen?
wjandrea