Ubuntu Weekly Recipe

第291回 tmux/GNU Screenのラッパーコマンド,byobuを使いこなす(2013年版)

この記事を読むのに必要な時間:およそ 4 分

ステータスバーが無限に表示される場合

ターミナルの設定によっては,以下のように,ステータスバーが何行にも渡って繰り返し表示される状態になってしまうことがあります。

図3 ステータスバーがおかしな状態に陥った状態

図3 ステータスバーがおかしな状態に陥った状態

Ubuntuで第18回「VTE_CJK_WIDTH=1」を設定した環境や,PuTTYやTeraTerm,OS X純正ターミナルなどで「ユニコードのあいまいな文字幅」に関する設定を行った環境からSSH接続を行い,その先でbyobuを起動した(=ターミナルはVTE_CJK_WIDTH=1相当で動いているが,接続先のマシンではそうした事情を把握できない)場合に発生します。

これは,左下に表示されるの文字幅が誤認されてしまうためです。問題を遡るとユニコードやglibcの仕様レベルの問題に行き着いて解決が至難なため,byobuには環境変数としてVTE_CJK_WIDTH=1がセットされた状態で起動することで,自動的に回避する設定が入っています。ローカルマシン上ではこの設定だけで回避できるため問題にならないのですが,VTE_CJK_WIDTHはSSH経由では引き渡されないため注1⁠,SSH先のマシン側で,byobuを起動する前にVTE_CJK_WIDTH=1をセットするようにします。

端的には,.bashrcや.zshrcなどで,export VTE_CJK_WIDTH=1をセットしてください。この状態で起動すると,byobuの左下のロゴが,からに変化し,問題が発生しなくなります。

もしもこの状態(左下のロゴが⁠)でも現象が継続し,PuTTYを利用している場合は,PuTTYの設定でUTF-8を有効にしてください。

注1)
この設定を適切に引き渡すための合意がどこにもない(VTE_CJK_WIDTHはあくまでlibvteレベルの変数でしかなく,⁠あいまいな文字幅」をどのように扱うのか,という統一されたフラグ名称は決まっていない)ので,SSHDでAcceptEnvすることもできない,という深淵が横たわっています。いっそのこと日本語なら常に回避するパッチを投入してくれようか,という判断もあり得ますが,ではVTE_CJK_WIDTHを利用するユーザがどれだけいるのか,という別の問題もあり,あちらを立てればこちらが立たず,という状態にあります。

tmuxの代わりにScreenを使う

tmuxのキーバインドが好みではない場合,GNU Screenバックエンドの以前のbyobuに戻すこともできます。次のように操作してください。

$ byobu-select-backend

図4 byobu-select-backendによる設定変更

図4 byobu-select-backendによる設定変更

設定は各ユーザーの ~/.byobu/backendに保存されます。byobu-select-backendで設定する代わりに,byobu-screenもしくはbyobu-tmuxコマンドを用いて,明示的にバックエンドを指定して起動することもできます。

また,環境変数BYOBU_BACKENDに「tmux」⁠screen」を指定することでも変更できます。.bashrcや.zshrcを持ち歩いている場合は,この方法か,byobu-screen/byobu-tmuxをbyobuコマンドのエイリアスにするのが便利です。

表示されるインジケータの変更

byobuの下部には,各種ステータスが表示される欄があります。表示項目を変更するには,byobu-configを実行します。

図5 byobu-configメニュー。⁠エスケープシーケンスの変更」からキーバインドの変更を行うことができる。一番下のメニューは,byobu-enable/disableを呼び出す

図5 byobu-configメニュー。「エスケープシーケンスの変更」からキーバインドの変更を行うことができる。一番下のメニューは,byobu-enable/disableを呼び出す

「ステータス通知の切り替え」で設定を行うことで,画面下部に表示されるステータスバーの内容を変更することができます。

図6 ステータス通知の切り替え。screen-profile時代から極端な変化はない

図6 ステータス通知の切り替え。screen-profile時代から極端な変化はない

インジケータとして表示される各種項目は,⁠byobu-status-detail」を用いることで一覧することもできます。

図7 byobu-status-detailによる一覧。内部的にはvimとvimのfoldが利用される

図7 byobu-status-detailによる一覧。内部的にはvimとvimのfoldが利用される

ここであまりにもインジケータを増やしすぎると,ウィンドウが表示されるスペースがなくなってしまいます。もしも表示するインジケータが増えすぎて扱いにくい場合,~/.byobu/statusのtmux_left/tmux_right設定を編集してください。この設定項目は,byobuの「サブ表示」のためのものです。⁠Shift+F5」で切り替えることができます。

各種エージェントとの再接続

ssh-agentやgpg-agentといったエージェントソフトウェアを利用している場合,⁠byobu-reconnect-sockets」を実行することで,byobuをエージェントに再接続することができます。ショートカットとして,⁠Ctrl+F5」が割り当てられています(byobuでは,これらのファンクションキーベースのショートカットを利用する場合はエスケープ操作は不要です⁠⁠。

ssh -Aなどのエージェントフォワードをした状態でリモートログインした場合などに便利です。

複数のウィンドウを使いこなす

byobu上でエスケープ操作をした後に「Ctrl+F2」すると,既存のウィンドウを分割することができます。分割された各領域内を移動するには,エスケープ操作をした後にカーソルキーを用います。複数の操作を変更するような場合に便利です。

事前レイアウトの展開

あまりにも何度もウィンドウを分割すると,それぞれの表示範囲(ペイン)の狭さが気になってきます。そのような場合,エスケープ操作をした後に,次の操作を行うことでウィンドウを分割することができます。

  • Alt+1:even-horizontal/縦線で分割
  • Alt+2:even-vertical/ヨコに分割
  • Alt+3:main-horizontal/ヨコに分割(偏りあり)
  • Alt+4:main-vertical/縦線で分割(偏りあり)
  • Alt+5:tiled/タイル配置
  • Shift+F8:レイアウトのローテーション

図8 main-horizontalでレイアウトした例。大きなペインがひとつと,小型ペイン3つがその下に並んでいる

図8 main-horizontalでレイアウトした例。大きなペインがひとつと,小型ペイン3つがその下に並んでいる

また,⁠Ctrl+F8」で,レイアウトプリセットを呼び出すメニューを表示することができます(byobu-layout restore⁠⁠。これはエスケープ+Alt+1の並び替え機能と異なり,呼び出すことでウィンドウを複数に分割します。新しいレイアウトを創りだした場合,⁠Shift+Ctrl+F8」で保存しておくと,このメニューから呼び出すことも可能です。

「プリントスクリーン」

「Shift+F9」を押すと,現在表示されているウィンドウの『スクリーンショット』を撮ることができます。実際にはそのウィンドウの過去のバッファを含め,表示された文字をテキストファイルとしてエディタで開く機能です。

過去に実行したコマンドを確認したり,操作手順をドキュメントにまとめたりする際に便利です。

図9 ⁠プリントスクリーン」による履歴確認

図9 「プリントスクリーン」による履歴確認

ファンクションキーの無効化

ターミナルで操作するアプリケーションであっても,ファンクションキーの一部を利用することがあります。このような場合,⁠Shift+F12」を押すことで,一時的にbyobuのファンクションキー割り当てを無効にすることができます。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。