J'ai une configuration à double démarrage Ubuntu - Windows 7, et j'aimerais que mon ordinateur portable démarre sous Windows 7 à moins que j'appuie sur la touche Maj tout de suite après le démarrage et que le menu Grub2 soit sélectionné. Ubuntu.
J'ai fait des recherches sur Grub2 et les options de etc/default/grub
et j'ai essayé de jouer avec des combinaisons avec les valeurs de GRUB_TIMEOUT
et GRUB_HIDDEN_TIMEOUT
, mais en vain. J'ai essayé de définir le GRUB_HIDDEN_TIMEOUT
plus élevé que le GRUB_TIMEOUT
en pensant que les deux comptes à rebours démarrent simultanément, mais non - GRUB_TIMEOUT
ne commence que lorsque l'autre est terminé.
Ce comportement est-il réalisable?
Si c'est le cas, comment?
Je pense que j'ai trouvé une résolution plus simple. Modifiez les lignes suivantes dans le fichier/etc/default/grub:
GRUB_HIDDEN_TIMEOUT = .
GRUB_TIMEOUT = .
Bien sûr, nous avons finalement lancé un update-grub. Cela fonctionne sur mon PC.
Ceci est pour Ubuntu 16.04.
J'ai résolu ce problème avec une petite combinaison de certaines des réponses trouvées ci-dessus, il n'est donc pas nécessaire de modifier 30_os-prober, en évitant les futures fusions lorsque le paquet grub est mis à jour ...
J'espère que ça aide.
Modification de certaines variables dans/etc/default/grub pour refléter ce que je veux;
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
Puis créé un nouveau fichier;
Sudo touch /etc/grub.d/50_hidemenu
Sudo chmod +x /etc/grub.d/50_hidemenu
l'a rempli de ce contenu;
#!/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
et mis à jour grub;
Sudo update-grub
À votre santé.
Dans Kubuntu 14.04, cela ne fonctionne pas. Si vous définissez GRUB_TIMEOUT= 0
, étrangement, après l’application de cette option et le redémarrage, le menu grub reste visible pendant 10 secondes.
La raison en est que, dans un autre script grub, il existe un élément de code qui définit grub_timeout sur 10 s'il a la valeur 0.
Voici comment je l'ai obtenu:
faire une copie des fichiers grub
et 30_osprober
!!! Quand quelque chose ne va pas, vous pouvez remettre les fichiers originaux.
Dans /etc/default/grub
GRUB_DEFAULT=4 #set this value to the OS you want to boot
GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=0
dans /etc/grub.d/30_os-prober
, il existe un morceau de code qui définit le délai d'attente grub sur 10s s'il est défini sur zéro dans /etc/default/grub
, je ne sais pas pourquoi les devs mettez-le là, mais cela évite de cacher le menu de vers.
set timeout_style=menu
if [ "\${timeout}" = 0 ]; then
set timeout=10 # I changed this from 10 to 0
Après ces modifications, exécutez Sudo update-grub
pour générer la nouvelle séquence de démarrage grub.
Je documente tous mes correctifs/mods Linux sur https://sites.google.com/site/marcshomesite/Home/linux-tuning
Pour démarrer automatiquement Windows sans avoir à sélectionner le menu GRUB, nous devons éditer le fichier /etc/default/grub
avec des valeurs similaires à celles-ci:
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
C'est toujours une bonne idée de faire des sauvegardes de ces fichiers avant de les éditer. Après avoir apporté des modifications, nous devons les activer avec
Sudo update-grub
Les valeurs de GRUB_DEFAULT dépendent de notre système individuel. Pour toujours démarrer Windows, vous pouvez également saisir le nom de l'entrée exactement comme il était affiché dans le menu Grub (par exemple, "Microsoft Windows XP Professional"
) au lieu du numéro de l'entrée.
Remarque importante: sur certaines machines, le menu GRUB ne peut pas être affiché en maintenant la touche gauche enfoncée. Shift au démarrage (voir bug n ° 425979 ). Par conséquent, il peut être judicieux de commencer par tester cela en démarrant Ubuntu (pas Windows) défini comme système d'exploitation par défaut. Ensuite, vous pourrez facilement annuler vos paramètres GRUB au cas où vous seriez affecté.
J'essayais de faire de même et j'ai trouvé une aide précieuse dans les forums Ubuntu, en particulier dans this thread.
En supposant que vous ayez bien fait avec /etc/default/grub
, en paramétrant correctement GRUB_TIMEOUT
et GRUB_HIDDEN_TIMEOUT
(je dirais respectivement 0 et 5) et même GRUB_DEFAULT
pour spécifier l'image par défaut à démarrer, voici la procédure à suivre pour que cela fonctionne correctement.
Ajouter ces lignes
GRUB_FORCE_HIDDEN_MENU="true"
export GRUB_FORCE_HIDDEN_MENU
jusqu'à la fin de /etc/default/grub
Sauvegardez votre /etc/grub.d/30_os-prober
et écrasez-le avec la version trouvée ici
Essaye-le! Pour afficher le menu, appuyez sur la touche SHIFT
Ce problème est lié à la configuration multi-OS et la modification du script est l’un des moyens de résoudre ce problème.
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
Sur Ubuntu 16.04, j'ai apporté les modifications suivantes. Bien sûr, vous devez être un utilisateur privilégié pour le faire.
La première modification est dans le fichier /etc/grub.d/30_os-prober
:
Sudo gedit /etc/grub.d/30_os-prober
quick_boot="1"
par quick_boot="0"
Ensuite, vous pouvez définir les valeurs de délai d'attente dans /etc/default/grub
à zéro ou à une autre valeur:
Sudo gedit /etc/default/grub
GRUB_HIDDEN_TIMEOUT=0
and GRUB_TIMEOUT=0
.La dernière étape consiste à mettre à jour grub
Sudo update-grub
Les modifications apportées au premier fichier sont dues au fait que, par défaut, si un autre système d’exploitation (par exemple Windows 10) est détecté, le délai d’expiration est toujours défini sur 10 secondes et ne peut donc pas être modifié par /etc/default/grub
. Ceci est accompli par une fonction nommée adjust_timeout
qui demande si quick_boot
est défini et si d'autres systèmes d'exploitation sont présents.
installer l'optimiseur de grub
Ajoutez-app-apt-repository au sud: danielrichter2007/grub-customizer
Sudo apt-get update Sudo apt-get install grub-customizer
Grub Customizer apparaît maintenant dans le menu Applications> Outils système.
Ou vous pouvez l'ouvrir depuis la ligne de commande.
gksudo grub-customizer
Shasteriskt, une alternative à la solution 'SHIFT' consiste simplement à créer un script qui effectue certaines opérations de déplacement pour vous. Ce que je veux dire, c'est créer un fichier appelé grub.bak
qui est une copie exacte de votre fichier grub.cfg
, la seule différence étant que la ligne set timeout=0
est remplacée par set timeout=10
. Créez un script Shell qui effectue un changement vous permettant de redémarrer en fonction de vos besoins. J'ai créé un script équivalent python qui répond à ces exigences, mais il doit bien sûr être appelé avec Sudo
. Je l'ai simplement mis dans /usr/bin
dans ma configuration sous forme de lien symbolique vers le script lui-même. Note: J'utilise Fluxbox sur Arch, donc je ne suis pas sûr qu'il y ait des différences entre ce script et Ubuntu, mais je pense qu'il devrait y avoir peu ou pas de modifications. Le script ressemble à:
#! /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'))
Le script détermine simplement si vous avez le menu à charger ou non (démarrage automatique ou non). Sur la base de ses conclusions, il vous demande si vous souhaitez l'activer ou non, puis vous demande si vous souhaitez redémarrer. Inversement, si vous voulez que cela fonctionne dans le sens inverse (c'est-à-dire sous Windows) et que Windows ait été configuré pour accéder aux fichiers sous Linux, vous pouvez également exécuter le même script dans cet environnement, si vous le souhaitez. J'espère que cela pourra aider.
RENDRE AUTOMATIQUEMENT LE MENU BOOT GRUB2
Pour une raison quelconque, la modification des paramètres GRUB_GFXMODE=640x480
dans Grub Customizer rend généralement le menu de démarrage visible:
Je ne sais pas pourquoi cela a fonctionné pour moi, mais cela a fonctionné sur mes deux ordinateurs, alors j'espère que cela fonctionnera pour vous aussi!
Ainsi, même si vous définissez GRUB_TIMEOUT sur 0, si vous avez un GRUB_HIDDEN_TIMEOUT, 30_os-prober définira le délai d’attente sur 10, que vous le vouliez ou non. D'autres solutions ici modifient ce script, mais cela pourrait entraîner des problèmes de mise à jour que vous devrez fusionner si GRUB est mis à jour.
Meilleure solution: écrivez ce qui suit dans /etc/grub.d/50_goddamnit
(nouveau fichier):
#!/bin/sh
echo "set timeout=0"
Fondamentalement, cela fonctionnera last et sera la dernière ligne de /boot/grub/grub.conf, remplaçant ainsi tous les autres mishigus idiots de la configuration par défaut.
J'avais le même problème sur un seul système de démarrage. Si GRUB_TIMEOUT était différent de zéro, le menu serait toujours affiché indépendamment de GRUB_HIDDEN_TIMEOUT. Si GRUB_TIMEOUT était égal à zéro, il resterait en veille quelques secondes plus tard, mais ni SHIFT ni ÉCHAP ne montrerait le menu.
Je l'ai corrigé en ajoutant une clause else à l'état de veille à la fin de adjust_time () dans 30_os-prober. Maintenant, s'il n'est pas interrompu, le délai est nul et il démarre sans menu, mais s'il est interrompu, je règle le délai à 10.
Cela semble en fait à l'envers puisque le sommeil devrait retourner 0 (faux) s'il n'est pas interrompu et 1 (vrai) s'il l'est, mais cela a semblé fonctionner pour moi.