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


15

众所周知,您可以通过菜单创建新的配置文件,在该菜单中,系统会询问哪个现有配置文件应是新配置文件的父级,依此类推。但是,如何通过命令行创建新的配置文件?

我应该通过gconftool从默认配置文件中读取每个现有值,然后使用新名称再次设置它们,还是有更好的解决方案?如果答案是肯定的:我需要注意新的配置文件名称吗?新的总是叫Profile0Profile1Profile2等。


Answers:


3
#找出有多少pofile-刚开始时只有1-默认
profiles_list = $(gconftool-2 --get“ / apps / gnome-terminal / global / profile_list” | sed“ s | \ [||; s | \\] ||;”)
回声“ 1个配置文件列表:” $ {profiles_list}
last_profile = $(echo“ $ {profiles_list}” | sed“ s /^.*,//” | sed's / Profile //')
回显“最后的配置文件名称/编号:” $ {last_profile}

#如果只有默认值或最后一个加1,则将“ ProfileX” X编号设置为0
如果[$ {last_profile} ==“默认”]; 然后
    next_profile_number = 0;
回显“ 1个新的配置文件编号:” $ {next_profile_number}
其他
    next_profile_number = $((($ {last_profile} + 1));
回声“ 2新的配置文件编号:” $ {next_profile_number}
科幻
回显“新配置文件编号:” $ {next_profile_number}

#使用额外的配置文件“数字”构造配置文件列表
profiles_list = $(回显“ [$ {profiles_list},Profile $ {next_profile_number}]”))
回声“ 1个配置文件列表:” $ {profiles_list}

#获取默认配置文件的转储,将全局名称更改为新的配置文件名称
profileName = MyNewProfile
gconftool-2-转储“ / 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

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

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

#设置属性
gconftool-2 --set --type字符串/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / visible_name“ $ {profileName}”
gconftool-2 --set --type字符串/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / exit_action“ hold”
gconftool-2 --set --type字符串/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / font“ Monospace 14”
gconftool-2 --set --type字符串/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / background_color“#000000000000”
gconftool-2 --set --type字符串/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / foreground_color“#0000FFFF0000”
gconftool-2 --set --type字符串/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / scrollbar_position“隐藏”
gconftool-2 --set --type布尔值/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / use_system_font“ false”
gconftool-2 --set --type布尔值/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / use_theme_colors“ false”
gconftool-2 --set --type布尔值/ apps / gnome-terminal / profiles / Profile $ {next_profile_number} / login_shell“ true”
gconftool-2 --set --type布尔值/ 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”


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检测为非默认值),因此生成的文件可能不完整。


5

对于GNOME Terminal> = 3.8,要通过cli创建/编辑/读取配置文件,可以使用dconf-cligsettings。我的选择是dconf-cli

GNOME终端的dconf目录为 /org/gnome/terminal/legacy/profiles:。所有操作都在该目录中进行。我将其存储在$dconfdir下面的脚本中。

创建一个新的个人资料

最少的步骤是

  1. 通过运行命令为配置文件生成UUID uuidgen
  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 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'"

参考


我们绝对必须赞成这个答案,因为这是最正确和最新的答案!我自己搜索了一段时间,设定dconf watch /并最终得到了进展,答案如@joegnis所言。只需创建一个UUID,将其写入数据库并设置visible-name和即可/list
卡米尔

2

简单。采用:

终端上的File-> New Profile

有关更多详细信息,请参见此处

参考文献:


1
问题是不使用菜单,而是使用命令行。
乔纳森·哈特利

好吧,猜想并没有太大帮助
Raynal Gobel

1
它确实帮助了我们所有通过Google来到这里的其他人-您可以编辑答案以说它没有帮助OP,但可以帮助其他人...(帮助了我!)
Sage

1
我已经为GUI创建了新的问答:如何创建新的Gnome终端配置文件?
wjandrea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.