Jak mogę utworzyć nowy profil dla terminala Gnome za pomocą wiersza poleceń?

15

Jak wszyscy wiedzą, możesz utworzyć nowy profil za pomocą menu, w którym pojawi się pytanie, który istniejący profil powinien być rodzicem dla nowego profilu i tak dalej. Ale jak mam utworzyć nowy profil za pomocą wiersza polecenia?

Czy powinienem odczytać każdą istniejącą wartość z domyślnego profilu poprzez gconftool i ustawić je ponownie pod nową nazwą, czy jest jakieś lepsze rozwiązanie? Jeśli odpowiedź brzmi „tak”: czy muszę zwracać uwagę na nazwę nowego profilu? Te nowe są zawsze nazywane Profile0, Profile1, Profile2itd.

Wurstsalat
źródło
Aby korzystać z GUI, zobacz Jak mogę utworzyć nowy profil Gnome Terminal?
wjandrea,

Odpowiedzi:

3
# dowiedz się, ile jest plików - na początku będzie tylko 1 - Domyślnie
profile_list = $ (gconftool-2 --get "/ apps / gnome-terminal / global / profile_list" | sed "s | \ [||; s | \] ||;")
echo „Lista 1 profili:” $ {profile_list}
last_profile = $ (echo "$ {profile_list}" | sed "s /^.*,//" | sed 's / Profile //')
echo „Nazwisko / numer ostatniego profilu:” $ {last_profile}

# ustaw X „ProfileX” na 0, jeśli jest tam tylko wartość domyślna lub cokolwiek ostatniego to plus 1
if [$ {last_profile} == „Domyślny”]; następnie
    next_profile_number = 0;
echo „1 nowy numer profilu:” $ {next_profile_number}
jeszcze
    next_profile_number = $ (($ {last_profile} + 1));
echo „2 nowy numer profilu:” $ {następny_numer_profilu}
fi
echo „Nowy numer profilu:” $ {next_profile_number}

# lista profili konstrukcji z dodatkowym „numerem” profilu
profile_list = $ (echo "[$ {profile_list}, profil $ {next_profile_number}]")
echo „Lista 1 profili:” $ {profile_list}

# Zrzut zrzutu profilu domyślnego, zmień nazwę globalną na nową nazwę profilu
profileName = MyNewProfile
gconftool-2 --dump "/ apps / gnome-terminal / profile / Default"> /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml
sed -i "s | Domyślnie | Profil $ {następny_numer_profilu} | g" /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# wczytaj nowy profil
gconftool-2 --load /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# tell gnome-terminal, który ma inny profil
gconftool-2 --set - lista typów - ciąg typu list "/ apps / gnome-terminal / global / profile_list" "$ {profile_list}"

# ustaw właściwości
gconftool-2 --set - typ string / aplikacje / gnome-terminal / profile / Profile $ {następny_numer_profilu} / visible_name "$ {profileName}"
gconftool-2 --set - typ string / aplikacje / gnome-terminal / profile / Profile $ {numer_profilu_ następny} / exit
gconftool-2 --set - typ string / aplikacje / gnome-terminal / profile / Profile $ {numer_profilu_ następny} / font "Monospace 14"
gconftool-2 --set - typ string / aplikacje / gnome-terminal / profile / Profile $ {następny_numer_profilu} / background_color "# 000000000000"
gconftool-2 --set - typ string / aplikacje / gnome-terminal / profile / Profile $ {numer_profilu_następnego} / kolor_planu "# 0000FFFF0000"
gconftool-2 --set - typ string / aplikacje / gnome-terminal / profile / Profile $ {numer_profilu_następnego} / pozycja_przewijania „ukryta”
gconftool-2 --set --typ boolean / apps / gnome-terminal / profile / Profile $ {następny_numer_profilu} / use_system_font "false"
gconftool-2 --set --typ boolean / apps / gnome-terminal / profile / Profile $ {następny_numer_profilu} / use_theme_colors "false"
gconftool-2 --set --typ boolean / apps / gnome-terminal / profile / Profile $ {numer_profilu_ następny} / login_shell "true"
gconftool-2 --set --typ boolean / apps / gnome-terminal / profile / Profile $ {następny_numer_profilu} / scrollback_unlimited "true"

# utwórz terminal
gnome-terminal --geometry = 80x24 + 0 + 0 --profile = $ {nazwa_profilu} tytuł "$ {nazwa_profilu}" --zoom 0.8 -e "/ bin / sh"

Michał Czapski
źródło
9

Nie możesz utworzyć nowego profilu, ale możesz zrzucić bieżącą konfigurację, używając gconftool-2, modyfikując ją i ładując.

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

Pamiętaj, że zwraca tylko wartości inne niż domyślne (lub to, co gconf wykrywa jako inne niż domyślne), więc wynikowy plik nie może być kompletny.

Braiam
źródło
5

Dla GNOME Terminal> = 3,8 , do tworzenia / edycji / odczytu profili poprzez CLI, można użyć jednej dconf-clilub gsettings. Mój wybór to dconf-cli.

Katalog dconf terminala GNOME to /org/gnome/terminal/legacy/profiles:. Wszystkie operacje odbywają się w tym reż. Przechowuję go w tym, $dconfdirco pokazano w poniższych skryptach.

Utwórz nowy profil

Minimalne kroki to

  1. Wygeneruj identyfikator UUID dla profilu, uruchamiając polecenie uuidgen
  2. Dołącz do list:dconf write "$dconfdir/list" "[..., 'UUID']"
  3. Ustaw jego visible-name:dconf write "$dconfdir/:UUID"/visible-name "'NAME'"

Następnie, nawet jeśli wiele ustawień nie jest skonfigurowanych, nowy profil pojawi się w ustawieniach GUI terminala, aby można było edytować ustawienia za pomocą GUI.

Działający skrypt:

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

Uważaj na cytaty wokół pisanej wartości. Jak powiedziano w instrukcji ,

Podczas ustawiania klucza musisz także określić VALUE. Format wartości jest to, że zserializowanego GVariant, więc np ciąg musi zawierać wyraźne cytaty: "'foo'". Ten format jest również używany podczas drukowania wartości.

Możesz ustawić więcej opcji profilu za pomocą cli, jeśli chcesz. Biegać

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

ustawić. Możesz użyć, dconf-editoraby sprawdzić dostępne opcje. Przejdź do ścieżki podobnej do /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/. Lepiej byłoby sprawdzić stary profil z ustawionymi wieloma opcjami.

Zduplikuj profil

Możesz dconf dumpstary profil i loadistniejący. Aby zduplikować profil, musisz utworzyć nowy, wykonując powyższe kroki, i skopiować profil starego, aby go zastąpić. Pamiętaj, aby zmienić nazwę po zastąpieniu.

Działający skrypt:

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

Aby uzyskać identyfikator UUID profilu według jego nazwy:

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)

Ustaw profil jako domyślny

Po prostu wpisz UUID profilu do klucza default:

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

Odniesienie

joegnis
źródło
Zdecydowanie musimy głosować za odpowiedzią, ponieważ jest ona najbardziej poprawna i aktualna! Szukałem tego sam przez jakiś czas, ustawiłem dconf watch /i wreszcie zrozumiałem, co się dzieje, a odpowiedź jest dokładna, jak napisał @joegnis. Wystarczy utworzyć identyfikator UUID, zapisać go w bazie danych i ustawić visible-namei /list.
Kamil,
2

Prosty. Posługiwać się:

Plik-> Nowy profil na twoim terminalu.

Zobacz tutaj po więcej szczegółów.

Bibliografia:

Raynal Gobel
źródło
1
Pytanie mówi, że nie używa się menu, ale zamiast tego używa wiersza polecenia.
Jonathan Hartley,
okej, chyba niewiele to pomogło
Raynal Gobel
1
Pomaga nam wszystkim, którzy przychodzą tutaj przez Google - możesz zredagować odpowiedź, aby powiedzieć, że to nie pomaga OP, ale może pomóc innym ... (pomógł mi!)
mędrzec
1
Stworzyłem nowe pytania i odpowiedzi dotyczące GUI: Jak mogę utworzyć nowy profil Gnome Terminal?
wjandrea,