【何を】screenコマンドで表示が崩れる問題【今更】


現象

screenコマンドで開始したセッション上で alsamixer を実行すると表示が崩れることに最近気が付いた。

取り合えず矢印キーでの音量設定はできるので構わず使っていたが、流石に気持ち悪いので調べてみた。

対応方法

~/.screenrc に(無ければ作成)以下追記

cjkwidth off

参考URL:
bug #46273: screen 4.3.1 broken nmon's display and alsamixer

try adding "cjkwidth off" to your ~/.screenrc and it will probably work again.

cjk の意味は以下参照。
CJK統合漢字 - Wikipedia

CJK統合漢字の名称は、中国語(Chinese)、日本語(Japanese)、朝鮮語(Korean) で使われている漢字をひとまとめにしたことからきている。

所謂全角文字って認識でいいのかな。どうもその文字幅設定機能に問題があるので off にしろってことらしい。

御託

そもそも、alsamixerncurses を利用している。
alsamixer(1) - Linux man page

alsamixer - soundcard mixer for ALSA soundcard driver, with ncurses interface

ncurses は以下参照。
ncurses - Wikipedia

ncurses は、端末に依存しない形式でテキストユーザインタフェース (TUI) を作成するためのAPIを提供するライブラリ。画面切り替えを最適化し、リモートシェルで使ってもレイテンシを最小に抑えるようになっている。

根源的には、screenコマンド + ncurses の問題。(alsamixer 云々ではなく)
経緯としては、GNU Screen 4.x 辺りのパッチに問題があり、表示に不具合が発生するようになったらしい。

UTF8環境のGNU Screen 4.1_4.2でNCursesの表示がおかしくなる - Narrow Escape
GNU Screen 4.2.0にしたら罫線表示がぶっ壊れた
GNU screenの日本語環境でncursesを使うと表示が乱れる - ksaitoの日記
Unicode の曖昧な文字幅問題 その2 - diary of a madman
GNU screen

っていうかバグだよね、これ。cjkwidth 機能を off にすることによる問題回避は小手先の対応に過ぎない。根本的な修正を望みたいところ。
英語圏にも日本人以上に日本語、文字コードレベルで詳しい方もいて驚かされる。

海外の技術者が日本語の「文字化け」を本気で解説、日本人顔負けの日本通っぷりが披露される - GIGAZINE

しかし、Linux の世界では非英語圏は蚊帳の外というか、あまり熱心に対応してくれないよな。ぶっちゃけ、物凄くどうでもいいです、ぐらいな感じだろうし。
とはいえ今回色々と調べていて良い勉強になった。
個人的に screenコマンドは常用しているが、セッションの作成に限定した単純な使い方だけだった。(無線LAN がよく切れるのでその対策)
奥が深いツールなのでもう少し勉強して使い込んでいきたいと思ったなり。

Man page of SCREEN
Screen User’s Manual