web-dev-qa-db-fra.com

Ajouter un élément de menu GRUB pour démarrer le terminal

OK, voici ce que j'essaie de réaliser:

Avoir une option de menu distincte dans GRUB, de sorte que je puisse la sélectionner et démarrer directement dans la ligne de commande, c'est-à-dire: sans gestionnaire de bureau, mais en laissant l'élément de menu existant (pour démarrer Ubuntu comme d'habitude) intact.

J'ai examiné /etc/default/grub mais il ne semble rien y faire. Et aussi /boot/grub/grub.cfg qui est généré automatiquement, donc je ne pense pas que ce serait une bonne idée de le modifier directement.

Comment dois-je m'y prendre? Une idée?


Mise à jour: La réponse existante (suggérant que cette question était un doublon) était obsolète. Pour la solution correcte, veuillez consulter la réponse acceptée ci-dessous, qui fonctionne à merveille. (au moins pour 16.04+ comme il semble)

2
Dr.Kameleon

Un

Ouvrez le fichier /boot/grub/grub.cfg et trouvez la section qui démarre votre Ubuntu "normal".

Pour moi c'est:

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b8f25f1e-a169-4aaa-9f05-90e49359d865' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  b8f25f1e-a169-4aaa-9f05-90e49359d865
        else
          search --no-floppy --fs-uuid --set=root b8f25f1e-a169-4aaa-9f05-90e49359d865
        fi
        linux   /boot/vmlinuz-4.13.0-39-generic.efi.signed root=UUID=b8f25f1e-a169-4aaa-9f05-90e49359d865 ro  
        initrd  /boot/initrd.img-4.13.0-39-generic
}

Copiez cette section dans un nouveau fichier, dites textmode.txt.

Deux

Allez à /etc/grub.d et créez (ou modifiez) le fichier 40_custom.

Copiez "l'en-tête" suivant dans le fichier:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

Ajoutez le menuentry de textmode.txt au fichier mais changez quelques valeurs (voir ci-dessous):

menuentry 'Ubuntu (text mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b8f25f1e-a169-4aaa-9f05-90e49359d865' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  b8f25f1e-a169-4aaa-9f05-90e49359d865
        else
          search --no-floppy --fs-uuid --set=root b8f25f1e-a169-4aaa-9f05-90e49359d865
        fi
        linux   /vmlinuz root=UUID=b8f25f1e-a169-4aaa-9f05-90e49359d865 systemd.unit=multi-user.target ro
        initrd  /initrd.img
}

Les valeurs qui doivent être changées sont:

  • Le texte menuentry : changez-le de 'Ubuntu' à 'Ubuntu (text mode)' (ou à ce que vous aimiez apparaître dans le menu)
  • La ligne linux: remplacez-la par linux /vmlinuz root=UUID=... systemd.unit=multi-user.target ro. Assurez-vous que l'UUID reste le même.
  • La ligne initrd: remplacez-la par /initrd.img

Assurez-vous d’avoir des liens symboliques dans votre répertoire / entre /vmlinuz et /initrd.img et les versions actuelles. C'est par défaut, de toute façon.

Trois

Courir

Sudo update-grub

La différence entre cette approche et cette réponse à une question très similaire est que, dans les versions récentes d'Ubuntu, la ligne

linux   /boot/vmlinuz-3.8.0-31-generic root=UUID=... ro quiet splash $vt_handoff

doit être remplacé par

linux   /vmlinuz root=UUID=... systemd.unit=multi-user.target ro

Je ne suis pas sûr de ce que récent signifie réellement mais je suppose que c'est 16.04 quand systemd a été présenté.

2
PerlDuck