DebianをWindows10上で動かす その4: ターミナルを多重化する

2019/04/13 更新

Windows10 バージョン1809 (October 2018 Update)で再インストールしたので、それに合わせて記事を見直しました。

前回はWindows Subsystem for Linux (WSL)で導入したDebian GNU/LinuxのターミナルをWSLttyに変更しました。

これでWSLを使う環境もだいぶ整ってきました。

今回はさらに使いやすくするためにターミナルを多重化してみます。

ターミナルの多重化

ターミナルの多重化とは正しい表現ではないかもしれません。

やりたいことは一つのターミナル(ウィンドウ)で複数のセッションを動かし、切り替えられるようにするということです。

WSLは軽量なのでいくつもターミナルを開いても大丈夫なのですが、画面も占有してしまうので本当に同時に画面を見る必要がなければ切り替えて使った方が便利です。

Linuxではscreenあるいはtmuxというソフトを使ってこのような多重化を行うことができます。

今回はscreenとbyobuというソフトで実現してみたいと思います。

byobuとscreenのインストール

早速必要なソフトをインストールしていきます。

$ sudo apt-get install byobu screen

依存関係があるパッケージが同時にインストールされるので私の場合は30個ぐらいのパッケージがインストールされました。

インストールはこれだけです。

byobuの設定

それではbyobuの設定をしていきます。まずはbyobuにscreenを使うことを指定します。

これはbyobu-select-backendコマンドを使います。

$ byobu-select-backend

これで選択肢(tmuxかscreen)が表示されるので番号を入力します。

続いて全般的な設定をbyobu-configコマンドで行います。

$ byobu-config

下記のような画面になるので、上下キーとスペースで操作します。

byobuの設定

まず「Toggle status notifications」を選択します。

ここでは画面の下部に表示する情報を選択します。画面が乱れますが、スペースキーでON/OFFを選択して選び終わったらTABキーでApplyを選択します。

ステータス表示の設定

私は下記を有効にしました

  • arch
  • color
  • cpu_count
  • cpu_freq
  • date
  • disk
  • distro
  • hostname
  • ip_address
  • load_average
  • memory
  • session
  • time
  • uptime
  • whoami

続いて最初のメニューに戻り「Change escape sequence」を選択します。

これはbyobuの機能を呼び出すためのキーです。デフォルトはctrl+Aとなっているので、これをctrl+zに変更します(たんに「z」を入力したあとにApplyを選択します)。

エスケープキーの設定

メインメニューに戻ったらTABキーでExitを選択して終了します。

環境の設定

試したところ下記の設定が必要でした。

まずscreenが使用するディレクトリを作成します。

$ mkdir ~/.screen
$ chmod 700 ~/.screen
$ export SCREENDIR=~/.screen

続いてbyobuが使用するファイルを作成します。これはやらなくてもbyobuは動作するようですが、やっておかないと何かエラーが表示されます。

$ sudo touch /var/run/utmp
$ sudo chown root.utmp /var/run/utmp
$ sudo chmod 664 /var/run/utmp

テスト

それではbyobuを動かしてみましょう。

起動するには下記のコマンドを実行します。

$ byobu-launcher

次のように画面の下にステータスなどが表示されれば成功です。

byobuの実行

ここでCtrl+zを押してから、cを入力してみましょう。

新しいセッションが生成され、新しいセッションに画面が切り替わったはずです。画面の下に「0 byobu-shell」「1 bash」という二つのセッションがあることが表示されています。

セッションの切り替え

ここでCtrl+zを押してからnを入力してみましょう。

元のセッションに画面が切り替わったと思います。

セッションの切り替え

もっといろいろ操作があるのですが、こんな感じで1つのターミナル画面で複数のセッションを使うことができることがわかると思います。

自動起動

byobu + screenが問題なく動くことを確認したら、ターミナルの立ち上げ時に自動的にbyobuが動くようにしておきましょう。

ここのセクションの設定では/var/run/utmp関連でエラーが表示されます。

このエラーを消すには/var/run/utmpを作成する必要があるのですが、sudoコマンドが必要で自動化できないので、このエラーは無視することにしました。

ターミナルを開いてbashが実行されると.bash_profileが実行されます。

そこで.bash_profileの最後でbyobuを実行するようにします。さらにbyobuの実行前に言語の設定とscreenの設定をしておきます。

結果的に下記のような内容の.bash_profileを作成します。.bash_profileがない場合は新たに作成してください。

export LANG=ja_JP.UTF-8
export LANGUAGE=ja
export LC_ALL=ja_JP.UTF-8
export LC_CTYPE=ja_JP.UTF-8
export SCREENDIR=~/.screen
byobu-launcher

これでターミナル(デフォルトのターミナルやWSLtty)を起動すると自動的にbyobu+screenを実行してくれます。

LANG等の言語の設定は最初は.bashrcに書いておけば良いと思ったのですが、byobu起動後に文字化けすることがありました。

byobu-launcherを実行する前にLANG等の設定をしておいた方が良いようです。

実際の使い勝手

実際に使ってみると本物のLinuxを使っているのと同様の動作をするようです。

例えば下記は画面を3分割して、3つのセッションを動かしている状態です。

byobu+screenを使った状態

ターミナルにはWSLttyを使っています。

気になることといえば、WSLttyの場合は、若干キー入力への反応が鈍くなっている気もします。コマンドラインをすごい勢いで編集したりすると、少しストレスを感じるかもしれません。

これを解消するにはSSHでWSLに接続して、PuTTY等の実績のあるターミナルを使う必要があるかもしれません。

Byobu (screen)を使うもう一つの利点

WSLはターミナルを閉じてもプロセスがそのまま維持されるようになりました。

このためbyobu(screen)を利用してる状態でWSLのターミナルを閉じ、再度byobu(screen)を立ち上げると、ターミナルを閉じたときの状態に復帰します。

例えばバックグランド時間がかかる処理がある場合は、その処理を開始したらターミナルを閉じてて、あとで結果を核にすることができるようになります。

ターミナルを閉じたときにプロセスを残したくない場合は「exit」で終了するようにしてください。「exit」は2回(byobuからのexitとシェルからのexit)必要です。

まとめ

今回はWindows Subsystem for Linux (WSL)の使い勝手を向上すべく、byobuとscreenを導入してターミナルを多重化してみました。

本物のLinuxで設定するのに比べ、若干追加の設定が必要ですが、使い勝手は本物のLinuxとほぼ同様です。若干動作が遅いのが気になる点かもしれません。

次回はWSLにSSHサーバを導入してみます。