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

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

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

14
задан 11 December 2013 в 17:07

4 ответа

# find out how many pofiles there are - at the beginning there will be just 1 - Default
profiles_list=$(gconftool-2 --get "/apps/gnome-terminal/global/profile_list" | sed "s|\[||;s|\]||;")
echo "1 Profiles List: " ${profiles_list}
last_profile=$(echo "${profiles_list}" | sed "s/^.*,//" | sed 's/Profile//')
echo "Last Profile Name/Number: " ${last_profile}

# set the "ProfileX" X number to 0 if only default is there or whatever the last is plus 1
if [ ${last_profile} == "Default" ]; then
    next_profile_number=0;
echo "1 New Profile Number: " ${next_profile_number}
else
    next_profile_number=$(( ${last_profile} + 1 ));
echo "2 New Profile Number: " ${next_profile_number}
fi
echo "New Profile Number: " ${next_profile_number}

# construct profiles list with extra profile "number"
profiles_list=$(echo "[${profiles_list},Profile${next_profile_number}]")
echo "1 Profiles List: " ${profiles_list}

# get a dump of the default profile, change global name to the new profile name
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

# load new profile
gconftool-2 --load /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# tell gnome-terminal that is has another profile
gconftool-2 --set --type list --list-type string "/apps/gnome-terminal/global/profile_list" "${profiles_list}"

# set properties
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"

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

0
ответ дан 11 December 2013 в 17:07

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

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

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

0
ответ дан 11 December 2013 в 17:07

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

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

Посмотрите здесь для получения дальнейшей информации.

Ссылки:

2
ответ дан 11 December 2013 в 17:07

Для 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'"

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

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

#!/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
0
ответ дан 11 December 2013 в 17:07

Другие вопросы по тегам:

Похожие вопросы: