前回はWindows Subsystem for Linux (WSL2)で導入したUbuntu (20.04LTS)のターミナルをWindows Terminalに変更しました。
これでWSLを使う環境もだいぶ整ってきました。今回はさらに使いやすくするためにターミナルを多重化してみます。
WSL1 + Debian GNU/Linuxで同様のことをした記事はこちらになります。
ターミナルの多重化
ターミナルの多重化とは正しい表現ではないかもしれません。
やりたいことは一つのターミナル(ウィンドウ)で複数のセッションを動かし、切り替えられるようにするということです。
Windows Terminalを利用するとタブ機能やペイン機能であるていどこれに近いことはできます。
Linuxではscreenあるいはtmuxというソフトを使ってこのような多重化を行うことができます。
今回はscreenとbyobuというソフトで実現してみたいと思います。
byobuとscreenのインストール
早速必要なソフトをインストールしていきます。
$ sudo apt-get install byobu screen
私の環境の場合はすでにbyobuとscreenが入っていたらしく、何も追加でインストールされるものはありませんでした。
byobuとscreenが入っていなければ、上記コマンドで依存するパッケージも含めて必要なパッケージがインストールされます。
byobuの設定
それではbyobuの設定をしていきます。まずはbyobuにscreenを使うことを指定します。
これはbyobu-select-backendコマンドを使います。
$ byobu-select-backend
これで選択肢(tmuxかscreen)が表示されるので番号を入力します。私の場合はscreenを利用するので「2」を入力しました。
ここで「1」のtmuxを選択しても以降で説明している内容と同じよう設定は可能です。
続いて全般的な設定をbyobu-configコマンドで行います。
$ byobu-config
下記のような画面になるので、上下キーとスペースで操作します。
まず「ステータス通知の切り替え」を選択します。
ここでは画面の下部に表示する情報を選択します。
スペースキーでON/OFFを選択して選び終わったらTABキーで適用を選択します。
私は下記を有効にしました
- arch
- color
- cpu_count
- cpu_freq
- date
- disk
- distro
- hostname
- ip_address
- load_average
- memory
- session
- time
- uptime
- whoami
続いて最初のメニューに戻り「エスケープシーケンスの変更」を選択します。
これはbyobuの機能を呼び出すためのキーです。デフォルトはctrl+Aとなっているので、これをctrl+zに変更します(たんに「z」を入力したあとに「適用」を選択します)。
メインメニューに戻ったらTABキーでExitを選択して終了します。
環境の設定
byobuのバックエンドにtmuxを利用している場合はこの設定は不要です。
試したところ下記の設定が必要でした。
まずscreenが使用するディレクトリを作成します。
$ mkdir ~/.screen $ chmod 700 ~/.screen $ export SCREENDIR=~/.screen
この設定をしておかないとscreenを起動することができません。
テスト
それではbyobuを動かしてみましょう。
起動するには下記のコマンドを実行します。
$ byobu-launcher
次のように画面の下にステータスなどが表示されれば成功です。
ここでCtrl+zを押してから、cを入力してみましょう。
新しいセッションが生成され、新しいセッションに画面が切り替わったはずです。画面の下に「0 byobu-shell」「1 bash」という二つのセッションがあることが表示されています。
ここでCtrl+zを押してからnを入力してみましょう。
元のセッションに画面が切り替わったと思います。
こんな感じで1つのターミナル画面で複数のセッションを使うことができることがわかると思います。
これだけだとWindows Terminalのタブとあまり変わりませんが、画面を分割したり、分割した画面内でシェルを切り替えたりとより柔軟な操作が可能になります。
自動起動
byobu + screenが問題なく動くことを確認したら、ターミナルの立ち上げ時に自動的にbyobuが動くようにしておきましょう。
まず下記コマンドを実行します。
$ byobu-enable
これでホームディレクトリの「.profile」というファイルの最終行に下記の処理が追加されます。
_byobu_sourced=1 . /usr/bin/byobu-launch 2>/dev/null || true
これでログイン時にbyobuが自動実行される様になるのですが、screenの設定がされていないためエラーになってしまいます。
そこで下記コマンドを追加して、byobu-launchの実行前に環境変数SCREENDIRを設定するようにします。
$ sed –i –e ‘s/^_byobu/export SCREENDIR=~\/.screen\n_byobu/g’ .profile
byobuのバックエンドにtmuxを利用している場合はこの環境変数SCREENDIRの設定は不要です。
実際の使い勝手
実際に使ってみるとWSL2でも問題なく動作するようです。
例えば下記は画面を3分割して、3つのセッションを動かしている状態です。
ターミナルにはWindows Terminalを使っています。
実はscreen(byobu)はターミナルとの相性があることがあるのですが、Windows Terminalと組み合わせでも問題はないようです。
Byobu (screen)を使うもう一つの利点
WSL2をWindows Terminalを利用している場合、Windows Terminalを終了してしまうと、Windows Terminalで作業していた状況が全て失われてしまいます。
しばらくするとUbuntu自体も終了するようです。
再びWindows Terminalを起動しても、新たなログインする形になり、まっさらな状態になります。
SSH等でLinuxにリモート接続しているときに、ネットワークが落ちると全て終了してしまうのと同じ感じです。
しかしbyobu(というかscreenやtmux)はターミナルを閉じてもプロセス(bash)を活かしてくれます。
このためWindows Terminalを閉じてしまっても、Windows Terminalを再び起動すると閉じる前の状態で再開することができます。
これは地味に便利だったりします。
byobu(screen/tmux)を使っていると、リモート接続時にネットワークが切断してしまっても、再開できるのと同じです。
ただし、内部でWSL2(Ubuntu)が動き続けることになります。
メモリを節約したいなどで、Ubuntu自体を終了したいときには、Windows Terminalの終了ではなく、「exit」でbyobu内で立ち上げているシェルを全て終了するようにしてください。
まとめ
今回はWindows Subsystem for Linux (WSL2)の使い勝手を向上すべく、byobuとscreenを導入してターミナルを多重化してみました。
Windows Terminalで起動しているシェルでbyobuを有効にして見たところ、全く問題なく使用することができました。
Windows Terminalにもタブやペイン機能がありますが、byobunはそれとはまた違った便利さがあると思います。
次回はSSHでWSL2に接続してみたいと思います。
コメント