Mengedit grub.cfg secara estetis

10

EDIT: (untuk lebih jelasnya) Saya ingin mengubah tampilan menu boot grub, dengan mengedit file konfigurasi (mungkin tetapi belum tentu grub.cfg).

Jadi, setiap pengguna ubuntu tahu bagaimana mengisi menu boot setelah beberapa upgrade kernel. Kembali pada hari-hari menu.lst, Anda dapat mengubah menu untuk menyembunyikan opsi yang tidak diinginkan tetapi tetap membuatnya tersedia.

Misalnya, jika menu grub Anda terlihat seperti ini:

A
B
C
D

Anda bisa membuat opsi C dan D tidak terlihat dengan memasukkan opsi kosong antara B dan C. Dengan cara ini, opsi C dan D tidak akan terlihat selama boot up, tetapi akan menjadi terlihat jika Anda menggulir ke bawah ke mereka di menu boot.

Mencoba trik yang sama di grub.cfg tidak membuahkan hasil apa pun. Jadi, saya mencari cara untuk mencapai hasil yang sama dengan menu grub baru, dengan mengedit file grub.cfg. Tweak estetika lainnya juga diterima.

Terima kasih

EDIT2: Jika menyembunyikan entri menu tidak mungkin, saya ingin cara untuk memasukkan pemisah di antara mereka, sehingga menu akan terlihat seperti ini:

A
B

--Lainnya -
C
D

Malabarba
sumber
Anda ingin membuat semua perubahan pada grub.cfg ? jika Anda menjalankan pembaruan-grub untuk membuat-otomatisnya, Anda mungkin ingin mengedit skrip di bawah /etc/grub.d ; lihat superuser.com/questions/102692/… untuk ikhtisar singkat.
quack quixote
@ ~ dukun: itu sedikit membantu, dan cukup informatif. Saya masih berharap cara untuk menyembunyikan entri menu, atau setidaknya menempatkan pemisah di antara mereka.
Malabarba
Jadi, saya kira hanya menguninstall kernel lama bukan pilihan?
Bobby

Jawaban:

8

Pertama, pahami bagaimana Ubuntu mengkonfigurasi Grub2.

  • /boot/grub/grub.cfg adalah menu Grub2
  • perintah update-grub secara otomatis menghasilkan file itu
  • ... dengan membaca pengaturan default dari / etc / defaults / grub
  • ... dan menjalankan shellscripts di /etc/grub.d

Jadi, jika Anda tidak ingin mengedit grub.cfg setelah setiap pembaruan kernel, Anda ingin mengubah skrip di /etc/grub.d sehingga perubahan Anda diterapkan kapan saja pembaruan-grub dijalankan.


Kedua, untuk menjawab pertanyaan pertama Anda secara langsung, saya tidak terbiasa dengan cara apa pun yang membuat opsi boot spesifik tidak terlihat tetapi masih dapat diakses melalui menu Grub. Ada banyak hal kecil tentang Grub1 yang tidak dapat diimplementasikan kembali di Grub2, dan itu tidak akan mengejutkan saya jika ini salah satunya.

Sebagai gantinya, Anda bisa membuat semua entri menu tidak terlihat (sampai disorot) dengan mengatur warna font menu sama dengan warna latar belakang. Di /etc/grub.d/05_debian_theme , ubah menu_color_normal sehingga warna pertama (font) cocok dengan warna kedua (latar belakang). Biarkan menu_color_highlight berbeda, sehingga entri di bawah kursor muncul.

# example from a likely-tweaked Karmic /etc/grub.d/05_debian_theme
set menu_color_normal=white/black
set menu_color_highlight=black/white

# ...to this
set menu_color_normal=black/black
set menu_color_highlight=black/white

Mendapatkan pemisah ke menu Grub.

Di Grub1 Anda akan memasukkan entri baru seperti ini. Seingat saya, Anda membutuhkan deklarasi root untuk membuatnya entri menu yang valid, jika tidak Grub1 mengabaikannya.

# separator
title  --------------------
root

Saya menduga Grub2 mungkin serupa. Entri menu yang sangat mendasar terlihat seperti ini di grub.cfg :

# basic example
menuentry "Memory test (memtest86)" {
        linux   /boot/memtest86+.bin
}

Karena "apa pun" dalam tanda kutip ganda ditampilkan sebagai judul, Anda dapat memalsukan pemisah dengan itu. Seperti Grub1, Grub2 ingin kata kunci linux memperlakukannya sebagai entri menu nyata, jadi berhati-hatilah agar Anda tidak sengaja memilihnya.

# a separator!  no, really!
menuentry "....." {
        linux   /boot/memtest86+.bin
}

Sayangnya, "apa pun" tidak berarti apa - apa ; sementara saya menguji ini, saya mencoba untaian panjang ("----------------") dan tidak pernah berhasil. Tetapi suka string pendek dari titik-titik yang ditunjukkan di atas, sehingga Anda dapat menggunakannya

.....

Nah, begitulah cara membuat satu pemisah. Untuk membuat banyak, dan menempatkannya di tempat yang Anda inginkan secara otomatis, Anda perlu menambahkannya ke dalam skrip di /etc/grub.d .

Untuk contoh ini, mari kita tempatkan pemisah sederhana antara berbagai bagian grub.cfg . Jika Anda melihat /etc/grub.d , Anda melihat skrip berikut:

  • 00_header
  • 05_debian_theme
  • 10_linux - entri untuk kernel Ubuntu & pemulihan
  • 20_memtest86 + - entri untuk Memtest86 +
  • 30_os-prober - entri untuk Windows & distro Linux lainnya
  • 40_custom - tidak ada yang secara default; entri pengguna khusus dapat pergi di sini

Kami akan membuat skrip, pemisah baru , dan menempatkan yang berikut ke dalamnya:

#!/bin/sh
# create a separator menu entry
cat << EOF
menuentry "....." {
  linux /boot/memtest86+.bin
}
EOF

Sekarang, pindahkan skrip itu ke tempatnya untuk pemisah pertama, dan hubungkan skrip itu ke tempat lain. Skrip dieksekusi secara berurutan, jadi jika Anda ingin yang pertama datang sebelum 10_linux , beri nama 09_separator atau sesuatu.

cd /etc/grub.d

# start the editor, paste in the script above, save, and exit
sudo nano separator

# set executable
sudo chmod +x separator

# rename into the first position
mv separator 09_separator

# link into remaining positions (can also use cp)
ln -s 09_separator 19_separator
ln -s 09_separator 29_separator
# not really necessary since 40_custom is empty by default
ln -s 09_separator 39_separator

Jika Anda memiliki entri tertentu yang ditetapkan sebagai default di / etc / default / grub , Anda mungkin perlu memperbaruinya - Grub2 mulai menghitung entri menu pada 0, dan masing-masing "pemisah" ini adalah entri yang valid, sehingga mereka juga menghitung. Jika entri default Anda sebelumnya adalah 0, dan Anda telah menambahkan satu pemisah sebelumnya, ingatlah untuk mengubah GRUB_DEFAULT menjadi 1

Sekarang jalankan pembaruan-grub , dan periksa / boot / grub / grub.cfg - Anda akan melihat pemisah di sana. Jika Anda melakukannya, reboot dan periksa.

....

Jika Anda ingin menempatkan pemisah di tempat lain, katakanlah, di antara versi kernel yang berbeda, Anda harus mengedit 10_linux (atau skrip lain) secara langsung, dan menemukan tempat yang tepat untuk menambahkan pemisah. Anda dapat menggunakan baris dari skrip di atas; sertakan semuanya kecuali baris #! / bin / sh pertama.


Jika Anda menginginkan sesuatu yang lebih cantik, gunakan Grub splash gambar atau tema. Saya perlu memberi Anda tanda centang pada topik-topik itu, tetapi periksa sumber daya di bawah ini.


Sumber:

Ada dua panduan Grub2 besar di UbuntuForums yang saya kenal dan sukai:

GNU Grub 2 adalah sumber hebat lainnya. Dia punya satu set skrip untuk mengubah Grub2 Karmic ( pengungkapan penuh: Saya belum mencobanya ).

Halaman Format Tema Grub Wiki adalah suatu keharusan untuk meretas tema Grub2.

quack quixote
sumber
Wow, terima kasih atas jawabannya. Malu melihat beberapa fitur belum sampai ke versi ini. Saya sudah mencoba memasukkan pemisah, itu tidak berhasil karena saya membiarkannya kosong di antara tanda kurung. Segala sesuatu di atas tampaknya berfungsi. Terima kasih lagi.
Malabarba
@D Connors - ya, ada beberapa hal yang saya lewatkan tentang Grub1, tapi secara keseluruhan saya pikir Grub2 adalah peningkatan. itu memang memiliki kurva belajarnya sendiri. Saya berharap para devs telah berusaha lebih keras dalam kemampuan grafis Grub2 dengan mengorbankan menu teks, tapi mungkin itu akan berubah ketika proyek berkembang.
quack quixote
5

Pemisah dapat dibuat dari tanda hubung jika karakter pertamanya adalah spasi. Selain itu, tidak perlu menggunakan perintah linux untuk bagian pemisah, Anda dapat menggunakan perintah seperti ini:

menuentry " -----------------------------------------------------------" {
  echo "It is just a separator, select another item!"
}

Atau bahkan "benar" untuk kembali diam-diam:

menuentry " -----------------------------------------------------------" {
  true
}
MarSoft
sumber
0

Jika Anda tidak menggunakan kernel lain, Anda bisa menghapusnya menggunakan antarmuka manajer paket mana saja yang cocok untuk Anda. Ini secara otomatis menghapusnya dari grub.cfg

ajackbot
sumber
Saya jarang menggunakannya untuk pemecahan masalah, ketika saya mengacaukan instalasi saat ini. Selain itu, kernelnya hanya sebuah contoh, saya juga memiliki 3 partisi bootable lainnya yang ingin saya sembunyikan tetapi masih ada.
Malabarba
(untuk menghindari kebingungan. Ketika saya mengatakan "sembunyikan" Saya tidak bermaksud "sembunyikan partisi", saya hanya bermaksud "sembunyikan entri OS yang resesif dari menu boot")
Malabarba