Ẩn menu GRUB2 KHÔNG GIỚI HẠN bạn giữ phím Shift: làm thế nào để thực hiện điều này?


32

Tôi có thiết lập khởi động kép Ubuntu - Windows 7 và tôi muốn biết rằng máy tính xách tay của tôi sẽ khởi động Windows 7 trừ khi tôi nhấn phím Shift ngay sau khi khởi động và mở menu Grub2 mà tôi có thể chọn Ubuntu.

Tôi đã nghiên cứu về Grub2 và các tùy chọn cho etc/default/grubvà tôi đã thử chơi xung quanh với các kết hợp với GRUB_TIMEOUTGRUB_HIDDEN_TIMEOUTcác giá trị, nhưng không có kết quả. Tôi đã cố gắng đặt GRUB_HIDDEN_TIMEOUTmức cao hơn GRUB_TIMEOUTsuy nghĩ rằng cả hai đếm ngược bắt đầu cùng một lúc, nhưng không - GRUB_TIMEOUTchỉ bắt đầu sau khi hoàn thành việc khác.

Là hành vi này có thể đạt được?

Nếu vậy thì thế nào?


1
Cách tôi làm là tôi có thời gian chờ được đặt thành 0 (Đặt bằng Grub Customizer). Tôi có thể không có menu GRUB2 xuất hiện trừ khi tôi giữ shift ngay sau bios của mình, sau đó hiển thị menu. sudo add-apt-repository ppa: danielrichter2007 / grub-customizer sudo apt-get update sudo apt-get install grub-customizer
Ryan McClure

Theo hiểu biết của tôi thì đây là hành vi mặc định cho một số cài đặt
RobotHumans

@RyanMcClure Tôi đã thử đặt thời gian chờ thủ công thành 0 nhưng nhấn giữ phím Shift phải không hiển thị menu Grub2.
Bez Hermoso

Câu trả lời:


15

Tôi nghĩ rằng tôi đã tìm thấy một giải pháp đơn giản hơn. Sửa đổi các dòng sau trong tệp / etc / default / grub:

GRUB_HIDDEN_TIMEOUT = 0,0

GRUB_TIMEOUT = 0,0

Tất nhiên cuối cùng chúng tôi cũng chạy được một bản cập nhật. Nó hoạt động trên PC của tôi.


6
Cào đó. Điều này không cung cấp cho tôi menu grub nhưng tôi cũng không thể lấy nó bằng cách nhấn shift.
zorkerz

9

Đây là cho Ubuntu 16.04.

Tôi đã giải quyết vấn đề này bằng một chút kết hợp của một số câu trả lời được tìm thấy ở trên, do đó không cần thiết phải sửa đổi 30_os-prober, tránh việc hợp nhất trong tương lai khi gói grub được cập nhật ...

Hy vọng nó giúp.

Đã thay đổi một số biến trong / etc / default / grub để phản ánh những gì tôi muốn;

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

Sau đó tạo một tệp mới;

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

điền nó với nội dung này;

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

và cập nhật grub;

sudo update-grub

Chúc mừng.


Không làm việc cho tôi.
Menasheh

Tôi chỉ thử nghiệm điều này trong 16.04. Bạn đang ở một phiên bản khác?
tux1c

Có thể đã được 16.10. Bạn nói đúng, chắc chắn nên đề cập đến điều đó.
Menasheh

Hoạt động trên Debian cũng rất tốt
Jocelyn delalande

7

Trong Kubfox 14.04, điều này không hoạt động, nếu bạn thiết lập GRUB_TIMEOUT= 0, thật kỳ lạ, sau khi áp dụng điều này và khởi động lại, menu grub vẫn hiển thị trong 10 giây.

Lý do cho điều này là trong một tập lệnh grub khác có một đoạn mã đặt grub_timeout thành 10 nếu nó có giá trị 0.

Vì vậy, đây là cách tôi làm cho nó hoạt động:

tạo một bản sao của cả hai grub30_osprobercác tập tin !!! Khi có sự cố, bạn có thể đặt lại các tệp gốc

Trong /etc/default/grub

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

GRUB_TIMEOUT=0

trong/etc/grub.d/30_os-prober đó, có một đoạn mã đặt thời gian chờ grub thành 10 giây nếu nó được đặt thành 0 /etc/default/grub, tôi không biết tại sao các nhà phát triển lại đặt nó ở đó, nhưng nó ngăn việc ẩn menu grub.

set timeout_style=menu

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

Sau những thay đổi này, hãy chạy sudo update-grubđể tạo chuỗi khởi động grub mới.

Tôi ghi lại tất cả các bản sửa lỗi / mod linux của mình trên https://sites.google.com/site/marcshomesite/Home/linux-tuning


Tôi hy vọng bạn không đặt một không gian sau =trong GRUB_TIMEOUT= 0.
muru

4

Để tự động khởi động Windows mà không phải chọn từ menu GRUB, chúng ta cần chỉnh sửa /etc/default/grubtệp với các giá trị tương tự như sau:

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

Luôn luôn là một ý tưởng tốt để tạo bản sao lưu của các tệp này trước khi bạn chỉnh sửa chúng. Sau khi thực hiện các thay đổi, chúng ta cần kích hoạt chúng với

sudo update-grub

Giá trị cho GRUB_DEFAULT tùy thuộc vào hệ thống cá nhân của chúng tôi. Để luôn khởi động Windows, chúng ta có thể đặt tên của mục nhập chính xác như được hiển thị trong menu Grub (ví dụ "Microsoft Windows XP Professional") thay vì số mục nhập.


Lưu ý quan trọng: không thể hiển thị menu GRUB trong khi nhấn và giữ trái Shiftkhi khởi động (xem lỗi # 425979 ). Do đó, có thể là một ý tưởng tốt để kiểm tra điều này trước tiên khi khởi động Ubuntu (không phải Windows) được đặt làm HĐH mặc định. Sau đó, bạn sẽ có thể dễ dàng hoàn tác các cài đặt GRUB của mình trong trường hợp bạn bị ảnh hưởng.


Điều đó không làm cho Ubuntu không thể khởi động được, hay sẽ có đủ thời gian để chặn việc khởi động và chọn Ubuntu khi tôi muốn?
Bez Hermoso

1
@Shasteriskt bạn nên đặt thời gian chờ thành một giá trị đủ dài để nhấn một phím để chọn một hệ điều hành khởi động khác.
Takkat

Tôi đặt thời gian chờ là 0 và giữ phím Shift nhưng menu vẫn không hiển thị. (Điều tốt là tôi đã thiết lập nó để khởi động lên Ubuntu nơi tôi có thể chỉnh sửa cài đặt theo cách của chúng.)
Bez Hermoso

Tóm lại, hành vi tôi cần là không thể đạt được?
Bez Hermoso

@Shasteriskt: không may trên một số máy, nhấn và giữ trái-Shift trong khi khởi động để hiển thị menu GRUB bị hỏng (ví dụ: lỗi này ). Bạn có thể may mắn trong trường hợp ESC hoặc SHIFT + ESC hoạt động.
Takkat

4

Tôi đã cố gắng làm điều tương tự và tôi đã tìm thấy sự giúp đỡ tuyệt vời trong Diễn đàn Ubuntu, đặc biệt là trong chủ đề này .

Giả sử bạn đã làm đúng /etc/default/grub, cài đặt chính xác GRUB_TIMEOUTGRUB_HIDDEN_TIMEOUT(tôi sẽ nói tương ứng là 0 và 5) và thậm chí GRUB_DEFAULTđể chỉ định hình ảnh mặc định để khởi động, đây là quy trình để nó hoạt động đúng cách.

  1. Thêm những dòng đó

    GRUB_FORCE_HIDDEN_MENU="true"
    export GRUB_FORCE_HIDDEN_MENU
    

    đến cuối /etc/default/grub

  2. Sao lưu của bạn /etc/grub.d/30_os-probervà ghi đè lên nó với phiên bản được tìm thấy ở đây

  3. Kiểm tra nó! Để hiển thị menu bấm SHIFTphím

Vấn đề này liên quan đến việc thiết lập nhiều hệ điều hành và chỉnh sửa tập lệnh là một trong những cách để khắc phục điều đó.

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
Tôi đã thử phương pháp của bạn và nó đã thất bại. Ubuntu 14.04 LTS
Mayukh Nair

1
Tôi nên thay đổi những phần nào của tập tin? Tệp 14.04 của tôi có nhiều điểm khác biệt với tệp này, vì vậy tôi cho rằng tôi chỉ nên thực hiện các thay đổi được nhắm mục tiêu.
MakisH

@MayukhNair: Tôi có Ubuntu 14.04 và phương pháp này đã hoạt động. Tôi đã làm như sau - 1. Đặt GRUB_DEFAULT = 0 in / etc / default / grub 2. Đặt GRUB_HIDDEN_TIMEOUT = 0 (không giống như những gì Dariopnc đã nói) 3. Sao lưu /etc/grub.d/30_os-prober của bạn Tập tin 30-os_prober 4. sudo update-grub2
Pushpak Dagade 30/12/14

Lưu ý grub cần được cập nhật sudo update-grubsau khi thay đổi /etc/default/grubtệp
Wilf

3

Trên Ubuntu 16.04 tôi đã thực hiện các thay đổi sau. Tất nhiên bạn cần phải là một người dùng đặc quyền để làm như vậy.

  1. Thay đổi đầu tiên là trong /etc/grub.d/30_os-probertệp:

    • Mở nó với sudo gedit /etc/grub.d/30_os-prober
    • Thay đổi quick_boot="1"thànhquick_boot="0"
    • lưu các tập tin
  2. Sau đó, bạn có thể đặt các giá trị thời gian chờ /etc/default/grubthành 0 hoặc một số giá trị khác:

    • Mở nó với sudo gedit /etc/default/grub
    • GRUB_HIDDEN_TIMEOUT=0GRUB_TIMEOUT=0.
    • lưu các tập tin
  3. Bước cuối cùng là cập nhật grub

    • sudo update-grub

Các thay đổi đối với tệp đầu tiên là do cài đặt mặc định là nếu tìm thấy hệ điều hành khác (ví dụ Windows 10), giá trị thời gian chờ luôn được đặt thành 10 giây và do đó không thể thay đổi /etc/default/grub. Điều này được thực hiện bởi một chức năng có tên là adjust_timeouthỏi nếu quick_bootđược thiết lập nếu hệ điều hành khác có mặt.


Cuối cùng, một vài con vẹt zat wiz 16.04!
JLTD

2

cài đặt tối ưu hóa grub

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

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

Grub Customizer bây giờ sẽ hiển thị trong menu Ứng dụng> Công cụ hệ thống.

Hoặc bạn có thể mở nó từ dòng lệnh.

gksudo grub-tùy biến

hình ảnh bên trong cho các tùy chọn grub

nhập mô tả hình ảnh ở đây


3
Điều này có thể làm gì mà không thể được thực hiện bằng cách chỉnh sửa etc/default/grub?
Bez Hermoso

3
@Shasteriskt: nó có thể hữu ích cho những người không nói tiếng Anh, những người không quen thuộc với dòng lệnh hoặc những người chỉ muốn sử dụng máy tính và không làm phiền với các tệp cấu hình.
Flimm

Tại sao điều này đã được nâng cấp? Nó dường như không giải quyết bất kỳ vấn đề; Tôi đã thử grub-customizer(không phải 'trình tối ưu hóa') và trong khi làm việc, nó không giúp tôi ẩn menu GRUB trừ khi nhấn phím Shift.
Nickolai Leschov

1

Tôi đã có cùng một vấn đề trên một hệ thống khởi động. Nếu GRUB_TIMEOUT khác không, menu sẽ luôn bật lên bất kể GRUB_HIDDEN_TIMEOUT. Nếu GRUB_TIMEOUT bằng 0, nó sẽ ngủ trong GRUB_HIDDEN_TIMEOUT giây nhưng cả SHIFT và ESC sẽ không hiển thị menu.

Tôi đã sửa nó bằng cách thêm một mệnh đề khác vào trạng thái ngủ ở cuối điều chỉnh_time () trong 30_os-prober. Bây giờ nếu nó không bị gián đoạn thì thời gian chờ là 0 và nó khởi động không có menu, nhưng nếu nó bị gián đoạn, tôi đặt thời gian chờ là 10.

Điều này thực sự có vẻ ngược vì giấc ngủ sẽ trả về 0 (sai) nếu nó không bị gián đoạn và 1 (đúng) nếu có nhưng nó dường như hoạt động với tôi.


0

KIẾM GÓI BOOT GRUB2 TỰ ĐỘNG THAM GIA

Vì một số lý do, chỉnh sửa GRUB_GFXMODE=640x480cài đặt trong Grub Customizer thường làm cho menu khởi động hiển thị:

  1. Cài đặt grub-customizer như trên và cập nhật
  2. tìm Grub Customizer trong GUI (đối với tôi, đó là trong Hệ thống> Quản trị> ..., nhưng đối với một số người, đó là quỹ trong Ứng dụng> Công cụ hệ thống> ..)
  3. Mở Grub Customizer và chọn Preferences> Advanced
  4. Chọn GRUB_gfxmode (640X480) - nếu nó đã được chọn, bỏ chọn nó, khởi động lại và chọn lại.
  5. vượt qua các ngón tay của bạn và khởi động lại!

Tôi không biết tại sao điều này làm việc cho tôi, nhưng nó hoạt động trên cả hai máy tính của tôi, vì vậy hy vọng nó cũng sẽ làm việc cho bạn!


0

Shasteriskt, một giải pháp thay thế cho giải pháp 'SHIFT' chỉ là tạo một tập lệnh thực hiện một số thao tác di chuyển cho bạn. Ý tôi là tạo một tệp có tên grub.baklà bản sao chính xác của grub.cfgtệp của bạn , với sự khác biệt duy nhất là set timeout=0dòng được thay đổi thành set timeout=10ví dụ. Tạo một tập lệnh shell thực hiện một chuyển đổi cho phép bạn khởi động lại theo nhu cầu của bạn. Tôi đã tạo ra một kịch bản python tương đương đáp ứng các yêu cầu này, nhưng tất nhiên nó phải được gọi bằng sudo. Tôi chỉ đơn giản đưa nó vào /usr/binthiết lập của tôi như là một liên kết tượng trưng cho chính kịch bản thực tế. Lưu ý: Tôi đang chạy fluxbox trên Arch vì vậy tôi không chắc có bất kỳ sự khác biệt nào giữa tập lệnh này và Ubuntu hay không, nhưng tôi nghĩ sẽ có rất ít sửa đổi. Kịch bản trông giống như:

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

Kịch bản về cơ bản chỉ xác định xem bạn có tải menu hay không (tự động khởi động hay không). Dựa trên những phát hiện của nó, nó hỏi bạn nếu bạn muốn bật hay tắt, sau đó hỏi bạn có muốn khởi động lại không. Ngược lại, nếu bạn muốn nó hoạt động theo cách khác (ví dụ như trong Windows) và bạn đã thiết lập Windows để truy cập các tệp trong Linux, bạn cũng có thể chạy cùng một tập lệnh trong môi trường đó, nếu bạn muốn. Mong rằng sẽ giúp.


0

Vì vậy, ngay cả khi bạn đặt GRUB_TIMEOUT thành 0, nếu bạn có bất kỳ GRUB_HIDDEN_TIMEOUT, 30_os-prober sẽ đặt thời gian chờ là 10 cho dù bạn có thích hay không. Các giải pháp khác ở đây chỉnh sửa tập lệnh đó, nhưng điều đó có thể gây ra sự cố cập nhật, bạn sẽ phải hợp nhất nếu GRUB được cập nhật.

Giải pháp tốt hơn: ghi nội dung sau vào /etc/grub.d/50_goddamnit(tệp mới):

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

Về cơ bản, điều này sẽ chạy cuối cùng và là dòng cuối cùng trong /boot/grub/grub.conf, do đó ghi đè tất cả các mishigus ngớ ngẩn khác trong cấu hình mặc định.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.