如何通过命令行为 Gnome 终端创建新的配置文件?

如何通过命令行为 Gnome 终端创建新的配置文件?

众所周知,您可以通过菜单创建新配置文件,菜单会询问您哪个现有配置文件应作为新配置文件的父配置文件等等。但是我应该如何通过命令行创建新配置文件呢?

我是否应该通过 gconftool 从默认配置文件中读取每个现有值,然后以新名称重新设置它们,或者有更好的解决方案吗?如果答案是肯定的:我是否必须注意新的配置文件名称?新的配置文件名称总是称为Profile0Profile1Profile2

答案1

为了GNOME 终端 >= 3.8,要通过 cli 创建/编辑/读取配置文件,您可以使用 或dconf-cligsettings我的选择是dconf-cli

GNOME 终端的 dconf 目录是 /org/gnome/terminal/legacy/profiles:。所有操作都在此目录中进行。我将其存储$dconfdir在以下脚本中所示的位置。

创建新的个人资料

最小步骤是

  1. 通过运行命令为配置文件生成 UUIDuuidgen
  2. 将其附加到listdconf write "$dconfdir/list" "[..., 'UUID']"
  3. 设置其visible-namedconf 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 profile_ids_old="["  # 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

in_array() {
  local e
  for e in "${@:2}"; do [[ $e == $1 ]] && return 0; done
  return 1
}

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'"

参考

答案2

对于 Gnome-Terminal < 3.8

您不能创建新的配置文件,但您可以转储当前配置,使用gconftool-2、修改并加载它。

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

请记住,它仅返回非默认值(或 gconf 检测到的非默认值),因此生成的文件可能不完整。

答案3

# 找出有多少个 pofiles - 一开始只有 1 个 - 默认
配置列表 = $(gconftool-2 --get“/apps/gnome-terminal/global/profile_list”| sed“s|\[||;s|\]||;”)
echo "1 配置文件列表:" ${profiles_list}
last_profile = $(echo“${profiles_list}”| sed“s/^.*,//”| sed's/Profile//')
echo "最后一个个人资料名称/号码:" ${last_profile}

# 如果只有默认值,则将“ProfileX”X 数字设置为 0,否则将最后一个数字加 1
如果 [ ${last_profile} == “默认” ]; 然后
    下一个配置文件编号=0;
echo "1 个新配置文件编号:" ${next_profile_number}
别的
    下一个个人资料编号=$(( ${last_profile} + 1 ));
echo "2 新配置文件编号:" ${next_profile_number}
echo "新配置文件编号:" ${next_profile_number}

# 使用额外的配置文件“编号”构建配置文件列表
配置文件列表 = $(echo“[${profiles_list},配置文件${next_profile_number}]”)
echo "1 配置文件列表:" ${profiles_list}

# 获取默认配置文件的转储,将全局名称更改为新配置文件名称
配置文件名称=MyNewProfile
gconftool-2 --dump "/apps/gnome-terminal/profiles/Default" > /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml
sed -i "s|默认|配置文件${下一个配置文件编号}|g" /tmp/${USER}_gnome-terminal_profiles_${配置文件名称}.xml

# 加载新配置文件
gconftool-2 --load /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# 告诉 gnome-terminal 它有另一个配置文件
gconftool-2 --set --type 列表 --list-type 字符串“/apps/gnome-terminal/global/profile_list” “${profiles_list}”

# 设置属性
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”

# 创建终端
gnome-terminal --geometry=80x24+0+0 --profile=${profileName} 标题“${profileName}” --zoom 0.8 -e“/bin/sh”

答案4

简单。使用:

文件->新配置文件在你的终端上。

这里了解更多详情。

参考:

相关内容