Как я могу создать новый профиль для терминала Gnome через командную строку?

15

Как все знают, вы можете создать новый профиль в меню, где вас спросят, какой из существующих профилей должен быть родительским для вашего нового профиля и так далее. Но как мне создать новый профиль из командной строки?

Должен ли я прочитать все существующие значения из профиля по умолчанию через gconftool и установить их снова под новым именем, или есть какое-то лучшее решение? Если ответ «да»: нужно ли обращать внимание на новое имя профиля? Эти новые всегда называют Profile0, Profile1, и Profile2т.д.

Wurstsalat
источник
Сведения об использовании графического интерфейса см. В разделе Как создать новый профиль терминала Gnome?
wjandrea

Ответы:

3
# узнать, сколько файлов - в начале будет только 1 - по умолчанию
profile_list = $ (gconftool-2 --get "/ apps / gnome-terminal / global / profile_list" | sed "s | \ [||; s | \] ||;")
echo "1 Список профилей:" $ {profile_list}
last_profile = $ (echo "$ {profile_list}" | sed "s /^.*,//" | sed 's / Profile //')
echo "Последнее имя / номер профиля:" $ {last_profile}

# установить число «ProfileX» X равным 0, если только по умолчанию есть или что-то еще, плюс 1
if [$ {last_profile} == "По умолчанию"]; тогда
    next_profile_number = 0;
echo "1 новый номер профиля:" $ {next_profile_number}
еще
    next_profile_number = $ (($ {last_profile} + 1));
echo "2 Новый номер профиля:" $ {next_profile_number}
фи
echo "Новый номер профиля:" $ {next_profile_number}

# построить список профилей с дополнительным профилем "номер"
profile_list = $ (echo "[$ {profile_list}, Profile $ {next_profile_number}]")
echo "1 Список профилей:" $ {profile_list}

# получить дамп профиля по умолчанию, изменить глобальное имя на новое имя профиля
ProfileName = MyNewProfile
gconftool-2 --dump "/ apps / gnome-терминал / profile / Default"> /tmp/$ndomUSER‹_gnome-terminal_profiles_$ndomprofileName Event.xml
sed -i "s | По умолчанию | Профиль $ {next_profile_number} | g" /tmp/$ndomUSER‹_gnome-terminal_profiles_$ndomprofileName Event.xml

# загрузить новый профиль
gconftool-2 - загрузить /tmp/$ndomUSER‹_gnome-terminal_profiles_$ndomprofileName Event.xml

# сообщить gnome-терминал, у которого есть другой профиль
gconftool-2 --set - список типов - строка типа списка "/ apps / gnome-терминал / global / profile_list" "$ {profile_list}"

# установить свойства
gconftool-2 --set - type string / apps / gnome-терминал / profile / Profile $ {next_profile_number} / visible_name "$ {profileName}"
gconftool-2 --set - type string / apps / gnome-терминал / profile / Profile $ {next_profile_number} / exit_action "hold"
gconftool-2 --set - type string / apps / gnome-терминал / profile / Profile $ {next_profile_number} / font "Monospace 14"
gconftool-2 --set - type string / apps / gnome-терминал / profile / Profile $ {next_profile_number} / background_color "# 000000000000"
gconftool-2 --set - type string / apps / gnome-терминал / profile / Profile $ {next_profile_number} / foreground_color "# 0000FFFF0000"
gconftool-2 --set - type string / apps / gnome-терминал / profile / Profile $ {next_profile_number} / scrollbar_position "скрытый"
gconftool-2 --set --type логический / приложения / gnome-терминал / профили / профиль $ {next_profile_number} / use_system_font "false"
gconftool-2 --set --type логический / приложения / gnome-терминал / профили / профиль $ {next_profile_number} / use_theme_colors "false"
gconftool-2 --set --type логический / приложения / gnome-терминал / профили / профиль $ {next_profile_number} / login_shell "true"
gconftool-2 --set --type логический / приложения / gnome-терминал / профили / профиль $ {next_profile_number} / scrollback_unlimited "true"

# создать терминал
gnome-terminal --geometry = 80x24 + 0 + 0 --profile = $ {profileName} title "$ {profileName}" --zoom 0.8 -e "/ bin / sh"

Майкл Чапски
источник
9

Вы не можете создать новый профиль, но вы можете сбросить текущую конфигурацию, используя gconftool-2, изменить ее и загрузить.

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

Помните, что он возвращает только значения не по умолчанию (или то, что gconf определяет как не значение по умолчанию), поэтому результирующий файл не может быть завершен.

Braiam
источник
5

Для GNOME Terminal> = 3.8 , чтобы создавать / редактировать / читать профили через cli, вы можете использовать либо dconf-cliили gsettings. Мой выборdconf-cli .

Каталог dconf терминала GNOME - это /org/gnome/terminal/legacy/profiles:. Все операции происходят в этом реж. Я храню это в$dconfdir котором показано в сценариях ниже.

Создать новый профиль

Минимальные шаги

  1. Сгенерируйте UUID для профиля, выполнив команду uuidgen
  2. Добавить его к list:dconf write "$dconfdir/list" "[..., 'UUID']"
  3. Установите его visible-name:dconf write "$dconfdir/:UUID"/visible-name "'NAME'"

После этого, даже если многие параметры не заданы, в настройках GUI терминала появится новый профиль, так что вы сможете редактировать настройки через GUI.

Рабочий скрипт:

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

Будьте осторожны с кавычками вокруг значения, которое вы пишете. Как сказано в руководстве ,

При настройке ключа также необходимо указать VALUE. Формат значения является то , что сериализованным GVariant, так , например , строка должна содержать явные кавычки: "'foo'". Этот формат также используется при распечатке значений.

Вы можете установить дополнительные параметры профиля через cli, если хотите. Бегать

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

установить. Вы можете использовать dconf-editorдля проверки доступных опций. Перейдите к пути, как /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/ . Было бы лучше проверить старый профиль, который имеет множество параметров.

Дублировать профиль

Вы можете dconf dumpстарый профиль иload его существующий. Таким образом, чтобы дублировать профиль, вам нужно создать новый, используя шаги, описанные выше, и скопировать старый профиль, чтобы переопределить его. Не забудьте переименовать его после переопределения.

Рабочий скрипт:

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

Чтобы получить UUID профиля по имени:

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)

Установить профиль по умолчанию

Просто напишите UUID профиля для ключа default:

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

Ссылка

  • Anthony25 / gnome-Terminal-Colors-Solarized . Я выяснил свой путь, прочитав много кодов отсюда. Действительно полезно.
  • Справочное руководство по dconf
joegnis
источник
Мы обязательно должны поддержать этот ответ, так как он самый правильный и актуальный! Я сам некоторое время искал это, установил dconf watch /и, наконец, понял, что происходит, и ответ точный, как писал @joegnis. Просто создайте UUID, запишите его в базу данных и установите visible-nameи /list.
Камил
2

Просто. Использование:

Файл-> Новый профиль на вашем терминале.

Смотрите здесь для более подробной информации.

Ссылки:

Райнал Гобель
источник
1
Вопрос говорит не об использовании меню, а об использовании командной строки.
Джонатан Хартли
ладно, думаю, это не сильно помогло
Рэйнал Гобель
1
Это помогает всем остальным, кто приезжает сюда через Google - вы можете отредактировать ответ, чтобы сказать, что это не помогает OP, но может помочь другим ... (помог мне!)
мудрец