web-dev-qa-db-ja.com

GRUBメニュー項目を追加して、ターミナルを起動します

OK、これは私が達成しようとしているものです:

GRUBに別のメニューオプションがあるため、選択してコマンドラインから直接起動できます。つまり、デスクトップマネージャーを使用せず、既存のメニュー項目(通常どおりUbuntuを起動する)をそのまま残します。

私は/etc/default/grubを調べましたが、そこには何もするように見えません。また、/boot/grub/grub.cfgは自動生成されるため、直接編集するのは良い考えではないと思います。

どうすればいいですか?何か案が?


更新:既存の回答(この質問が重複していたことを示唆)は廃止されました。正しい解決策については、下記の承認済みの回答をご覧ください。 (少なくとも16.04+の場合)

2
Dr.Kameleon

1

ファイル/boot/grub/grub.cfgを開き、「通常の」Ubuntuを起動するセクションを見つけます。

私にとってこれは:

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
}

そのセクションを新しいファイルにコピーします(textmode.txtなど)。

/etc/grub.dに移動して、ファイル40_customを作成(または編集)します。

次の「ヘッダー」をファイルにコピーします。

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

メニューエントリをtextmode.txtからファイルに追加しますが、いくつかの値を変更します(以下を参照)。

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
}

変更する必要がある値は次のとおりです。

  • menuentryテキスト:'Ubuntu'から'Ubuntu (text mode)'(またはメニューに表示したいもの)に変更します
  • linux行:linux /vmlinuz root=UUID=... systemd.unit=multi-user.target roに変更します。 UUIDが同じままであることを確認してください。
  • initrd行:/initrd.imgに変更します

/および/vmlinuzから現在のバージョンへの/initrd.imgディレクトリにシンボリックリンクがあることを確認してください。とにかく、これがデフォルトです。

走る

Sudo update-grub

このアプローチと この回答 の非常に似た質問に対する違いは、Ubuntuの最近のバージョンでは

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

に置き換える必要があります

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

recentが実際に何を意味するのかわかりませんが、systemdが導入されたときは16.04であると思います。

2
PerlDuck