Đối với Thiết bị đầu cuối Gnome> = 3,8 , để tạo / chỉnh sửa / đọc hồ sơ thông qua cli, bạn có thể sử dụng dconf-cli
hoặc gsettings
. Sự lựa chọn của tôi là dconf-cli
.
Thư mục dconf của Gnome Terminal là
/org/gnome/terminal/legacy/profiles:
. Tất cả các hoạt động xảy ra trong thư mục này. Tôi lưu trữ nó trong $dconfdir
đó được hiển thị trong các kịch bản dưới đây.
Tạo một hồ sơ mới
Các bước tối thiểu là
- Tạo UUID cho hồ sơ bằng cách chạy lệnh
uuidgen
- Nối nó vào
list
:dconf write "$dconfdir/list" "[..., 'UUID']"
- Đặt nó
visible-name
:dconf write "$dconfdir/:UUID"/visible-name "'NAME'"
Sau đó, ngay cả khi nhiều cài đặt không được đặt, một cấu hình mới sẽ hiển thị trong cài đặt GUI của Terminal để bạn có thể chỉnh sửa cài đặt qua GUI.
Một kịch bản làm việc:
#!/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)
Hãy cẩn thận về các trích dẫn xung quanh giá trị bạn viết. Như đã nói trong hướng dẫn ,
Khi đặt khóa, bạn cũng cần chỉ định a VALUE
. Định dạng cho giá trị là của GVariant được tuần tự hóa, do đó, một chuỗi phải bao gồm các trích dẫn rõ ràng : "'foo'"
. Định dạng này cũng được sử dụng khi in ra các giá trị.
Bạn có thể đặt thêm tùy chọn của hồ sơ thông qua cli nếu bạn muốn. Chạy
dconf write /org/gnome/terminal/legacy/profiles:/:UUID/KEY "'NAME'"
để thiết lập. Bạn có thể sử dụng dconf-editor
để kiểm tra các tùy chọn có sẵn. Điều hướng đến một con đường như thế nào
/org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/
. Sẽ tốt hơn nếu kiểm tra một hồ sơ cũ có nhiều tùy chọn được đặt.
Sao chép một hồ sơ
Bạn có thể dconf dump
một hồ sơ cũ và load
nó đến một hồ sơ hiện có. Vì vậy, để sao chép một hồ sơ, bạn cần tạo một hồ sơ mới bằng các bước ở trên và sao chép hồ sơ của một người cũ để ghi đè lên hồ sơ đó. Hãy nhớ đổi tên nó sau khi ghi đè.
Một kịch bản làm việc:
# ... 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
Để lấy UUID của hồ sơ theo tên của nó:
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)
Đặt cấu hình làm mặc định
Chỉ cần viết UUID của hồ sơ vào khóa default
:
dconf write $dconfdir/default "'$UUID'"
Tài liệu tham khảo