ซ่อนเมนู GRUB2 ยกเว้นว่าคุณกดแป้น Shift ค้างไว้: จะทำให้สิ่งนี้เกิดขึ้นได้อย่างไร


32

ฉันมี Ubuntu - การตั้งค่าบูตดูอัลบูตของ Windows 7 และฉันต้องการให้แล็ปท็อปของฉันบูต Windows 7 เว้นแต่ฉันจะกดปุ่ม Shift ทันทีหลังจากบู๊ตและเปิดเมนู Grub2 ขึ้นมาซึ่งฉันสามารถเลือกได้ อูบุนตู

ฉันค้นคว้าเกี่ยวกับ Grub2 และตัวเลือกสำหรับetc/default/grubและฉันได้ลองเล่นกับชุดค่าผสมGRUB_TIMEOUTและGRUB_HIDDEN_TIMEOUTค่า แต่ไม่มีประโยชน์ ฉันพยายามตั้งค่าให้GRUB_HIDDEN_TIMEOUTสูงกว่าGRUB_TIMEOUTความคิดที่ว่าการนับถอยหลังทั้งสองเริ่มพร้อมกัน แต่ไม่GRUB_TIMEOUTเริ่ม- หลังจากเริ่มอีกครั้ง

พฤติกรรมนี้ทำได้หรือไม่

ถ้าเป็นเช่นนั้นได้อย่างไร


1
วิธีที่ฉันทำคือฉันตั้งค่าการหมดเวลาเป็น 0 (ตั้งค่าโดยใช้ Grub Customizer) ฉันสามารถที่จะไม่มีเมนู GRUB2 ปรากฏเว้นแต่ว่าฉันถือกะทันทีหลังจากไบออสของฉันซึ่งจะแสดงเมนู sudo add-apt-repository ppa: danielrichter2007 / grub-customizer sudo apt-get update sudo apt-get การติดตั้ง grub-customizer
Ryan McClure

ฉันเข้าใจว่านี่เป็นพฤติกรรมเริ่มต้นสำหรับการติดตั้งบางอย่าง
RobotHumans

@RyanMcClure ฉันพยายามตั้งค่าการหมดเวลาด้วยตนเองเป็น 0 แต่การกดปุ่ม Shift ค้างไว้จะไม่ทำให้เมนู Grub2 ปรากฏขึ้นเลย
Bez Hermoso

คำตอบ:


15

ฉันคิดว่าฉันพบความละเอียดที่ง่ายขึ้น แก้ไขบรรทัดต่อไปนี้ในไฟล์ / etc / default / grub:

GRUB_HIDDEN_TIMEOUT = 0.0

GRUB_TIMEOUT = 0.0

แน่นอนว่าในที่สุดเราก็เรียกใช้ update-grub มันทำงานบนพีซีของฉัน


6
เกานั้น นี่ไม่ได้ให้เมนูด้วงกับฉัน แต่ฉันก็ไม่สามารถรับได้ด้วยการกด Shift
zorkerz

9

นี่สำหรับ Ubuntu 16.04

ฉันแก้ไขปัญหานี้ด้วยการรวมกันเล็กน้อยของคำตอบที่พบข้างต้นดังนั้นจึงไม่จำเป็นต้องแก้ไข 30_os-prober หลีกเลี่ยงการรวมในอนาคตเมื่อมีการปรับปรุงแพ็คเกจด้วง ...

หวังว่ามันจะช่วย

เปลี่ยนตัวแปรใน / etc / default / grub เพื่อสะท้อนสิ่งที่ฉันต้องการ;

GRUB_DEFAULT=4
GRUB_HIDDEN_TIMEOUT=5
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

GRUB_FORCE_HIDDEN_MENU="true"
export GRUB_FORCE_HIDDEN_MENU

จากนั้นสร้างไฟล์ใหม่

sudo touch /etc/grub.d/50_hidemenu
sudo chmod +x /etc/grub.d/50_hidemenu

เต็มไปด้วยเนื้อหานี้;

#!/bin/sh
cat <<EOF
if [ "x\${timeout}" != "x-1" ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
      set timeout=0
    fi
  fi
fi
EOF

และด้วงปรับปรุง;

sudo update-grub

ไชโย


ไม่ทำงานสำหรับฉัน
Menasheh

ฉันเพิ่งทดสอบสิ่งนี้ใน 16.04 คุณอยู่ในรุ่นอื่นหรือไม่?
tux1c

อาจเป็น 16.10 คุณพูดถูกต้องควรพูดอย่างนั้น
Menasheh

ทำงานในการบีบ Debian ด้วย
Jocelyn delalande

7

ใน Kubuntu 14.04 สิ่งนี้ไม่ทำงานหากคุณตั้งค่าGRUB_TIMEOUT= 0แปลก ๆ หลังจากใช้สิ่งนี้และรีบูตเมนูด้วงยังคงปรากฏให้เห็นเป็นเวลา 10 วินาที

เหตุผลสำหรับสิ่งนี้คือในสคริปต์ grub อื่นมีส่วนของรหัสที่กำหนด grub_timeout เป็น 10 หากมีค่าเป็น 0

ดังนั้นนี่คือวิธีที่ฉันได้มันไปทำงาน:

ทำสำเนาของทั้งสองgrubและ30_osproberไฟล์ !!! เมื่อเกิดข้อผิดพลาดคุณสามารถนำไฟล์ต้นฉบับกลับมาได้

ใน /etc/default/grub

GRUB_DEFAULT=4    #set this value to the OS you want to boot
GRUB_HIDDEN_TIMEOUT=0

GRUB_TIMEOUT=0

ใน/etc/grub.d/30_os-proberมีโค้ดบางส่วนที่ตั้งค่าการหมดเวลาด้วงเป็น 10 วินาทีหากตั้งค่าเป็นศูนย์ใน/etc/default/grubฉันไม่รู้ว่าทำไม devs วางไว้ที่นั่น แต่ป้องกันการซ่อนเมนูด้วง

set timeout_style=menu

if [ "\${timeout}" = 0 ]; then    
  set timeout=10  # I changed this from 10 to 0

หลังจากการเปลี่ยนแปลงเหล่านี้เรียกใช้ sudo update-grubเพื่อสร้างลำดับการบูตด้วงใหม่

ฉันบันทึกการแก้ไข / การดัดแปลงลินุกซ์ของฉันทั้งหมดที่ https://sites.google.com/site/marcshomesite/Home/linux-tuning


ฉันหวังว่าคุณไม่ได้ใส่วรรคหลังใน= GRUB_TIMEOUT= 0
muru

4

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

GRUB_DEFAULT= <number of default entry starting from 0>
GRUB_TIMEOUT= 0 # time in seconds to boot default
# GRUB_HIDDEN_TIMEOUT=0 # warning: activating this may lock you out from GRUB menu

เป็นความคิดที่ดีที่จะทำการสำรองข้อมูลไฟล์เหล่านี้ก่อนที่จะทำการแก้ไข หลังจากทำการเปลี่ยนแปลงแล้วเราจำเป็นต้องเปิดใช้งานด้วย

sudo update-grub

ค่าสำหรับ GRUB_DEFAULT ขึ้นอยู่กับแต่ละระบบของเรา ในการบูต Windows ทุกครั้งเราสามารถใส่ชื่อของรายการตามที่ปรากฏในเมนู Grub (เช่น"Microsoft Windows XP Professional") แทนหมายเลขรายการ


หมายเหตุสำคัญ:ในบางเครื่องเมนู GRUB ไม่สามารถแสดงได้ด้วยการกดค้างไว้Shiftขณะบู๊ต (ดูข้อผิดพลาด # 425979 ) ดังนั้นจึงเป็นความคิดที่ดีที่จะทดสอบสิ่งนี้ก่อนโดยตั้งค่าการบูท Ubuntu (ไม่ใช่ Windows) เป็นระบบปฏิบัติการเริ่มต้น จากนั้นคุณจะสามารถยกเลิกการตั้งค่า GRUB ได้อย่างง่ายดายในกรณีที่คุณได้รับผลกระทบ


นั่นไม่ทำให้อูบุนตูไม่สามารถบูตได้อย่างมนุษย์ปุถุชนหรือมีเวลาเพียงพอที่จะขัดขวางการบูตและเลือกอูบุนตูเมื่อฉันต้องการ?
Bez Hermoso

1
@Shasteriskt คุณควรตั้งค่าการหมดเวลาเป็นค่าที่นานพอที่จะกดปุ่มเพื่อเลือกบูตระบบปฏิบัติการอื่น
Takkat

ฉันตั้งค่าการหมดเวลาเป็น 0 และกดปุ่ม Shift ค้างไว้ แต่เมนูยังคงไม่ปรากฏ (สิ่งที่ดีฉันตั้งให้บูตกับ Ubuntu ที่ฉันสามารถแก้ไขการตั้งค่าตามแบบที่พวกเขาเคยเป็น)
Bez Hermoso

ในระยะสั้นพฤติกรรมที่ฉันต้องการไม่สามารถทำได้?
Bez Hermoso

@Shasteriskt: น่าเสียดายที่บางเครื่องกดและค้างไว้ซ้าย SHIFT ระหว่างการบู๊ตเพื่อเปิดเมนู GRUB ขึ้นมาใช้งานไม่ได้ (เช่นบั๊กนี้ ) คุณอาจโชคดีในกรณีที่ ESC หรือ SHIFT + ESC ทำงาน
Takkat

4

ฉันพยายามทำเช่นเดียวกันและพบความช่วยเหลือที่ยอดเยี่ยมในฟอรัม Ubuntu โดยเฉพาะใน นี้ด้าย

สมมติว่าคุณทำสิ่งที่/etc/default/grubถูกต้องด้วยการตั้งค่าอย่างถูกต้องGRUB_TIMEOUTและGRUB_HIDDEN_TIMEOUT(ฉันจะบอกว่าตามลำดับเป็น 0 และ 5) และแม้แต่GRUB_DEFAULTการระบุอิมเมจเริ่มต้นที่จะบู๊ตนี่เป็นขั้นตอนเพื่อให้ทำงานได้อย่างถูกต้อง

  1. เพิ่มบรรทัดเหล่านั้น

    GRUB_FORCE_HIDDEN_MENU="true"
    export GRUB_FORCE_HIDDEN_MENU
    

    ไปยังจุดสิ้นสุดของ /etc/default/grub

  2. สำรองข้อมูล/etc/grub.d/30_os-proberและเขียนทับด้วยรุ่นที่พบที่นี่

  3. ทดสอบ! เพื่อแสดงเมนูให้กดSHIFTปุ่ม

ปัญหานี้เกี่ยวข้องกับการตั้งค่าหลายระบบและการแก้ไขสคริปต์เป็นวิธีหนึ่งในการแก้ไข

30_os-prober :

#! /bin/sh
set -e

# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009  Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

prefix="/usr"
exec_prefix="${prefix}"
datarootdir="${prefix}/share"

. "${datarootdir}/grub/grub-mkconfig_lib"

found_other_os=

make_timeout () {

  if [ "x${found_other_os}" = "x" ] || [ "x${GRUB_FORCE_HIDDEN_MENU}" = "xtrue" ] ; then 
    if [ "x${1}" != "x" ] ; then
      if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
    verbose=
      else
    verbose=" --verbose"
      fi

      if [ "x${1}" = "x0" ] ; then
    cat <<EOF
if [ "x\${timeout}" != "x-1" ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep$verbose --interruptible 3 ; then
      set timeout=0
    fi
  fi
fi
EOF
      else
    cat << EOF
if [ "x\${timeout}" != "x-1" ]; then
  if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
    set timeout=0
  fi
fi
EOF
      fi
    fi
  fi
}

adjust_timeout () {
  if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
    cat <<EOF
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
EOF
    make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}"
    echo else
    make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
    echo fi
  else
    make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
  fi
}

if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
  adjust_timeout
  exit 0
fi

if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
  # missing os-prober and/or linux-boot-prober
  adjust_timeout
  exit 0
fi

OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
if [ -z "${OSPROBED}" ] ; then
  # empty os-prober output, nothing doing
  adjust_timeout
  exit 0
fi

osx_entry() {
    found_other_os=1
        cat << EOF
menuentry "${LONGNAME} (${2}-bit) (on ${DEVICE})" --class osx --class darwin --class os {
EOF
    save_default_entry | sed -e "s/^/\t/"
    prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
    cat << EOF
        load_video
        set do_resume=0
        if [ /var/vm/sleepimage -nt10 / ]; then
           if xnu_resume /var/vm/sleepimage; then
             set do_resume=1
           fi
        fi
        if [ \$do_resume = 0 ]; then
           xnu_uuid ${OSXUUID} uuid
           if [ -f /Extra/DSDT.aml ]; then
              acpi -e /Extra/DSDT.aml
           fi
           $1 /mach_kernel boot-uuid=\${uuid} rd=*uuid
           if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
              xnu_mkext /System/Library/Extensions.mkext
           else
              xnu_kextdir /System/Library/Extensions
           fi
           if [ -f /Extra/Extensions.mkext ]; then
              xnu_mkext /Extra/Extensions.mkext
           fi
           if [ -d /Extra/Extensions ]; then
              xnu_kextdir /Extra/Extensions
           fi
           if [ -f /Extra/devprop.bin ]; then
              xnu_devprop_load /Extra/devprop.bin
           fi
           if [ -f /Extra/splash.jpg ]; then
              insmod jpeg
              xnu_splash /Extra/splash.jpg
           fi
           if [ -f /Extra/splash.png ]; then
              insmod png
              xnu_splash /Extra/splash.png
           fi
           if [ -f /Extra/splash.tga ]; then
              insmod tga
              xnu_splash /Extra/splash.tga
           fi
        fi
}
EOF
}

wubi=

for OS in ${OSPROBED} ; do
  DEVICE="`echo ${OS} | cut -d ':' -f 1`"
  LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
  LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
  BOOT="`echo ${OS} | cut -d ':' -f 4`"

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

  echo "Found ${LONGNAME} on ${DEVICE}" >&2

  case ${BOOT} in
    chain)

      case ${LONGNAME} in
    Windows*)
      if [ -z "$wubi" ]; then
        if [ -x /usr/share/lupin-support/grub-mkimage ] && \
           /usr/share/lupin-support/grub-mkimage --test; then
          wubi=yes
        else
          wubi=no
        fi
      fi
      if [ "$wubi" = yes ]; then
        echo "Skipping ${LONGNAME} on Wubi system" >&2
        continue
      fi
      ;;
      esac

      found_other_os=1
      cat << EOF
menuentry "${LONGNAME} (on ${DEVICE})" --class windows --class os {
EOF
      save_default_entry | sed -e "s/^/\t/"
      prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"

      case ${LONGNAME} in
    Windows\ Vista*|Windows\ 7*|Windows\ Server\ 2008*)
    ;;
    *)
      cat << EOF
    drivemap -s (hd0) \${root}
EOF
    ;;
      esac

      cat <<EOF
    chainloader +1
}
EOF
    ;;
    linux)
      LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
      prepare_boot_cache=

      for LINUX in ${LINUXPROBED} ; do
        LROOT="`echo ${LINUX} | cut -d ':' -f 1`"
        LBOOT="`echo ${LINUX} | cut -d ':' -f 2`"
        LLABEL="`echo ${LINUX} | cut -d ':' -f 3 | tr '^' ' '`"
        LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`"
        LINITRD="`echo ${LINUX} | cut -d ':' -f 5`"
        LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`"

        if [ -z "${LLABEL}" ] ; then
          LLABEL="${LONGNAME}"
        fi

    if [ "${LROOT}" != "${LBOOT}" ]; then
      LKERNEL="${LKERNEL#/boot}"
      LINITRD="${LINITRD#/boot}"
    fi

    if [ -z "${prepare_boot_cache}" ]; then
      prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")"
      [ "${prepare_boot_cache}" ] || continue
    fi
    found_other_os=1
        cat << EOF
menuentry "${LLABEL} (on ${DEVICE})" --class gnu-linux --class gnu --class os {
EOF
    save_default_entry | sed -e "s/^/\t/"
    printf '%s\n' "${prepare_boot_cache}"
    cat <<  EOF
    linux ${LKERNEL} ${LPARAMS}
EOF
        if [ -n "${LINITRD}" ] ; then
          cat << EOF
    initrd ${LINITRD}
EOF
        fi
        cat << EOF
}
EOF
      done
    ;;
    macosx)
      OSXUUID="`grub-probe --target=fs_uuid --device ${DEVICE} 2> /dev/null`"
      osx_entry xnu_kernel 32
      osx_entry xnu_kernel64 64
    ;;
    hurd)
      found_other_os=1
      cat << EOF
menuentry "${LONGNAME} (on ${DEVICE})" --class hurd --class gnu --class os {
EOF
      save_default_entry | sed -e "s/^/\t/"
      prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
      grub_device="`${grub_probe} --device ${DEVICE} --target=drive`"
      mach_device="`echo "${grub_device}" | sed -e 's/(\(hd.*\),msdos\(.*\))/\1s\2/'`"
      grub_fs="`${grub_probe} --device ${DEVICE} --target=fs`"
      case "${grub_fs}" in
    *fs)    hurd_fs="${grub_fs}" ;;
    *)  hurd_fs="${grub_fs}fs" ;;
      esac
      cat << EOF
    multiboot /boot/gnumach.gz root=device:${mach_device}
    module /hurd/${hurd_fs}.static ${hurd_fs} --readonly \\
            --multiboot-command-line='\${kernel-command-line}' \\
            --host-priv-port='\${host-port}' \\
            --device-master-port='\${device-port}' \\
            --exec-server-task='\${exec-task}' -T typed '\${root}' \\
            '\$(task-create)' '\$(task-resume)'
    module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
}
EOF
    ;;
    *)
      echo "  ${LONGNAME} is not yet supported by grub-mkconfig." >&2
    ;;
  esac
done

adjust_timeout


    cat <<EOF
if [ "x\${timeout}" != "x-1" ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep$verbose --interruptible 3 ; then
      set timeout=0
    fi
  fi
fi
EOF

1
ฉันลองวิธีการของคุณแล้วและมันก็ล้มเหลว Ubuntu 14.04 LTS
Mayukh Nair

1
ส่วนใดของไฟล์ที่ฉันควรเปลี่ยน ไฟล์ 14.04 ของฉันมีความแตกต่างมากมายกับไฟล์นี้ดังนั้นฉันคิดว่าฉันควรเปลี่ยนแปลงเฉพาะเป้าหมาย
MakisH

@MayukhNair: ฉันมี Ubuntu 14.04 และวิธีนี้ใช้ได้ผล ฉันทำดังต่อไปนี้ - 1. ตั้ง GRUB_DEFAULT = 0 ใน / etc / default / grub 2. ตั้ง GRUB_HIDDEN_TIMEOUT = 0 (ซึ่งแตกต่างจากที่ Dariopnc พูด) 3. สำรอง /etc/grub.d/30_os-prober ของคุณและคัดลอกข้อความข้างต้น 30-os_prober ไฟล์ 4. sudo update-grub2
Pushpak Dagade

หมายเหตุด้วงจะต้องได้รับการอัปเดตsudo update-grubหลังจากเปลี่ยน/etc/default/grubไฟล์
วิลฟ์

3

บน Ubuntu 16.04 ฉันได้ทำการเปลี่ยนแปลงต่อไปนี้ แน่นอนว่าคุณต้องเป็นผู้ใช้ที่ได้รับสิทธิพิเศษ

  1. การเปลี่ยนแปลงครั้งแรกอยู่ใน/etc/grub.d/30_os-proberไฟล์:

    • เปิดด้วย sudo gedit /etc/grub.d/30_os-prober
    • เปลี่ยนquick_boot="1"เป็นquick_boot="0"
    • บันทึกไฟล์
  2. หลังจากนั้นคุณสามารถตั้งค่าการหมดเวลา/etc/default/grubเป็นศูนย์หรือค่าอื่น ๆ :

    • เปิดด้วย sudo gedit /etc/default/grub
    • GRUB_HIDDEN_TIMEOUT=0GRUB_TIMEOUT=0และ
    • บันทึกไฟล์
  3. ขั้นตอนสุดท้ายคือการอัพเดตด้วง

    • sudo update-grub

การเปลี่ยนแปลงในไฟล์แรกเป็นเพราะการตั้งค่าเริ่มต้นคือหากพบว่าระบบปฏิบัติการอื่น ๆ (เช่น Windows 10) ค่าการหมดเวลาจะถูกตั้งค่าเป็น 10 วินาทีเสมอดังนั้นจึงไม่สามารถเปลี่ยนแปลง/etc/default/grubได้ นี่คือความสำเร็จโดยฟังก์ชั่นที่มีชื่อadjust_timeoutซึ่งถามว่าquick_bootมีการตั้งค่าและหากมีระบบปฏิบัติการอื่นอยู่


ในที่สุด somzing zat vorks ตัวช่วย 16.04!
JLTD

2

ติดตั้งเครื่องมือเพิ่มประสิทธิภาพด้วง

sudo add-apt-repository ppa: danielrichter2007 / grub-customizer

sudo apt-get update
sudo apt-get install grub-customizer

Grub Customizer จะปรากฏขึ้นในเมนู Applications> System Tools

หรือคุณสามารถเปิดได้จากบรรทัดคำสั่ง

gksudo grub-customizer

ภาพภายในสำหรับตัวเลือกด้วง

ป้อนคำอธิบายรูปภาพที่นี่


3
สิ่งนี้สามารถทำสิ่งที่ไม่สามารถทำได้โดยการแก้ไขetc/default/grub?
Bez Hermoso

3
@Shasteriskt: มันจะมีประโยชน์สำหรับผู้ที่ไม่ได้ใช้ภาษาอังกฤษผู้ที่ไม่คุ้นเคยกับบรรทัดคำสั่งหรือผู้ที่ต้องการใช้คอมพิวเตอร์และไม่ได้ยุ่งกับไฟล์การกำหนดค่า
Flimm

เหตุใดจึงมีการ upvoted นี้ ดูเหมือนจะไม่สามารถแก้ปัญหาใด ๆ ได้ ฉันได้ลองแล้วgrub-customizer(ไม่ใช่ 'เครื่องมือเพิ่มประสิทธิภาพ') และในขณะที่ทำงานก็ไม่ได้ช่วยให้ฉันซ่อนเมนูด้วงได้เว้นแต่กดปุ่ม Shift
Nickolai Leschov

1

ฉันมีปัญหาเดียวกันกับระบบบู๊ตเดี่ยว หาก GRUB_TIMEOUT ไม่ใช่ศูนย์เมนูจะปรากฏขึ้นเสมอโดยไม่คำนึงถึง GRUB_HIDDEN_TIMEOUT ถ้า GRUB_TIMEOUT เป็นศูนย์มันจะเข้าสู่โหมด GRUB_HIDDEN_TIMEOUT วินาที แต่ SHIFT หรือ ESC จะไม่แสดงเมนู

ฉันแก้ไขมันโดยการเพิ่มส่วนคำสั่งอื่นในสถานะการนอนหลับตอนท้ายของ adjust_time () ใน 30_os-prober ตอนนี้ถ้ามันไม่ถูกขัดจังหวะการหมดเวลาเป็นศูนย์และมันจะบู๊ตโดยไม่มีเมนู แต่ถ้ามันถูกขัดจังหวะฉันได้ตั้งไทม์เอาต์เป็น 10

สิ่งนี้ดูเหมือนว่าจะย้อนกลับมาตั้งแต่การนอนหลับควรส่งคืน 0 (เท็จ) ถ้ามันไม่ถูกขัดจังหวะและ 1 (จริง) ถ้ามันเป็น แต่มันดูเหมือนจะได้ผลสำหรับฉัน


0

ทำให้ GRUB2 BOOT MENU มองเห็นโดยอัตโนมัติ

ด้วยเหตุผลบางอย่างการแก้ไขการGRUB_GFXMODE=640x480ตั้งค่าใน Grub Customizer จะทำให้เมนูการบู๊ตปรากฏขึ้น:

  1. ติดตั้ง grub-customizer ตามด้านบนและอัพเดท
  2. ค้นหา Grub Customizer ใน GUI (สำหรับฉันมันอยู่ในระบบ> การดูแลระบบ> ... แต่สำหรับบางคนมันเป็นกองทุนภายใต้แอปพลิเคชั่น> เครื่องมือระบบ> .. )
  3. เปิด Grub Customizer และเลือกการตั้งค่า> ขั้นสูง
  4. เลือก GRUB_gfxmode (640X480) - หากเลือกไว้แล้วให้ยกเลิกการเลือกรีบูตและเลือกอีกครั้ง
  5. ข้ามนิ้วของคุณและรีบูต!

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


0

Shasteriskt อีกทางเลือกหนึ่งในการแก้ปัญหา 'SHIFT' คือการสร้างสคริปต์ที่ดำเนินการย้ายบางอย่างสำหรับคุณ สิ่งที่ฉันหมายถึงคือสร้างไฟล์ที่เรียกgrub.bakว่าเป็นสำเนาที่แน่นอนของgrub.cfgไฟล์ของคุณโดยมีความแตกต่างเพียงอย่างเดียวset timeout=0คือบรรทัดนั้นเปลี่ยนไปset timeout=10เป็นตัวอย่าง สร้างเชลล์สคริปต์ที่เป็นสวิตช์ที่ให้คุณรีบูตตามความต้องการของคุณ ฉันสร้างสคริปต์หลามเทียบเท่าที่ตอบสนองความต้องการเหล่านี้ sudoแต่แน่นอนมันจะต้องมีการเรียกว่ามี ฉันเพียงแค่ใส่มัน/usr/binในการตั้งค่าของฉันเป็น symlink กับสคริปต์จริงของตัวเอง หมายเหตุ: ฉันกำลังเรียกใช้ fluxbox บน Arch ดังนั้นฉันไม่แน่ใจว่ามีความแตกต่างระหว่างสคริปต์นี้และ Ubuntu แต่ควรมีการปรับเปลี่ยนเล็กน้อยหรือไม่มีเลยฉันคิดว่า สคริปต์ดูเหมือนว่า:

#! /usr/bin/python
from shlex import split
from subprocess import call
from os import rename, chdir

chdir('/boot/grub/')
try:
    with open('grub.bak','r') as alternate:
        pass
    if raw_input('Auto-boot is set. Un-set?> ') == 'y':
        rename('grub.cfg','grub.back')
        rename('grub.bak','grub.cfg')

    if raw_input('Reboot system?> ') == 'y':
        call(split('shutdown -r now'))

except:
    if raw_input('Auto-boot is not set. Set?> ') == 'y':
        rename('grub.cfg','grub.bak')
        rename('grub.back','grub.cfg')

    if raw_input('Reboot system?> ') == 'y':
        call(split('shutdown -r now'))

สคริปต์นั้นเป็นตัวกำหนดว่าคุณมีเมนูให้โหลดหรือไม่ (บูตอัตโนมัติหรือไม่) จากการค้นพบของมันมันจะถามคุณว่าคุณต้องการเปิดหรือปิดแล้วถามว่าคุณต้องการรีบูตหรือไม่ ในทางกลับกันถ้าคุณต้องการให้มันทำงานในลักษณะอื่น (เช่นใน Windows) และคุณได้ตั้งค่า Windows ให้เข้าถึงไฟล์ใน Linux คุณสามารถเรียกใช้สคริปต์เดียวกันในสภาพแวดล้อมนั้นได้เช่นกันหากคุณต้องการ หวังว่าจะช่วย


0

ดังนั้นแม้ว่าคุณจะตั้งค่า GRUB_TIMEOUT เป็น 0 หากคุณมี GRUB_HIDDEN_TIMEOUT ใด ๆ 30_os-prober จะตั้งค่าการหมดเวลาเป็น 10 ไม่ว่าคุณจะชอบหรือไม่ก็ตาม โซลูชันอื่น ๆ ที่นี่แก้ไขสคริปต์นั้น แต่อาจทำให้เกิดปัญหาการอัปเดตคุณจะต้องรวมหากมีการอัปเดต GRUB

วิธีแก้ปัญหาที่ดีกว่า: เขียนสิ่งต่อไปนี้ใน/etc/grub.d/50_goddamnit(ไฟล์ใหม่):

#!/bin/sh
echo "set timeout=0"

โดยทั่วไปสิ่งนี้จะทำงานครั้งสุดท้ายและเป็นบรรทัดสุดท้ายใน /boot/grub/grub.conf ซึ่งจะแทนที่ mishigus โง่ ๆ อื่น ๆ ทั้งหมดในการกำหนดค่าเริ่มต้น

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