2013/05/18

Debian GNU/Linux 7.0(wheezy)で始めるGNU Screen 4.1

先日リリースされた Debian GNU/Linux 7.0(wheezy)では GNU Screen の開発バージョン 4.1 が採用されています。そこで改めて 4.1 で何がどう変わったのか確認してみたいと思います。

squeezeのscreenパッケージ

まずは一つ前のリリース squeeze における screen パッケージを確認します。

パッケージ名こそ 4.0.3-14 ですが、2008/06/01 時点の開発バージョンがバックポートされていますので縦分割やレイアウト、ウィンドウグループなどの新機能がすでに使えます。

次のようなパッチが適用されています。

  • anonscm.debian.org Git - collab-maint/screen.git/blob - debian/patches/00list
    # before doing anything else, advance to CVS HEAD
    01CVS
    # 01-08: fixes to configure, altering preprocessor macros etc.
    01configure_fix_alpha_vsprintf
    02configure_use_ncursesw
    03fully_expand_screenencodings
    04AUTOCONF
    05fix_osdef_include
    # 09   : Cherry-picked upstream commits
    09CHERRY_f6b50e17
    09CHERRY_97708d58
    09CHERRY_bb04008e
    # 10-49: "regular" code and documentation fixes
    10norootpassword
    11replace_doc_paths
    12kfreebsd_ctty
    13split_info_files
    14size_matters
    15manpage_typos
    16fix_gcc_warnings
    16fix_gcc_warnings_II
    17manpage_sessionname_warning
    18manpage_maxwin_limit
    19flowcontrol_lockup
    20defmonitor
    21manpage_nethack_activation
    22exchange_file_mode
    23exitcode_q_ls
    24option_parser
    25allow_symlink_sockdir
    26source_encoding
    27doc_sty_noenvpassing
    28blankerprg_callsemantics
    29infodoc_version
    30fix_fsf_address
    31upstream_cherries
    32misc_minor_fixes
    33increase_max_winmsg_renditions
    35screen_invoked_with_a_command
    40cjk_eastasian
    45suppress_remap
    # 50-99: experimental patches, new features etc.
    50EXP_tilde_expansion
    51EXP_session_creation_time
どのような変更かはファイル名である程度わかりますが、私が理解している範囲でいくつか説明します。
  • 2008/06/01 時点の CVS HEAD というと 開発版 1f2d8f1 でしょうか(01CVS)
  • root 権限で lock した時に解除できない問題を修正(10norootpassword)
  • 入力バッファの文字制限を 100 固定から定数定義 MAXSTR に変更して、その値を 256 から 768 に拡張(14size_matters)
  • SCREENDIR 環境変数で変更できるソケットディレクトリにシンボリックリンクを指定可能に(25allow_symlink_sockdir)
  • コメント中にある Unicode 合成文字を文字名称に置換(26source_encoding)
  • lockscreen 時のメッセージにホスト名も表示(31upstream_cherries)開発版 d128abd5 のようです。
  • Unicode における東アジア文字の曖昧な文字幅を全角/半角のどちらで表示するかという cjkwidth オプションを追加(40cjk_eastasian)これは 開発版 b8fd0c8 のようです。
  • source で読み込むファイルを指定するパスに ~ を使用可能にする(50EXP_tilde_expansion)これは 開発版 6f4b089 として反映されています。
  • screen -ls 時にセッション生成時刻を表示(51EXP_session_creation_time)たくさんのセッションを使い分けていて時間ベースで記憶を辿ることが多い人には便利かも知れません。

wheezyのscreenパッケージ

つぎに wheezy における screen パッケージを確認します。

パッケージ名のとおり 開発版 db59704 がベースとなっており、それにあわせてパッチも更新されています。
  • anonscm.debian.org Git - collab-maint/screen.git/blob - debian/patches/series
    # 01-08: fixes to configure, altering preprocessor macros etc.
    01configure_fix_alpha_vsprintf.patch
    03-fix-terminal-handling-on-kfreebsd.patch
    05fix_osdef_include.patch
    06-fix-parallel-build.patch
    # 10-79: "regular" code and documentation fixes
    10norootpassword.patch
    11replace_doc_paths.patch
    12kfreebsd_ctty.patch
    13split_info_files.patch
    14size_matters.patch
    16fix_gcc_warnings.patch
    22exchange_file_mode.patch
    23exitcode_q_ls.patch
    24option_parser.patch
    26source_encoding.patch
    32misc_minor_fixes.patch
    45suppress_remap.patch
    46fix-keybinding-typo-in-manpage.patch
    47screen-cc.patch
    48screen-ipv6.patch
    49long-usernames.patch
    50increase-max-TERM-length.patch
    51fix-utf8-status-padding-bug.patch
    #52fix_screen_utf8_nfd.patch
    53fix-startup-race-condition.patch
    58-show-encoding-hardstatus.patch
    59-fix-manpage-warnings.patch
    60-644788-screen-4.1.0-4.0.3-interoperability.patch
    # 80-99: experimental patches, new features etc.
    80EXP_session_creation_time.patch
こちらも理解できる範囲でいくつか説明します。
  • 組込 telnet で IPv6 をサポート(48screen-ipv6.patch)これと 47screen-cc.patch は Fedora のパッチを取り込んだもの ですね。
  • ユーザ名の最大文字数を 20 から 50 に拡張(49long-usernames.patch)
  • TERM 環境変数の最大文字数を 20 から 40 に拡張(50increase-max-TERM-length.patch)
  • captionhardstatus におけるマルチバイト UTF8 文字列の文字数計算の修正(51fix-utf8-status-padding-bug.patch)
  • エンコーディングを表示する文字エスケープ %e を追加(58-show-encoding-hardstatus.patch)
  • バージョン 4.0.3 のセッションを操作できるように(60-644788-screen-4.1.0-4.0.3-interoperability.patch)
squeeze の screen で生成したセッションを wheezy でも操作できるようにしているところが Debian らしいです。

この互換情報についてはリリースノートに注意書きがあります。

  • 第4章 Debian 6.0 (squeeze) からのアップグレード
     4.5.8. 特定のパッケージに対する特別な注意
      4.5.8.2. screen
    GNU Screen が screen クライアントと SCREEN サーバの間の通信に利用するプロトコルが squeeze 用と wheezy 用で変更されています。wheezy の screen パッケージにはパッチが適用されていて、screen クライアントとサーバのバージョンが違っていても最も重要な機能は確保されます。
    
    ...
    
    バージョンをまたがった接続でのこういった (無害な) 症状として、他に screen が "Message 40 of 12376 bytes too small" のようなメッセージを発することがあります。
    
    こういった問題はすべて、squeeze 用の screen で始められた screen セッションが終了すると消えます。
    
    wheezy 用の screen パッケージに付属する /usr/share/doc/screen/NEWS.Debian.gz も読んでください。
  • /usr/share/doc/screen/NEWS.Debian.gz
    screen (4.1.0~20120320gitdb59704-7) unstable; urgency=low
    
      In case you upgrade screen from 4.0.3 to 4.1.0 while running inside
      screen and you have to reconnect to that screen session (or any other
      screen session which has been started before the upgrade), there may be
      a few screen features not working until you exit the 4.0.3-started
      session and replace it with a 4.1.0-started session.
    
      Known issues of 4.0.3 to 4.1.0 interoperability as of now:
    
      * Terminal window resizing (WINCH signal) does not propagate to the
        screen session. Detach and reattach again instead to get the size of
        the terminals inside the screen session adjusted propely.
    
     -- Axel Beckert   Sun, 16 Sep 2012 12:48:44 +0200
カーネルなどの更新を反映するために OS を再起動すれば screen セッションも消えてしまうと思いますが、システムのアップグレードで置き換わった新しい screen で既存セッションにアタッチするなどの場合を考慮しているんでしょうね。

GNU Screen 4.1 の新機能

新機能やその使用例については過去にいくつかまとめていますのでそちらをご覧ください。(手抜きでスミマセン)

これらの記事で例示した設定を修正した screenrc のサンプルを用意しました。 ファイル単体で使用できるようにしていますので .screenrc という名前でホームディレクトリに設置して screen を実行すると次のような操作を行います。
  • 2つのウィンドウグループを作成
  • 7つのウィンドウを作成(内5つはシェル、残りはtopとecho-sd用)
  • 3つのレイアウトを作成
  • いくつかのウィンドウに stuff でコマンド文字列を送信
これはウィンドウ1で copy モードに、フォーカスのあるウィンドウ2で escape してコマンド入力待機状態になっているところです。これらのアクションがあったときに hardstatuscaption の配色などを変更して視覚的に状態が分かりやすくしています。なお設定ファイルでは echo-sd コマンドの呼び出しはコメントアウトしています。

おわりに

比較的パッケージ更新が保守的な Debian 本体でバージョン 4.1 が採用されたことによって、Ubuntu などの派生ディストリビューションでも次第に使えるようになっていくでしょうね。

新しめの技術を積極的に取り込む Fedora では 2011年5月 にリリースされた Fedora 15 で既にバージョン 4.1 が採用されていますが、それを基にする Red Hat Enterprise Linux(RHEL) はまだリリースされていません。Fedora 17/18 を基にすると言われる RHEL 7 は 2013年後半にリリースされるようです。

来年にはみなさんがお使いの Linux における GNU Screen はバージョン 4.1 がデフォルトという状態になっているでしょうね。

GNU Screen 4.1 はじめるなら今でしょ!

0 件のコメント:

コメントを投稿