496記事目です。もうちょいで500記事ですね。何か考えないと。
今回の記事は例えば自作シェルを試しにchshしちゃったてへぺろ(・ω<)という人に向けた記事です。僕だね。
方針
デフォルトのシェルを変えるだけかと思いきや、chshは「ログインシェルを切り替えている」のです。ログインシェルについてあまり知りませんでしたが、実はログイン時に色々してるようです。具体的には/etc/profile
を読み込んだり/etc/profile.d
以下のスクリプトを実行したりしているようです。
ログイン処理ができないようなコマンドがログインシェルになってた場合、自動的にログアウトさせられます。つまり実はログイン自体には成功してるのです。即ログアウトさせられるだけで。
というわけで「ログインシェルを変える」という方針がたちました。まあ普通ですね。ただ、「ログインするにはchshしなければならない」「chshを使うにはログインしなければいけない」となりデッドロックになっています。困りましたね。
しかし安心してください。まだ手はあります。
リカバリーモードで起動する
まさに僕のためだけに作られたようなモードですね(違います)。
まず、リカバリーモード画面にします。こんな感じです。
「Advanced options for Ubuntu」にカーソルを当てます。
まだエンターをしないでください。まだやるべきことがあります。やってしまった人は冷静に再起動してこの画面に戻してください。
まずeを押します。すると立ち上げオプション画面になるので、「linux ~」と始まる行の「ro」という部分を「rw」に変えてください。こうしないとRead Onlyモードになってしまい、ファイルへ書き込みができません。
これを
こうします。
それから、この行の末尾に「locale.LANGUAGE=C」を加えておくとこの先の画面が文字化けしません。まあぶっちゃけ文字化けしたままでも作業できます。
さて、変えたらここでストップしてください。escキーを押したりしないでくださいね。ここでポイントとなるのがCtrl - xキーで起動です。今行った設定で起動するためにはCtrl-xを押さなければなりません。escを押すとデフォルト設定で起動となってしまいます。
Ctrl-xで起動するとこのような画面になります。
ルートユーザーでシェル起動
起動できましたか?ここまで来れば安泰です。「resume」や「clean」といった項目が並んでいれば成功です。この中で下の方のshellを選択してください。
するとルートユーザーとしてシェルが起動します。あとは「chsh -s /bin/bash ユーザー名」という感じで直して再起動すればログインできるはずです。
ルートユーザーのデフォルトシェルが変更になっていたケースについてはわかりません・・・どうやったら解消できるのでしょうかね。
終わりに
こないだ「fishをデフォルトシェルにするよりbashrcでexec fishしたほうがいいよ!」ときいて颯爽とやったところ無事にログインできなくなりました。自作シェル開発でハマった直後にまったくの別件なのに同じケースにはまってしまうとは・・・
参考
リアル脱出ゲーム ~デフォルトシェルがvimになってしまったら~ - Qiita Ubuntu のログインパスワードを忘れた - Qiita