แก้ไข grub.cfg อย่างสวยงาม


10

แก้ไข: (เพื่อความชัดเจน) ฉันกำลังมองหาที่จะเปลี่ยนลักษณะที่ปรากฏของเมนูบูตด้วงโดยการแก้ไขไฟล์การกำหนดค่า (อาจจะ แต่ไม่จำเป็นต้อง grub.cfg)

ดังนั้นผู้ใช้ Ubuntu ทุกคนจึงรู้วิธีเติมเมนูการบูตให้เต็มหลังจากการอัพเกรดเคอร์เนล ย้อนกลับไปในสมัยของเมนูคุณสามารถปรับแต่งเมนูเพื่อซ่อนตัวเลือกที่ไม่ต้องการ แต่ยังคงไว้ให้พร้อมใช้งาน

ตัวอย่างเช่นหากเมนูด้วงของคุณมีลักษณะดังนี้:

A
B
C
D

คุณสามารถทำให้ตัวเลือก C และ D มองไม่เห็นโดยการใส่ตัวเลือกที่ว่างระหว่าง B และ C ด้วยวิธีนี้ตัวเลือก C และ D จะไม่ปรากฏให้เห็นในระหว่างการบูทขึ้น แต่จะปรากฏให้เห็นหากคุณเลื่อนลงไปที่เมนูการบู๊ต

การลองใช้เคล็ดลับเดียวกันนี้ใน grub.cfg นำไปสู่ผลลัพธ์ใด ๆ ฉันกำลังมองหาวิธีที่จะทำให้ได้ผลลัพธ์เดียวกันนี้ด้วยเมนู grub ใหม่โดยแก้ไขไฟล์ grub.cfg ปรับแต่งความงามอื่น ๆ ก็ยินดีต้อนรับ

ขอบคุณ

แก้ไข 2: หากไม่สามารถซ่อนรายการเมนูได้ฉันต้องการวิธีแทรกตัวคั่นระหว่างรายการดังนั้นเมนูจะมีลักษณะดังนี้:


B

- อื่น ๆ -
C
D


คุณต้องการเปลี่ยนแปลงgrub.cfg ทั้งหมดหรือไม่ หากคุณใช้update-grubเพื่อสร้างอัตโนมัติคุณอาจต้องการแก้ไขสคริปต์ภายใต้/etc/grub.d ; ดูsuperuser.com/questions/102692/…สำหรับภาพรวมโดยย่อ
ต้มตุ๋น quixote

@ ~ นักต้มตุ๋น: ที่ช่วยเล็กน้อยและเป็นข้อมูลที่สวย ฉันยังหวังว่าจะมีวิธีซ่อนรายการเมนูหรืออย่างน้อยก็ให้คั่นระหว่างรายการ
Malabarba

ดังนั้นฉันเดาว่าการถอนการติดตั้งเมล็ดเก่าไม่ใช่ตัวเลือก?
Bobby

คำตอบ:


8

ก่อนอื่นให้ทำความเข้าใจว่า Ubuntu ตั้งค่า Grub2 อย่างไร

  • /boot/grub/grub.cfgเป็นเมนู Grub2
  • ปรับปรุงด้วงคำสั่งอัตโนมัติสร้างแฟ้มที่
  • ... โดยการอ่านการตั้งค่าเริ่มต้นจาก/ etc / defaults / grub
  • ... และทำงาน shellscripts ใน/etc/grub.d

ดังนั้นถ้าคุณไม่ต้องการที่จะแก้ไขgrub.cfgหลังจากการปรับปรุงเคอร์เนลแต่ละท่านต้องการปรับแต่งสคริปต์ใน/etc/grub.dดังนั้นการเปลี่ยนแปลงของคุณได้รับใช้ตลอดเวลาปรับปรุงด้วงเป็นระยะ


ประการที่สองเพื่อตอบคำถามแรกของคุณโดยตรงฉันไม่คุ้นเคยกับวิธีการใด ๆ ในการทำให้ตัวเลือกการบูตที่มองไม่เห็น แต่ยังสามารถเข้าถึงได้ผ่านเมนู Grub มีหลายสิ่งเล็ก ๆ น้อย ๆ เกี่ยวกับ Grub1 ที่ไม่ได้นำมาใช้ซ้ำใน Grub2 และมันจะไม่แปลกใจเลยถ้านี่เป็นหนึ่งในนั้น

แต่คุณสามารถทำให้ทุกรายการเมนูที่มองไม่เห็น (จนถึงไฮไลต์) โดยการตั้งค่าสีตัวอักษรเมนูเดียวกับสีพื้นหลัง ใน/etc/grub.d/05_debian_themeเปลี่ยนแปลงmenu_color_normalเพื่อให้สีแรก (ตัวอักษร) ตรงกับสีที่สอง (พื้นหลัง) ปล่อยให้menu_color_highlightแตกต่างกันดังนั้นรายการภายใต้เคอร์เซอร์จะปรากฏขึ้น

# 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

รับตัวคั่นลงในเมนูด้วง

ใน Grub1 คุณจะต้องใส่ข้อความใหม่แบบนี้ ในขณะที่ฉันจำได้ว่าคุณต้องการการประกาศรูทเพื่อให้มันเป็นรายการเมนูที่ถูกต้องมิฉะนั้น Grub1 จะไม่สนใจมัน

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

ฉันสงสัยว่า Grub2 อาจจะคล้ายกัน รายการเมนูพื้นฐานมากมีลักษณะเช่นนี้ในgrub.cfg :

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

เนื่องจาก "อะไร" ในเครื่องหมายคำพูดคู่จะปรากฏเป็นชื่อคุณสามารถปลอมตัวคั่นได้ เช่นเดียวกับ Grub1 Grub2 ต้องการให้คำหลักlinuxถือเป็นรายการเมนูที่แท้จริงดังนั้นระวังอย่าเลือกโดยไม่ตั้งใจ

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

แต่น่าเสียดายที่ "อะไร" ไม่ได้หมายความว่าอะไร ; ในขณะที่ฉันกำลังทดสอบสิ่งนี้ฉันลองใช้ขีดกลางยาว ("----------------") และมันก็ไม่เคยทำงาน แต่ชอบสตริงสั้น ๆ ของจุดที่แสดงด้านบนเพื่อให้คุณสามารถใช้

.....

ตอนนี้เป็นวิธีการทำคั่นหนึ่ง ที่จะทำให้พวงและจะวางพวกเขาที่คุณต้องการให้พวกเขาโดยอัตโนมัติคุณต้องเพิ่มพวกเขาเข้าไปในสคริปต์ใน/etc/grub.d

ตัวอย่างนี้ขอใส่คั่นง่ายๆระหว่างส่วนต่างๆของgrub.cfg หากคุณดูที่/etc/grub.dคุณจะเห็นสคริปต์ต่อไปนี้:

  • 00_header
  • 05_debian_theme
  • 10_linux - รายการสำหรับเคอร์เนล Ubuntu และการกู้คืน
  • 20_memtest86 + - รายการสำหรับ Memtest86 +
  • 30_os-prober - รายการสำหรับ Windows & distros Linux อื่น ๆ
  • 40_custom - ไม่มีค่าเริ่มต้น รายการผู้ใช้พิเศษสามารถไปที่นี่

เราจะสร้างสคริปต์ตัวแยกและวางต่อไปนี้:

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

ตอนนี้ย้ายสคริปต์นั้นไปไว้ที่ตัวคั่นแรกและเชื่อมโยงสคริปต์นั้นเข้ากับคนอื่น ๆ สคริปต์ถูกเรียกใช้งานตามลำดับดังนั้นหากคุณต้องการให้สคริปต์แรกมาก่อน10_linuxให้ตั้งชื่อมันเป็น09_separatorหรืออะไรบางอย่าง

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

หากคุณมีชุดรายการเฉพาะเป็นค่าเริ่มต้นใน/ etc / default / grubคุณอาจต้องอัปเดต - Grub2 เริ่มนับรายการเมนูที่ 0 และ "ตัวคั่น" แต่ละรายการเป็นรายการที่ถูกต้องดังนั้นพวกเขาจึงนับเช่นกัน หากรายการเริ่มต้นก่อนหน้าของคุณคือ 0 และคุณได้เพิ่มตัวคั่นก่อนหน้าหนึ่งรายการอย่าลืมเปลี่ยนGRUB_DEFAULTเป็น 1

ตอนนี้รันupdate-grubและตรวจสอบ/boot/grub/grub.cfg - คุณควรเห็นตัวคั่นอยู่ตรงนั้น หากเป็นเช่นนั้นให้รีบูตและตรวจสอบ 'em out

....

หากคุณต้องการวางตัวคั่นไว้ที่อื่นระหว่างรุ่นเคอร์เนลต่าง ๆ คุณจะต้องแก้ไข10_linux (หรือสคริปต์อื่น) โดยตรงและหาที่ที่เหมาะสมในการเพิ่มตัวคั่น คุณสามารถใช้บรรทัดจากสคริปต์ด้านบน รวมทุกอย่างยกเว้นบรรทัด#! / bin / shแรก


หากคุณต้องการบางสิ่งที่สวยกว่าให้ใช้รูปภาพหรือธีมของ Grub ฉันต้องการให้ Raincheck ให้คุณในหัวข้อเหล่านั้น แต่ตรวจสอบข้อมูลด้านล่าง


แหล่งข้อมูล:

มีคู่มือแนะนำ Grub2 สองตัวใน UbuntuForums ที่ฉันรู้จักและชื่นชอบ:

GNU Grub 2เป็นอีกหนึ่งแหล่งข้อมูลที่ยอดเยี่ยม เขามีชุดสคริปต์สำหรับปรับแต่ง Grub2 ของ Karmic ( เปิดเผยอย่างเต็มรูปแบบ: ฉันไม่ได้ลองเลย)

หน้ารูปแบบชุดรูปแบบของ Grub Wikiเป็นสิ่งจำเป็นสำหรับการแฮ็คในรูปแบบ Grub2


ว้าวขอบคุณสำหรับคำตอบ ความอับอายที่เห็นคุณสมบัติบางอย่างไม่ได้ทำให้เป็นเวอร์ชั่นนี้ ฉันลองใส่ตัวคั่นแล้วมันไม่ได้ผลเพราะฉันเว้นว่างไว้ระหว่างวงเล็บ ทุกอย่างด้านบนดูเหมือนว่าจะทำงาน ขอบคุณอีกครั้ง.
Malabarba

@D Connors - ใช่มีสองสิ่งที่ฉันคิดถึงเกี่ยวกับ Grub1 แต่โดยรวมแล้วฉันคิดว่าการปรับปรุงของ Grub2 มันมีช่วงการเรียนรู้ของตัวเอง ฉันคาดหวังว่าผู้พัฒนาจะพยายามใช้ความสามารถด้านกราฟิกของ Grub2 ด้วยค่าใช้จ่ายของเมนูข้อความ แต่อาจจะเปลี่ยนไปเมื่อโครงการพัฒนาขึ้น
ต้มตุ๋น quixote

5

ตัวคั่นอาจทำด้วยเครื่องหมายขีดกลางถ้าอักขระตัวแรกคือช่องว่าง นอกจากนี้ไม่จำเป็นต้องใช้คำสั่ง linux สำหรับตัวคั่นคุณสามารถใช้คำสั่งใด ๆ เช่นนี้:

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

หรือแม้แต่ "จริง" เพื่อกลับมาเงียบ ๆ :

menuentry " -----------------------------------------------------------" {
  true
}

0

หากคุณไม่ได้ใช้เมล็ดอื่นคุณสามารถลบออกได้โดยใช้อินเตอร์เฟสตัวจัดการแพคเกจที่เหมาะกับคุณ สิ่งนี้จะลบออกจาก grub.cfg โดยอัตโนมัติ


ฉันไม่ค่อยใช้พวกเขาสำหรับการแก้ไขปัญหาเมื่อฉันเกิดการติดตั้งปัจจุบัน นอกจากนี้เมล็ดยังเป็นเพียงตัวอย่างฉันยังมีพาร์ทิชันที่สามารถบู๊ตได้อีก 3 ตัวที่ฉันต้องการซ่อน แต่ยังมีให้ใช้งาน
Malabarba

(เพื่อหลีกเลี่ยงความสับสนเมื่อฉันพูดว่า "ซ่อน" ฉันไม่ได้หมายถึง "ซ่อนพาร์ทิชัน" ฉันแค่หมายถึง "ซ่อนรายการ OS ที่ตอบสนองจากเมนูบูต")
Malabarba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.