もう20年ぐらいGNU screenを使っています。カスタマイズ自体はあまりしていない(プリフィックスキーを変える程度)のですが、利用上のいろいろな知見があるので、ここにまとめてみます。
一つのセッションを使いまわす
screenは一つのセッションに同時に接続することができます。ある場所でscreenを接続したまま、他の場所からsshでつないでscreenのセッションにつなげるといった使い方ができます。セッションがひとつだけの場合は以下のコマンドでできます。
screen -x
複数セッションがある場合にはセッション名も引数として与える必要があります。
ACL等を設定すれば異なるユーザーが同時にattachできるので、かつてはペアプログラミングに利用していたりしました。
detach操作は通常と変わりなくC-a d (コントロール+a dの順に押す。以下screenのprefixはC-aと表記)でできます。他の端末からattachしている状態は維持されます。
仮想端末のサイズが変わった時
自分は普段、80x25サイズの仮想端末を使っているのですが、同時にattachした際にscreen上のサイズと仮想端末のサイズとが異なってしまう場合があります。今現在使っている端末にサイズを合わせるには以下を入力します。
C-a : fit
他のattachしている端末が表示しているウィンドウ以外は、基本的に切替時に表示端末のサイズに合わせるような挙動をするので、そう頻繁には使わない機能です。
コマンドラインからのプレフィックススキーの変更
普段どんなプレフィックスキーを使うかは人によるところですが、C-aのままという人は少数派ではないかと思います。例えばスマホアプリのJuice SSHなど入力できない・しづらいものを使っている場合は、コマンドラインから変更することが可能です。
screen -X escape ^zz
-Xオプションは生きているscreenセッションに指定したscreen内部コマンドを実行させるものです。この例ではプレフィックスキーがC-zに変更されます。本物のC-zを入力するにはC-z zを入力します。
この変更はセッション全体に影響するので、他の端末からattachしている場合もプレフィックスが変わってしまう点に注意が必要です。
10を超えるウィンドウへの切り替え
screenはselect(2)を使って端末の入出力を監視しています。仕様上ビルド時にMAXWINマクロで定義した数を超えることはできませんが、通常10を超える数のウィンドウを扱えます。
しかしながら直接指定のウィンドウに切り替えるショートカットはC-a 0 〜 9 までしかありません。メニュー形式で対話的に切り替える手段が用意されているので、そちらを使うほうが容易でしょう。
C-a "
他の記事では、C-a : select (C-a ')を使う方法も紹介されています。
[memo] GNU screen で10以上のウィンドウ番号の画面に飛ぶ方法
ウィンドウ番号の付け替え
たくさんのウィンドウを作っていると、割り当てられた番号を変更したくなる時があります。その場合、numberコマンドを使います。
C-a : number 数値
これを実行すると、今表示されているウィンドウの番号が入力した値に変わります(変えられた方のウィンドウ番号と入れ替わる)。
こちらの記事[memo] GNU screen でウィンドウの番号を変更するにも同様の内容が解説されています。
タイトルをつける
特に設定をしていないと、ウィンドウのタイトルがshell名になります。自分はだいたい特定の番号のウィンドウに用途を定めて使っているのですが、タイトルもそれに沿うように変更することでよりわかりやすくなります。変えるコマンドは以下です。
C-a : title
環境変数の上書き
screenの環境変数は基本的に最初に起動した時のものを継承します。attach/detachを繰り返していると、「この変数の値はこうなってほしい」という事態によく遭遇します(DISPLAY, SSH_AUTH_SOCK等)。これはsetenvコマンドで変更できます。
C-a : setenv
最後に
とりとめもなく自分がよく行っている操作について書いてみました。他に思い出したら追記するかもしれません。