ฉันจะทำให้เมนูด้วงถูกซ่อนไว้ได้อย่างไรและให้ปุ่ม Shift หรือ esc แสดงเมนูด้วงที่ซ่อนอยู่ตอนบู๊ต


10

ฉันใช้ Ubuntu 16.10 และฉันพยายามซ่อนเมนู GRUB ของฉันเมื่อเวลาเปิด / ปิดเครื่องและต้องการให้เมนูปรากฏเฉพาะเมื่อฉันกดปุ่มShiftหรือEscปุ่ม

ฉันเปลี่ยนตัวเลือกที่เหมาะสม/etc/default/grubและมันจะไม่ซ่อนเมนู

ในการค้นคว้านี้ฉันพบโพสต์นี้จาก 2013 GRUB เมนูที่ซ่อนไม่ทำงานที่บ่งบอกว่าปัญหาได้รับการแก้ไขในขณะที่และแนะนำการเปลี่ยนแปลง/etc/grub.d/30_os-proberที่ฉันไม่อยากทำ รหัสนั้นแสดงให้เห็นว่านับตั้งแต่พบระบบปฏิบัติการหลายระบบมันจะทำการตั้งค่าGRUB_TIMEOUT=10ต่อไป

นี่คือตัวอย่างของสิ่งที่ฉันมีตอนนี้ใน/etc/default/grub... เมนูที่มีการนับถอยหลัง 10 วินาที ...

GRUB_DEFAULT = บันทึกไว้
GRUB_SAVEDEFAULT = true
GRUB_HIDDEN_TIMEOUT_QUIET = true
# GRUB_HIDDEN_TIMEOUT = 0
GRUB_TIMEOUT = 10
GRUB_DISTRIBUTOR = `lsb_release -i -s 2> / dev / null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT = "สแปลชเงียบ"

ถ้าฉัน uncomment #GRUB_HIDDEN_TIMEOUT=0แล้วsudo update-grubยืนยันว่าผมยังตั้งไปGRUB_TIMEOUT=10 GRUB_TIMEOUT=0ฉันทำอย่างนั้นและฉันยังเห็นเมนูด้วง

ในการterminalพิมพ์จะinfo -f grub -n 'Simple configuration'อธิบายถึงตัวเลือกต่าง ๆ และในตอนท้ายของข้อมูลแสดงว่าคำสั่งปัจจุบันบางส่วนได้รับการคิดค่าเสื่อมราคาและแสดงให้เห็นว่าการแทนที่ที่ใหม่กว่านั้นดีกว่า

มีใครรู้บ้างว่าฉันจะทำให้เมนูด้วงของฉันซ่อนใน 16.10 และมีการจดจำShiftหรือEscปุ่มในเวลาบูตหรือไม่


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

1
@OrganicMarble ปัญหาเกี่ยวข้องกับระบบปฏิบัติการหลายระบบ ในการทดสอบฉันปรับเปลี่ยนส่วนของรหัสนั้นใน /etc/grub.d/30_os-prober และถึงแม้ว่าฉันไม่มีเมนูฉันก็ไม่สามารถบังคับให้เมนูเปลี่ยนหรือ esc ในเวลาบูตได้ ยังคงทำงานกับมัน
heynnema

ฉันได้เพิ่มข้อมูลเพิ่มเติมเกี่ยวกับข้อบกพร่องที่เกี่ยวข้องกับคุณในคำตอบของฉันพวกเขาอาจช่วยให้คุณเข้าใจลักษณะของปัญหาได้อย่างละเอียดมากขึ้น ฉันกำลังดูโค้ด Grub2 - พยายามช่วย :)
xtrchessreal

ลองใช้เครื่องมือปรับแต่ง Grub ถ้าคุณไม่ได้แท็บการตั้งค่าทั่วไปในคำสั่งนี้ - 1 ยกเลิกการทำเครื่องหมายที่กล่อง "มองหาระบบปฏิบัติการอื่น" และ 2 ยกเลิกการเลือก "เมนูโชว์" จากนั้นบันทึก ทดสอบและดูว่า "Shift" จะเปิดเมนูขึ้นมาหรือไม่และจะเกิดอะไรขึ้นหากไม่มีการกดปุ่มใด ๆ
xtrchessreal

ฉันสามารถเข้าใจว่าคุณไม่ต้องการแก้ไข/etc/grub.d/30_os-proberแต่ฉันไม่เห็นอันตราย คุณสามารถสำรองข้อมูลสำเนาหรือ #Comment การเปลี่ยนแปลงของคุณเพื่อให้คุณสามารถย้อนกลับหากจำเป็น วิธีแก้ปัญหาที่คุณพบว่าวิธีการแก้ปัญหาที่เหมาะสมที่สุดในขณะนี้
Elder Geek

คำตอบ:


7

ตกลงผู้คนนี่คือคำตอบ ... เพื่อรับเมนูด้วงที่ซ่อนอยู่ในการกำหนดค่าดูอัลบูต ... การแก้ไขสองรายการ ... และsudo update-grub...

แก้ไข # 1

ในการรับเมนูด้วงที่ซ่อนอยู่ในการกำหนดค่ามัลติบูตเราต้องแก้ไข/etc/default/grubก่อน เปิดไฟล์นี้โดยใช้คำสั่งด้านล่าง:

sudo editor /etc/default/grub

เมื่อไฟล์เปิดขึ้นให้แทนที่บรรทัดเหล่านี้

GRUB_HIDDEN_TIMEOUT_QUIET=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=10

กับสิ่งเหล่านี้:

GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT_STYLE=countdown
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=3

สิ่งนี้จะทำให้ GRUB แสดงตัวจับเวลาถอยหลัง 3 วินาทีบนหน้าจอ ด้วยการทำเช่นนี้ผู้ใช้สามารถกดEscปุ่มเพื่อเปิดเมนูเริ่มต้น มิฉะนั้นระบบปฏิบัติการเริ่มต้นจะบูต

หากคุณต้องการให้ระบบปฏิบัติการเริ่มต้นถูกตั้งค่าเป็นระบบปฏิบัติการที่บูตล่าสุดให้เพิ่มสองบรรทัดด้านล่างภายใต้ "GRUB_TIMEOUT = 3" ที่แสดงด้านบน:

GRUB_DEFAULT=saved    # change an existing line to this
GRUB_SAVEDEFAULT=true # add this line

แก้ไข # 2

ถัดไปจำเป็นต้องอัพเดตระบบปฏิบัติการเพื่อปิดการใช้งานคุณสมบัติ quick_boot หากต้องการทำสิ่งนี้ให้เปิด/etc/grub.d/30_os-proberในเครื่องมือแก้ไขที่คุณชื่นชอบและเปลี่ยนบรรทัดด้านล่าง (บรรทัดที่ 23 ใน 17.04) โดยแทนที่1ด้วย0:

quick_boot="1"

เมื่อเสร็จแล้วบรรทัดควรอ่านดังนี้:

quick_boot="0"

บันทึกไฟล์จากนั้นเรียกใช้คำสั่งด้านล่างเพื่อกำหนดค่า bootloader ใหม่และใช้การเปลี่ยนแปลงของคุณ:

sudo update-grub

นั่นมัน! +1
หินอ่อนออร์แกนิ

ดูเหมือนว่าเป็นทางออกที่ดี :) ตอนนี้ฉันมีคำถามง่าย ๆ เกี่ยวกับเรื่องนี้ หากคุณเปลี่ยน GRUB_TIMEOUT จาก "3" เป็น "1" คุณจะบูตเร็วขึ้นหรือไม่ และคุณสามารถให้ลิงค์ถ้ามีที่หนึ่งสามารถอ่านวิธีการทำงานของรหัสนี้ ฉันต้องการที่จะเข้าใจสิ่งที่รหัสนี้ทำและลำดับของการเรียกใช้ฟังก์ชั่นอื่น ๆ ชื่นชมมาก เป็นเรื่องที่ดีเมื่อคุณสามารถแก้ปัญหาคำถามของคุณเอง - ทำได้ดีมาก
xtrchessreal

@xtrchessreal ใช่การเปลี่ยน 3 เป็น 1 ทำให้สั้นลง 2 วินาที ฉันคิดว่า 3 วินาทีนั้นมีเวลาพอสำหรับฉันที่จะส่งมือไปยังคีย์ Esc ถ้าฉันต้องการ คุณสามารถดูinfo -f grub -n 'Simple configuration'ข้อมูลเพิ่มเติมได้
heynnema

+1 สำหรับ Q และ +1 สำหรับ A. สองคืนที่ผ่านมาฉันได้ทำสิ่งนี้ด้วยการปรับแต่งผมทุกประเภทให้เหมาะสม 30_os สร้าง 31_blah_blah และสร้าง 40_custom ทั้งหมดไม่เป็นประโยชน์ นี่คือใน AU, ArchLinux, Fedora และสถานที่อื่น ๆ อีกมากมายหากคุณต้องการคะแนนมากขึ้นฉันแนะนำให้ติดตามคำตอบที่ผิดทั้งหมดที่นี่ใน AU (มีจำนวนมาก) และการลงคะแนนเพื่อปิดพวกเขาเป็นรายการที่ซ้ำกันจากนี้ @ me) ในห้องแชททั่วไปของ AU ที่มีลิงก์ไปยังซ้ำกันและฉันจะให้คะแนนด้วย ขอบคุณสำหรับการวิจัยและการแก้ปัญหาที่ยอดเยี่ยม! :)
WinEunuuchs2Unix

@ WinEunuuchs2Unix ขอบคุณสำหรับความคิดเห็นที่ดีและโหวต! ตัวฉันเองทำการค้นคว้ามากมายก่อนที่ฉันจะพบว่าไม่มีใครมีวิธีแก้ปัญหาที่สง่างามหรือวิธีแก้ปัญหาใด ๆ เลย ... แต่ฉันตัดสินใจแล้ว :-)
heynnema

3

ฉันเชื่อว่าปัญหานี้อาจเกิดจากหลาย OS ตามข้อความที่ตัดตอนมาจาก Grub2 wiki นี้ :

หากตรวจไม่พบระบบปฏิบัติการอื่น GRUB 2 จะบูตเข้าสู่ระบบปฏิบัติการเริ่มต้นทันทีและจะไม่มีเมนูใดแสดงขึ้นมา หากตรวจพบระบบปฏิบัติการอื่นเมนู GRUB 2 จะปรากฏขึ้น

และ

การบันทึก OS สามารถทำได้โดยการเรียกใช้ sudo grub-set-default หาก GRUB_DEFAULT = บันทึกถูกตั้งค่าไว้ใน / etc / default / grub มันอาจถูกบันทึกหาก GRUB_SAVEDEFAULT = true ถูกตั้งค่าใน / etc / default / grub ด้วย ในกรณีนี้ระบบปฏิบัติการเริ่มต้นจะยังคงอยู่จนกว่าจะมีการเลือกระบบปฏิบัติการใหม่ด้วยตนเองจากเมนู GRUB 2 หรือรันคำสั่ง grub-set-default

Grub2 Wiki ยังระบุด้วย: หมายเหตุ: มีข้อผิดพลาดที่ยืนยันมานานแล้วในฟีเจอร์เมนูที่ซ่อนอยู่ใน GRUB 1.97 ถึง GRUB 1.99 เมนูอาจไม่ซ่อนตามที่ระบุในคำอธิบายในหน้านี้ ในขณะที่การแก้ไขสคริปต์ 30_os-prober สามารถแก้ไขปัญหานี้ได้มันอยู่นอกเหนือขอบเขตของหน้านี้

คุณสามารถตั้งค่าGRUB_TIMEOUT="1"และคุณจะเห็นเมนูเป็นเวลา 1 วินาทีเท่านั้น หากฉันต้องการเปลี่ยนไปใช้ระบบปฏิบัติการอื่นฉันเพียงกดปุ่มลูกศรลงภายในวินาทีนั้นและเมนูจะปรากฏขึ้นจนกว่าฉันจะทำการเลือก

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

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT="Ubuntu"
#GRUB_HIDDEN_TIMEOUT="0"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="1"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

ฉันกำลังดูGrubbugนี้ :) สำหรับข้อมูลเพิ่มเติมรวมทั้งBug นี้ทั้งสองอย่างนี้เกี่ยวข้องกับ Grub2 อายุ 2 ปี บางส่วนอาจเกี่ยวข้องกับรหัส MBR ก่อนส่งมอบให้ Grub2


ขอบคุณสำหรับคำตอบของคุณ ฉันใช้วิธี SAVEDEFAULT แล้ว TIMEOUT = 1 ทำให้เวลาในการปรากฏเมนูสั้นลงอย่างแน่นอน ปัญหาเกี่ยวข้องกับระบบปฏิบัติการหลายระบบ ในการทดสอบฉันปรับเปลี่ยนส่วนของรหัส/etc/grub.d/30_os-proberนั้นและแม้ว่าฉันจะไม่มีเมนู แต่ฉันก็ไม่สามารถบังคับให้เมนูเปลี่ยนหรือ esc ในเวลาบูตได้
heynnema

ข้อผิดพลาดที่คุณเชื่อมโยงดูเหมือนไม่เกี่ยวข้องหรือฉันขาดอะไรไปหรือเปล่า
Elder Geek

@ElderGeek เกี่ยวกับข้อผิดพลาด # 1401318 คนข้อผิดพลาดที่ได้รับมอบหมายให้ TJ อธิบายพฤติกรรมจาก MBR เพื่อ Grub ในขณะที่เขาระบุว่า "นอนหลับ - หยุดชะงัก $ $ หมดเวลา" ฯลฯ ถ้าคุณอ่านงบของเขาทั้งหมดในความคิดเห็นข้อผิดพลาดฉันคิดว่า คุณจะเห็นว่าอย่างน้อยส่วนหนึ่งของปัญหาคืออะไร เขายังได้รับมอบหมายให้ข้อผิดพลาด # 425979 ซึ่งคล้ายกันในประเด็น ข้อบกพร่องทั้งสองอย่างเกี่ยวข้องกับการกดปุ่ม Shift ค้างไว้เพื่อให้เมนู Grub ไม่ทำงานเมื่อตั้งค่าให้ซ่อน นี่คือสิ่งที่ OP พยายามคิดออกเช่นกัน ฉันหวังว่านี่จะอธิบายได้ว่าทำไมลิงก์ถึงอยู่ในคำตอบที่โพสต์ของฉัน
xtrchessreal

ให้อภัยความสับสนของฉัน ฉันอ่านคำถามโดยบอกว่า "ฉันจะซ่อนเมนู GRUB ของฉันได้อย่างไร" ขอบคุณสำหรับคำชี้แจง ฉันต้องพลาดความเห็นนั้น
เอ็ลเดอร์ Geek

@ElderGeek จริง ๆ แล้วคำถามคือ "ฉันจะซ่อนเมนู GRUB ของฉันได้อย่างไรและให้ปุ่ม Shift หรือ esc แสดงเมนู GRUB ที่ซ่อนอยู่ในเวลาบูต" ฉันซ่อนมันไว้แล้ว ฉันไม่ได้รับการเปลี่ยนแปลงหรือปุ่ม esc เพื่อทำงาน เห็นได้ชัดว่าปัญหานี้ย้อนกลับไปในปี 2013 หรือก่อนหน้าและมีผลเฉพาะการกำหนดค่ามัลติบูต
heynnema

3
  1. ผมคิดว่าคุณต้องการที่จะลอง 'ทุกอย่าง' /etc/default/grubสามารถใช้ได้ผ่านทาง คุณอ่านลิงค์นี้หรือไม่

    help.ubuntu.com/community/Grub2/Setup#Configuring_GRUB_2

  2. ผมขอแนะนำให้คุณลองลบบรรทัดต่อไปนี้จาก/boot/grub/grub.cfg,

    ...
    set timeout_style=menu
    if [ "${timeout}" = 0 ]; then
      set timeout=10
    fi
    ### END /etc/grub.d/30_os-prober ###
    

    ใช่ฉันรู้ว่าคุณจะต้องทำทุกครั้งที่update-grubทำงาน แต่คุณสามารถสร้างสคริปต์ได้


ขอบคุณสำหรับคำตอบของคุณ ฉันจะดูที่ลิงค์นั้น ฉันได้พบวิธีในการแก้ไข /etc/grub.d/30_os-prober เพื่อที่ฉันจะได้ไม่ต้องแก้ไข grub.cfg ทุกครั้ง
heynnema

นี่เป็นเรื่องที่สมเหตุสมผลสำหรับฉันในระบบมัลติบูตดูเหมือนว่ารหัสนี้จะเปลี่ยนการหมดเวลากลับไปเป็น 10 จาก 0 ซึ่งดูเหมือนว่าจะเอาชนะ HIDDEN_TIMEOUT ....
Elder Geek

@heynnema คุณสามารถโพสต์การเปลี่ยนแปลงไปยัง os-prober ได้หรือไม่ เมื่อฉันดูลิงก์ในคำถามของคุณและเปรียบเทียบกับโค้ดใน os-prober ของฉันหมายเลขบรรทัดไม่สมเหตุสมผลดังนั้นฉันจึงถือว่า os-prober เปลี่ยนไปตั้งแต่นั้นมาและฉันกลัวที่จะยุ่งกับมัน
หินอ่อนออร์แกนิ

1
@OrganicMarble ดูการอัปเดตคำถามของฉัน บางทีคุณสามารถลอง / mods ทั้งหมดของฉันและดูว่าคุณกำลังทำอะไรอยู่
heynnema

@sudodus โปรดดูคำตอบของฉัน
heynnema
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.