Bagaimana saya bisa membuat profil baru untuk terminal Gnome melalui baris perintah?

15

Seperti yang diketahui semua orang, Anda dapat membuat profil baru dengan menu tempat Anda ditanya profil mana yang seharusnya menjadi induk untuk profil baru Anda dan seterusnya. Tetapi bagaimana saya harus membuat profil baru dengan baris perintah?

Haruskah saya membaca setiap nilai yang ada dari profil default melalui gconftool dan mengaturnya lagi dengan nama baru atau apakah ada solusi yang lebih baik? Jika jawabannya ya: Apakah saya harus memperhatikan nama profil yang baru? Yang baru selalu disebut Profile0, Profile1, Profile2dll

Wurstsalat
sumber
Untuk menggunakan GUI, lihat Bagaimana cara membuat profil Terminal Gnome baru?
wjandrea

Jawaban:

3
# cari tahu berapa banyak profil yang ada - di awal hanya akan ada 1 - Default
profiles_list = $ (gconftool-2 --get "/ apps / gnome-terminal / global / profile_list" | sed "s | \ [| |; s | \] ||;")
echo "1 Daftar Profil:" $ {profiles_list}
last_profile = $ (echo "$ {profiles_list}" | sed "s /^.*,//" | sed 's / Profile //')
echo "Nama / Nomor Profil Terakhir:" $ {last_profile}

# atur angka X "ProfileX" ke 0 jika hanya default yang ada atau apa pun yang terakhir ditambah 1
if [$ {last_profile} == "Default"]; kemudian
    next_profile_number = 0;
echo "1 Nomor Profil Baru:" $ {next_profile_number}
lain
    next_profile_number = $ (($ {last_profile} + 1));
echo "2 Nomor Profil Baru:" $ {next_profile_number}
fi
echo "Nomor Profil Baru:" $ {next_profile_number}

# buat daftar profil dengan "nomor" profil tambahan
profiles_list = $ (echo "[$ {profiles_list}, Profile $ {next_profile_number}]")
echo "1 Daftar Profil:" $ {profiles_list}

# dapatkan dump dari profil default, ubah nama global menjadi nama profil baru
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

# memuat profil baru
gconftool-2 --load /tmp/${USER}_gnome-terminal_profiles_${profileName}.xml

# beri tahu gnome-terminal bahwa ada profil lain
gconftool-2 --set --type list --list-type string "/ apps / gnome-terminal / global / profile_list" "$ {profiles_list}"

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

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

Michael Czapski
sumber
9

Anda tidak dapat membuat profil baru, tetapi Anda dapat membuang konfigurasi Anda saat ini, menggunakan gconftool-2, memodifikasinya, dan memuatnya.

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

Ingat bahwa itu hanya mengembalikan nilai-nilai non-default (atau apa yang gconf mendeteksi sebagai non-default) sehingga, file yang dihasilkan tidak dapat lengkap.

Braiam
sumber
5

Untuk Terminal GNOME> = 3.8 , untuk membuat / mengedit / membaca profil melalui cli, Anda dapat menggunakan salah satu dconf-cliatau gsettings. Pilihan saya adalah dconf-cli.

Direktori dconf Terminal GNOME adalah /org/gnome/terminal/legacy/profiles:. Semua operasi terjadi dalam dir ini. Saya menyimpannya di $dconfdirmana ditunjukkan dalam skrip di bawah ini.

Buat profil baru

Langkah minimum adalah

  1. Buat UUID untuk profil dengan menjalankan perintah uuidgen
  2. Tambahkan ke list:dconf write "$dconfdir/list" "[..., 'UUID']"
  3. Tetapkan visible-name:dconf write "$dconfdir/:UUID"/visible-name "'NAME'"

Setelah itu, bahkan jika banyak pengaturan tidak diatur, profil baru akan muncul di pengaturan GUI Terminal sehingga Anda dapat mengedit pengaturan melalui GUI.

Skrip yang berfungsi:

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

Hati-hati dengan kutipan di sekitar nilai yang Anda tulis. Seperti yang dikatakan dalam manual ,

Saat mengatur kunci, Anda juga perlu menentukan a VALUE. Format untuk nilai adalah bahwa dari GVariant serial, sehingga misalnya string harus menyertakan tanda kutip eksplisit: "'foo'". Format ini juga digunakan saat mencetak nilai.

Anda dapat mengatur lebih banyak opsi profil melalui cli jika Anda mau. Lari

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

untuk mengatur. Anda dapat menggunakan dconf-editoruntuk memeriksa opsi yang tersedia. Arahkan ke jalan seperti /org/gnome/terminal/legacy/profiles:/:9ca4ab84-42f2-4acf-8aa9-50e6351b209a/. Akan lebih baik untuk memeriksa profil lama yang memiliki banyak opsi yang ditetapkan.

Gandakan profil

Anda dapat dconf dumpprofil lama dan loadke profil yang ada. Jadi untuk menggandakan profil, Anda perlu membuat yang baru menggunakan langkah-langkah di atas, dan menyalin profil yang lama untuk menimpanya. Ingatlah untuk mengganti nama setelah mengganti.

Skrip yang berfungsi:

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

Untuk mendapatkan UUID profil dengan namanya:

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)

Tetapkan profil sebagai default

Cukup tulis UUID profil ke kunci default:

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

Referensi

joegnis
sumber
Kami pasti harus memilih jawaban ini karena ini adalah jawaban yang paling benar dan terkini! Saya sedang mencari ini sendiri untuk beberapa waktu, mengatur dconf watch /dan akhirnya mendapatkan apa yang sedang terjadi dan jawabannya tepat seperti yang ditulis @joegnis. Cukup buat UUID, tulis ke database dan atur visible-namedan /list.
Kamil
2

Sederhana. Menggunakan:

File-> Profil Baru di terminal Anda.

Lihat di sini untuk perincian lebih lanjut.

Referensi:

Raynal Gobel
sumber
1
Pertanyaannya mengatakan tidak menggunakan menu, tetapi menggunakan baris perintah sebagai gantinya.
Jonathan Hartley
oke, tebak itu tidak banyak membantu
Raynal Gobel
1
Itu memang membantu kita semua yang datang ke sini melalui Google - Anda dapat mengedit jawaban untuk mengatakan bahwa itu tidak membantu OP, tetapi dapat membantu orang lain ... (membantu saya!)
bijak
1
Saya telah membuat T&J baru untuk GUI: Bagaimana cara membuat profil Terminal Gnome baru?
wjandrea