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

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

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

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

ターミナルの多重化

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

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

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

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

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

byobuとscreenのインストール

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

$ sudo apt-get install byobu screen

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

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

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が問題なく動くことを確認したら、恒久的な設定をしていきます。

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

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

デフォルトのターミナルを使っている場合

デフォルトのターミナルでWSLを起動すると、ログイン時に.bash_profileを実行します。

そこで.bash_profileの最後に下記の2行を追加します。.bash_profileがない場合は新たに作成してください。

export SCREENDIR=~/.screen
byobu-launcher -T $TERM

これでWSLを起動すると自動的にbyobu+screenを実行してくれます。

WSLttyをターミナルとして使っている場合

WSLttyを

しかしWSLの場合は.bash_profileを実行してくれません。

といっても.bashrcの最後にbyobuの起動コマンドを追加すると、byobuが無限に起動してしまいます。

この環境ではざっと調べた感じではログイン時に1回だけコマンドを実行させることができなそうなので、私は手動でbyobuを起動するようにしました。

まず下記の2行を.bashrcに書き加えておきます。

export SCREENDIR=~/.screen
alias start-byobu='byobu-launcher -T $TERM'

これでWSLttyでWSLを起動したときに、手動で「start-byobu」を実行するようにしました。

実際の使い勝手

ログイン時の自動起動は設定できませんでしたが、それ以外については本物のLinuxを使っているのと同様の動作をするようです。

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

byobu+screenを使った状態

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

WSLttyの場合はbyobuを手動で起動する必要があるのが面倒ですが、それ以外はOKです。

ただ、若干キー入力への反応が鈍くなっている気もします。

コマンドラインをすごい勢いで編集したりすると、少しストレスを感じるかもしれません。

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

まとめ

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

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

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