GRUBでGUIとCUIを選べるようにしようとしたらハマった話

あまりにトラップが多いので、備忘録として残しておく。

先に言っておくが、私はこの作業を完遂できなかった。
しかし、学ぶことは多くあったので、誰かの役に立てるかもしれない。

なお、私はGRUBをいじるのにGrub Customizerを使用している。
そのため、一部を除いて基本的にこのソフトを使った解説となる。

実現したいこと

まず前提として、環境とやりたいことをまとめる。

まずは環境。今回は実機への導入をしている。
機体: Dell Inspiron 11 3147
CPU: Intel® Celeron(R) CPU N2830
メモリ: 4GB
ストレージ:120GB SSD(換装済み)
OS: Ubuntu 20.04.3 LTS (64bit)(Japan Teamの日本語Remix版)

そもそも今回GRUBでCUIを起動したいのは、CUIだけですむ作業をGUIで行いたくないからだ。
私の環境は見ていただければわかるとおり、非常に貧弱だ。ストレージがHDDだった頃とかはマジの地獄だった。(なおWindowsは動くはずもないので、早々に見切りをつけた。)
Ubuntuにしたことでいくぶんか良くなったが、それでもGUIを使っている間はCPU使用率が20%前後に、YouTubeなんて開こうものなら天井に張り付くざまだ。

その状態で、例えばradikoやYouTubeの生配信の録画をしたらどうなるだろうか。
結果はお察しである。
そのため、リソースの1/5であったとしても開放してやりたいのだ。
なお、そんなもん[Ctrl]+[Alt]+[Fn]でttyに切り替えてやればいいというツッコミは無しで。終わってから気づいた()

そして、今回やりたいことは以下の通りだ。

  1. 起動時にエントリの選択画面を出す
  2. 通常のエントリに加え、CUIで起動するエントリも作る。

それでは、実際の作業の説明に移る。

起動時にGRUBの選択画面を出す

まずは「デフォルトのエントリーをn秒後に起動する」の設定を3に変更。

Grub Customizerの「一般設定」で変更する。

しかしここでいきなり引っかかる。再起動してもエントリの選択画面が出てこないのである。

原因をいろいろと探った結果、GRUB_TIMEOUT_STYLEという設定が悪さをしていることが分かった。
先の画面の「高度な設定」の中にある、GRUB_TIMEOUT_STYLE=hiddenのチェックを外せば、無事エントリが表示されるようになる。

上から2番目のチェックを外した。

CUIで起動するエントリを作る

標準であるUbuntuのエントリを「編集」からコピーして、新規作成から種類「その他」に設定してペースト。
linux行にsystemd.unit=multi-user.targetを追加してやればとりあえずCUIで起動はする。
しかしこれだと起動したときにシェルに入れない。
なので先の行の末尾にある$vt_handoffを削除。
この$vt_handoffは、起動後に入るシェルの番号を指定する変数らしい。
本来vt.handoff=1が代入されるはずなのだが、なぜかうまくいかないらしい。(おそらくスクリプトが他のエントリと別れているせい)
かといって直で書いてやるとなぜかシェルの文字がすべてボールドになる。
色々試したが、たぶん何も書かないのが正解だろう。

なお、この方法ではgrub-mkconfigを叩いた時に内容が更新されないので、カーネルを更新したときに手動でエントリを編集しなくてはならない。
よっぽど問題にはならないが、カーネルが更新されて忘れたころにapt autoremoveをかけて起動しなくなるオチが待っている。
回避するには/etc/grub.d/下のファイルやなんやを編集する必要があるようだが、よくわからなかったので触れなかった。

諦めた

vt.handoffをいじる段階で、「あれ、これって普通にGUIで起動してtty3に切り替えればよくね?」ということに気が付いて、さっさとやめた。ここまで来ないと気が付けなかったせいで無駄足を踏んだが、まあ勉強にはなったので良しとする。

なお、もし何らかの原因でX Windowが死んだ場合などは、起動時にEscapeキーを押すとGRUBのメニューに入れる。
「Advanced options for Ubuntu」の中にリカバリーモードで起動できるメニューがデフォルトで生成されているため、それを使うのがいいだろう。

コメント

タイトルとURLをコピーしました