これまで、Windowsで動作するUbuntuの起動とシャットダウン、それにログインについて取り上げたので、今回は「ログアウト」について取り上げる。ログアウトはWindowsでUbuntuを使うときにはほとんど意識することがないと思うが、実際にはログアウトに相当する処理が行われている。今回はそのあたりを説明する。→連載「WindowsでUbuntuをはじめる」のこれまでの回はこちらを参照

Ubuntuを起動

Ubuntuを起動する。スタートメニューから「Ubuntu on Windows」を選択すればよい。

  • スタートメニューから「Ubuntu」を起動

    スタートメニューから「Ubuntu」を起動

  • Ubuntu / Windows Terminal

    Ubuntu / Windows Terminal

「Ubuntu on Windows」を選択すると、上のようなターミナルアプリケーションが起動してくる。ここでUbuntuのコマンドを実行する。

Linux系OSの「ログアウト」とは?

UbuntuなどのLinux系オペレーティングシステムでは、システムの利用を開始するためにログイン画面でユーザー名とパスワードを入力して作業を始める操作を「ログイン」と呼び、逆にシステムの操作を終了してログイン画面に戻る作業を「ログアウト」と呼ぶことが多い。

Windowsではこの操作は「サインイン」および「サインアウト」と呼ばれることが多い。単語は異なるが意味するところはほとんど同じだ。

サーバに対してリモートからアクセスして操作を行う場合、「ログイン」と「ログアウト」の仕組みがわかりやすい。ログインでリモートサーバにアクセスして内部に入り、シェルなどが操作できる状態になる。ログアウトすると、リモートサーバとのアクセスが遮断される。

対するPCのように個人専用のデバイスを使っている場合、「ログアウト」の動きはわかりにくい。現在、ログアウトを明示的に行うことはあまりない。ログアウトしないままシステムを使い続けるか、時には再起動または電源を落とす操作とログアウトが同時に行われるので、ログアウトそのものを意識することがない。しかし、実際にはログアウトは行われている。

WindowsのWSL(Windows Subsystem for Linux)でUbuntuを使っている場合、ログアウトはさらに意識しにくい。ユーザーからすればターミナルが切り替わった程度の認識しか抱かないはずだ。しかし、こちらも実際にはログアウト処理が行われている。

Ubuntu/WSLのログアウト

Windowsで動作しているUbuntuのログアウトを確認してみよう。次のスクリーンショットはWSLで動作しているUbuntuだ。

  • Windows (WSL)で動作しているUbuntu

    Windows (WSL)で動作しているUbuntu

ここでexitと実行すると次のようになる。

  • ログインシェルでexitと実行

    ログインシェルでexitと実行

これがログアウトだ。Windowsで動作するUbuntuでは、wslコマンドを実行したりメニューからUbuntuを選択して起動してきたシェルがログインシェルになっている。このシェルを終了すると、Ubuntuを利用する足がかりがなくなるので、つまりログアウトということになる。

ログアウト後はWindowsのシェル(ここではPowerShell 7)に戻ってきているので、ここでwslコマンドを実行してUbuntuに再度ログインする。

  • wslコマンドを実行してUbuntuにログイン

    wslコマンドを実行してUbuntuにログイン

ここで、今度はlogoutと実行する。

  • ログインシェルでlogoutと実行

    ログインシェルでlogoutと実行

上の画面のように、ログアウトしていることを確認できる。exitでもlogoutでも同じようにログアウトできる。

Ubuntu/WSLのログインとログアウトをちょっとカスタマイズ

前回に説明したが、WindowsのWSLで動作するUbuntuのログインはちょっとわかりにくい。一見すると、新しくシェルを起動したようにしか見えないのだが、実際にはUbuntuの起動処理が行われ、そこにシェルを起動し、ターミナルからそのシェルに接続するという処理が行われている。その際、ユーザー名とパスワードによる認証処理は行われない。このような仕組みになっているため、ログインしたということがわかりにくい。

ただ、ちょっとした設定を行うとログインとログアウトを少しは明示的にできる。例えば、ログイン時には~/.bash_inputファイルが処理されるので、試しにこのファイルを作成して次のような設定を追加する。

~/.bash_login

cd ~
clear
source ~/.bashrc
run-parts /etc/update-motd.d

このファイルを作成したあとのログインは次のようになる。

  • ログイン前

    ログイン前

  • ログイン後

    ログイン後

ログイン前に描画していたものはクリアされ、代わりにUbuntuの仮想マシン起動時初のログイン時に表示されるメッセージが表示されていることを確認できる。~/.bash_loginの内容はログイン時に実行されるので、以降はログイン時のこのような挙動になる。こうしておくと、何も設定していないときと比べてログインした感じが出るようにはなる。

同じことはログアウトにも言える。ログアウト時には~/.bash_logoutが処理されるので、例えばこのファイルの最後に次の設定を追加する。

~/.bash_logout

clear
echo "Ubuntuからログアウトしました。"

ファイルに設定を追加したあとにログアウトすると、次のようになる。

  • ログアウト前

    ログアウト前

  • ログアウト後

    ログアウト後

このように、ログアウト前に表示されていた内容はクリアされ、指定したメッセージが表示されていることがわかる。このように設定しておくとログアウト時の処理がある程度わかりやすくなる。ログインとログアウトを明示的にわかるようにするにはこうしたやり方もある。

時代と共に変わる「ログイン」と「ログアウト」

PCにLinuxディストリビューションをインストールして利用するケースが多かった頃は「ログイン」と「ログアウト」という操作は体感しやすかったが、WSLの登場以降、ログインとログアウトは曖昧な操作になった感じがある。

しかし現在は、クラウドやVPSなどで提供されるLinuxにリモートログインする、WSLでUbuntuを動かして使うといった利用方法が広まっている。Linuxを使う際、こうした操作を連想することが多くなっていると思うので、ログインとログアウトが曖昧な感じになってしまうのも当然と考えられる。

本質的には、指定された認証処理をクリアして指定されたプログラムを起動するというのがログイン処理であり、ログイン時に起動されたプロセスを終了するのがログアウト処理だ。時代が変わるにつれて使い方は変わっていっているが、OSから見た本質は変わっていない。

WSLでUbuntuを使っているとあまり意識することはないが、実施にはログインやログアウトの処理が行われているということは把握しておいてもらえればと思う。

参考