前回は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
下記のような画面になるので、上下キーとスペースで操作します。
まず「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
次のように画面の下にステータスなどが表示されれば成功です。
ここで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つのセッションを動かしている状態です。
ターミナルにはWSLttyを使っています。
WSLttyの場合はbyobuを手動で起動する必要があるのが面倒ですが、それ以外はOKです。
ただ、若干キー入力への反応が鈍くなっている気もします。
コマンドラインをすごい勢いで編集したりすると、少しストレスを感じるかもしれません。
これを解消するにはSSHでWSLに接続して、PuTTY等の実績のあるターミナルを使う必要があるかもしれません。
まとめ
今回はWindows Subsystem for Linux (WSL)の使い勝手を向上すべく、byobuとscreenを導入してターミナルを多重化してみました。
本物のLinuxで設定するのに比べ、若干追加の設定が必要ですが、使い勝手は本物のLinuxとほぼ同様です。若干動作が遅いのが気になる点かもしれません。
次回はWSLにSSHサーバを導入してみます。