Sembunyikan menu GRUB2 KECUALI Anda menahan tombol Shift: bagaimana cara mewujudkannya?

32

Saya memiliki Ubuntu - Windows 7 dual-boot set-up, dan saya ingin memilikinya bahwa laptop saya akan boot Windows 7 kecuali saya menekan tombol Shift tepat setelah boot dan membuka menu Grub2 dari mana saya dapat memilih Ubuntu.

Saya meneliti tentang Grub2 dan opsi untuk etc/default/grubdan saya telah mencoba bermain-main dengan kombinasi dengan GRUB_TIMEOUTdan GRUB_HIDDEN_TIMEOUTnilai - nilai, tetapi tidak berhasil. Saya mencoba mengatur yang GRUB_HIDDEN_TIMEOUTlebih tinggi daripada GRUB_TIMEOUTpemikiran bahwa kedua hitung mundur mulai secara bersamaan, tetapi tidak - GRUB_TIMEOUThanya dimulai setelah yang lain dilakukan.

Apakah perilaku ini dapat dicapai?

Jika ya, bagaimana caranya?

Bez Hermoso
sumber
1
Cara saya melakukannya adalah saya menetapkan batas waktu ke 0 (Set menggunakan Grub Customizer). Saya tidak dapat memiliki menu GRUB2 yang muncul kecuali saya menahan shift tepat setelah bios saya, yang kemudian menampilkan menu. sudo add-apt-repository ppa: danielrichter2007 / grub-customizer sudo apt-get update sudo apt-get install grub-customizer
Ryan McClure
Ini pemahaman saya, ini adalah perilaku default untuk beberapa instalasi
RobotHumans
@RyanMcClure Saya mencoba mengatur batas waktu secara manual ke 0 tetapi menahan Shift kanan tidak memunculkan menu Grub2 sama sekali.
Bez Hermoso

Jawaban:

15

Saya pikir saya menemukan resolusi yang lebih sederhana. Ubah baris berikut dalam file / etc / default / grub:

GRUB_HIDDEN_TIMEOUT = 0,0

GRUB_TIMEOUT = 0,0

Tentu saja kami akhirnya menjalankan pembaruan-grub. Ini bekerja di PC saya.

sivitri
sumber
6
Gores itu. Ini tidak memberi saya menu grub tetapi saya juga tidak bisa mendapatkannya dengan menekan shift.
zorkerz
9

Ini untuk Ubuntu 16.04.

Saya memecahkan ini dengan sedikit kombinasi dari beberapa jawaban yang ditemukan di atas, jadi tidak perlu memodifikasi 30_os-prober, menghindari penggabungan di masa mendatang ketika paket grub diperbarui ...

Semoga ini bisa membantu.

Mengubah beberapa variabel di / etc / default / grub untuk mencerminkan apa yang saya inginkan;

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

Kemudian buat file baru;

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

mengisinya dengan konten ini;

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

dan grub yang diperbarui;

sudo update-grub

Tepuk tangan.

tux1c
sumber
Tidak bekerja untukku.
Menasheh
Saya hanya menguji ini di 16,04. Apakah Anda menggunakan versi yang berbeda?
tux1c
Mungkin 16.10. Anda benar, sudah seharusnya disebutkan itu.
Menasheh
Bekerja pada pemerasan Debian juga
Jocelyn delalande
7

Di Kubuntu 14.04, ini tidak berfungsi, jika Anda mengatur GRUB_TIMEOUT= 0, anehnya, setelah menerapkan ini dan me-reboot, menu grub tetap terlihat selama 10-an.

Alasan untuk ini adalah bahwa dalam skrip grub lain ada sepotong kode yang menetapkan grub_timeout menjadi 10 jika memiliki nilai 0.

Jadi beginilah cara saya membuatnya:

buat salinan keduanya grubdan 30_osproberfile !!! Ketika terjadi kesalahan, Anda dapat mengembalikan file aslinya

Di /etc/default/grub

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

GRUB_TIMEOUT=0

di /etc/grub.d/30_os-prober , ada sepotong kode yang menetapkan batas waktu grub menjadi 10s jika diatur ke nol /etc/default/grub, saya tidak tahu mengapa devs meletakkannya di sana, tetapi mencegah menyembunyikan menu grub.

set timeout_style=menu

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

Setelah perubahan ini, jalankan sudo update-grubuntuk menghasilkan urutan boot grub baru.

Saya mendokumentasikan semua perbaikan / mod linux saya di https://sites.google.com/site/marcshomesite/Home/linux-tuning

pengguna310707
sumber
Saya harap Anda tidak menempatkan spasi setelah =di GRUB_TIMEOUT= 0.
muru
4

Untuk mem-boot Windows secara otomatis tanpa harus memilih dari menu GRUB, kita perlu mengedit /etc/default/grubfile dengan nilai yang serupa dengan ini:

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

Itu selalu merupakan ide yang baik untuk membuat cadangan file-file ini sebelum Anda mengeditnya. Setelah melakukan perubahan, kita perlu mengaktifkannya dengan

sudo update-grub

Nilai untuk GRUB_DEFAULT bergantung pada sistem individual kami. Untuk selalu mem-boot Windows kita dapat dengan alternatif memasukkan nama entri persis seperti yang ditunjukkan pada menu Grub (mis. "Microsoft Windows XP Professional") Alih-alih nomor entri.


Catatan penting: di beberapa mesin, menu GRUB tidak dapat ditampilkan dengan menekan dan menahan kiri Shiftsaat boot (lihat bug # 425979 ). Oleh karena itu mungkin ide yang baik untuk terlebih dahulu menguji ini dengan mem-boot Ubuntu (bukan Windows) yang ditetapkan sebagai OS default. Maka Anda akan dapat dengan mudah membatalkan pengaturan GRUB Anda jika Anda terpengaruh.

Takkat
sumber
Bukankah itu membuat Ubuntu tidak bisa di-boot secara manusiawi, atau akankah ada cukup waktu untuk mencegat boot dan memilih Ubuntu ketika saya mau?
Bez Hermoso
1
@Shasteriskt Anda harus mengatur batas waktu ke nilai yang cukup lama untuk menekan tombol untuk memilih OS boot lain.
Takkat
Saya mengatur batas waktu ke 0 dan menahan tombol Shift tetapi menu masih tidak muncul. (Untung saya mengaturnya untuk boot ke Ubuntu di mana saya dapat mengedit pengaturan dengan cara mereka.)
Bez Hermoso
Singkatnya, perilaku yang saya butuhkan tidak dapat dicapai?
Bez Hermoso
@Shasteriskt: sayangnya pada beberapa mesin tekan-dan-tahan-kiri-SHIFT saat boot untuk memunculkan menu GRUB rusak (misalnya bug ini ). Anda mungkin beruntung jika ESC atau SHIFT + ESC berfungsi.
Takkat
4

Saya mencoba melakukan hal yang sama dan saya menemukan banyak bantuan di Forum Ubuntu, terutama di utas ini .

Dengan asumsi Anda melakukan hal yang benar dengan /etc/default/grub, pengaturan yang benar GRUB_TIMEOUTdan GRUB_HIDDEN_TIMEOUT(saya akan mengatakan masing-masing ke 0 dan 5) dan bahkan GRUB_DEFAULTuntuk menentukan gambar default untuk boot, inilah prosedur untuk membuatnya bekerja dengan cara yang benar.

  1. Tambahkan garis-garis itu

    GRUB_FORCE_HIDDEN_MENU="true"
    export GRUB_FORCE_HIDDEN_MENU
    

    sampai akhir /etc/default/grub

  2. Cadangkan /etc/grub.d/30_os-proberdan timpa dengan versi yang ada di sini

  3. Menguji! Untuk menampilkan menu tekan SHIFTtombol

Masalah ini terkait dengan pengaturan multi OS dan mengedit skrip adalah salah satu cara untuk memperbaikinya.

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
Dariopnc
sumber
1
Saya mencoba metode Anda dan gagal. Ubuntu 14.04 LTS
Mayukh Nair
1
Bagian mana dari file yang harus saya ubah? File 14,04 saya memiliki banyak perbedaan dengan file ini, jadi saya kira saya hanya harus membuat perubahan yang ditargetkan.
MakisH
@ MayukhNair: Saya menggunakan Ubuntu 14.04 dan metode ini berhasil. Saya melakukan yang berikut - 1. Set GRUB_DEFAULT = 0 di / etc / default / grub 2. Set GRUB_HIDDEN_TIMEOUT = 0 (tidak seperti apa yang Dariopnc katakan) 3. Cadangkan /etc/grub.d/30_os-prober Anda dan salin yang disebutkan di atas 30-os_prober file 4. sudo update-grub2
Pushpak Dagade
Catatan grub perlu diperbarui dengan sudo update-grubsetelah mengubah /etc/default/grubfile
Wilf
3

Di Ubuntu 16.04 saya telah melakukan perubahan berikut. Tentu saja Anda harus menjadi pengguna istimewa untuk melakukannya.

  1. Perubahan pertama ada di /etc/grub.d/30_os-proberfile:

    • Buka dengan sudo gedit /etc/grub.d/30_os-prober
    • Ubah quick_boot="1"kequick_boot="0"
    • simpan file
  2. Setelah itu, Anda dapat mengatur nilai batas waktu /etc/default/grubmenjadi nol atau nilai lain:

    • Buka dengan sudo gedit /etc/default/grub
    • GRUB_HIDDEN_TIMEOUT=0dan GRUB_TIMEOUT=0.
    • simpan file
  3. Langkah terakhir adalah memperbarui grub

    • sudo update-grub

Perubahan pada file pertama adalah karena pengaturan default adalah bahwa jika OS lain (misalnya Windows 10) ditemukan nilai batas waktu selalu diatur ke 10 detik dan karenanya tidak dapat diubah oleh /etc/default/grub. Ini dilakukan oleh fungsi bernama adjust_timeoutyang menanyakan apakah quick_bootdiatur dan apakah OS lain hadir.

AtoA
sumber
Akhirnya somzing zat vorks wiz 16.04!
JLTD
2

instal grub optimizer

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

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

Grub Customizer sekarang akan muncul di menu Applications> System Tools.

Atau Anda dapat membukanya dari baris perintah.

gksudo grub-customizer

gambar di dalam untuk opsi grub

masukkan deskripsi gambar di sini

pankaj sharma
sumber
3
Apa yang bisa dilakukan dengan mengedit etc/default/grub?
Bez Hermoso
3
@Shasteriskt: ini dapat berguna untuk penutur non-Inggris, orang-orang yang tidak terbiasa dengan baris perintah, atau orang-orang yang hanya ingin menggunakan komputer dan tidak berkutat dengan file konfigurasi.
Flimm
Mengapa ini dibalik? Tampaknya tidak menyelesaikan masalah; Saya telah mencoba grub-customizer(bukan 'pengoptimal') dan, saat bekerja, itu tidak membantu saya menyembunyikan menu GRUB kecuali tombol Shift ditekan.
Nickolai Leschov
1

Saya mengalami masalah yang sama pada sistem boot tunggal. Jika GRUB_TIMEOUT bukan nol, menu akan selalu muncul terlepas dari GRUB_HIDDEN_TIMEOUT. Jika GRUB_TIMEOUT nol, itu akan tidur selama GRUB_HIDDEN_TIMEOUT detik tetapi SHIFT maupun ESC tidak akan menampilkan menu.

Saya memperbaikinya dengan menambahkan klausa lain ke statemen tidur di akhir adjust_time () di 30_os-prober. Sekarang jika tidak terputus timeout adalah nol dan boot tanpa menu, tetapi jika terputus saya mengatur batas waktu ke 10.

Ini sebenarnya tampak mundur karena tidur harus mengembalikan 0 (salah) jika tidak terganggu dan 1 (benar) jika itu tetapi tampaknya bekerja untuk saya.

Mark Thueson
sumber
0

MEMBUAT MENU BOOT GRUB2 SECARA OTOMATIS TERLIHAT

Untuk beberapa alasan, mengedit GRUB_GFXMODE=640x480pengaturan di Grub Customizer biasanya membuat menu boot terlihat:

  1. Instal grub-customizer seperti di atas dan perbarui
  2. temukan Grub Customizer di GUI (bagi saya itu ada di System> Administration> ..., tetapi untuk beberapa itu adalah dana di bawah Applications> System Tools> ..)
  3. Buka Grub Customizer dan pilih Preferences> Advanced
  4. Pilih GRUB_gfxmode (640X480) - jika sudah dipilih, batalkan pilihannya, reboot, dan pilih lagi.
  5. silangkan jari Anda dan reboot!

Saya tidak tahu mengapa ini bekerja untuk saya, tetapi ini bekerja pada kedua komputer saya, jadi semoga itu akan bekerja untuk Anda juga!

Canadonia
sumber
0

Shasteriskt, salah satu alternatif dari solusi 'SHIFT' adalah membuat skrip yang dapat memindahkan operasi untuk Anda. Yang saya maksud adalah membuat file yang disebut grub.baksalinan persis grub.cfgfile Anda , dengan satu-satunya perbedaan adalah bahwa set timeout=0garis diubah menjadi set timeout=10misalnya. Buat skrip shell yang melakukan saklar yang memungkinkan Anda untuk reboot sesuai dengan kebutuhan Anda. Saya membuat skrip python setara yang memenuhi persyaratan ini, tetapi tentu saja harus dipanggil dengan sudo. Saya cukup memasukkannya ke /usr/bindalam pengaturan saya sebagai symlink ke skrip yang sebenarnya. Catatan: Saya menjalankan fluxbox di Arch, jadi saya tidak yakin apakah ada perbedaan antara skrip ini dan Ubuntu, tetapi harus ada sedikit atau tidak ada modifikasi, saya pikir. Script terlihat seperti:

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

Script pada dasarnya hanya menentukan apakah Anda memiliki menu untuk memuat atau tidak (boot otomatis atau tidak). Berdasarkan temuannya, ia menanyakan apakah Anda ingin menghidupkan atau mematikannya, dan kemudian bertanya apakah Anda ingin reboot. Sebaliknya, jika Anda menginginkannya bekerja sebaliknya (yaitu di Windows), dan Anda memiliki Windows yang diatur untuk mengakses file di Linux, Anda dapat menjalankan skrip yang sama di lingkungan itu juga, jika Anda mau. Semoga itu bisa membantu.

eazar001
sumber
0

Jadi, bahkan jika Anda menetapkan GRUB_TIMEOUT ke 0, jika Anda memiliki GRUB_HIDDEN_TIMEOUT, 30_os-prober akan menetapkan batas waktu ke 10, apakah Anda suka atau tidak. Solusi lain di sini mengedit skrip itu, tetapi itu dapat menyebabkan masalah pembaruan yang harus Anda gabungkan jika GRUB diperbarui.

Solusi yang lebih baik: tulis yang berikut ini di /etc/grub.d/50_goddamnit(file baru):

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

Pada dasarnya, ini akan berjalan terakhir dan menjadi baris terakhir di /boot/grub/grub.conf, dengan demikian menimpa semua mishigus konyol lainnya dalam konfigurasi default.

Fordi
sumber