GNU画面:-d -mを使用すると、奇妙なTERMCAPが表示されます。

GNU画面:-d -mを使用すると、奇妙なTERMCAPが表示されます。

実行方法に応じて、screen正しいTERMCAP情報があるかどうか。その症状は、端末で色が常に正しく表示されないことです(たとえば、ls、vim構文の強調表示など)。

これはうまくいきます:

$ echo $TERMCAP
  <empty output>
$ screen -S foo
$ screen -r foo
  <now I'm inside a screen session>
$ echo $TERMCAP
  <long output>
$ ls
  <nice pretty colors>

ここに問題があります。

$ echo $TERMCAP
  <empty output>
$ screen -d -m -S foo
$ screen -r foo
  <now I'm inside a screen session>
$ echo $TERMCAP
  <long output, but different than before>
$ ls
  <no colors ):>

これでこの問題を解決できます。 TERMCAPなどを手動で変更できます。

しかし、私は何が起こっているのか本当に理解したいと思います。可能であれば、「きれいな」解決策を見つけたいと思います。

何が起こっているのか知っている人はいますか?-d -m走りながら使うとどんな変化がありますかscreen

それが重要であれば、これはFreeBSDにあります。

ベストアンサー1

-d -mこのオプションを使用するときは、screen次から始めてください。優れたこの場合、TERM現在の変数に基づいて端末記述を改善する試みは行われない。TERM通常の起動(分離されていない)でのみ変数を見つけます。分離モードで開始されたセッションに接続すると、初期化を実行するのに遅すぎますTERM

この部分16.1 ウィンドウのtermcap項目の選択修正のいくつかはマニュアルで説明されています。

動作しない例は次のとおりです。

TERMCAP=SC|画面|VT 100/ANSI X3.64 仮想端末:\
        :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\]
        :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\]
        :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\
        :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\
        :li#24:co#80:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\
        :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\]
        :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\]
        :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\]
        :ti=\E[?1049h:te=\E[?1049l:k0=\E[10~:k1=\EOP:k2=\EOQ:\
        :k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:\]
        :k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\]
        :kh=\E[1~:@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~] :\
        :kI=\E[2~:kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:

そして良いものは次のとおりです。

TERMCAP=SC|画面|VT 100/ANSI X3.64 仮想端末:\
        :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\]
        :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\]
        :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\
        :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\
        :li#25:co#80:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\
        :cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\]
        :im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\]
        :ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\]
        :ti=\E[?1049h:te=\E[?1049l:us=\E[4m:ue=\E[24m:so=\E[3m:\]
        :se=\E[23m:md=\E[1m:mr=\E[7m:me=\E[m:ms:\]
        :Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:G0:\]
        :as=\E(0:ae=\E(B:\
        :ac=\140\140aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00:\
        :k0=\E[10~:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:\
        :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\]
        :F1=\E[23~:F2=\E[24~:kb=^H:K2=\EOE:kB=\E[Z:kh=\E[1~:\]
        :@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~:kI=\E[2~] :\
        :kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:km:

良い場合は、に設定されていることをscreen確認し、その説明に機能を追加してください。TERMxterm

screenFreeBSD では、termcap アプリケーションで想定される 1023 バイトの制限に説明を制限すると、termcap の配布に色がないため、この問題がわかります (追加設定は破棄されます)。他のプラットフォームで使用できます。説明するncursesから提供され、ここするカラー活用法を教えてください。違いは、使用されているライブラリによるものではありません。screenそれは用語の適用、FreeBSDでncursesを使用します。

$ ldd `which screen`
/usr/local/bin/screen:
    libncurses.so.8 => /lib/libncurses.so.8 (0x80086a000)
    libelf.so.1 => /usr/lib/libelf.so.1 (0x800ab6000)
    libutil.so.9 => /lib/libutil.so.9 (0x800ccb000)
    libulog.so.0 => /lib/libulog.so.0 (0x800edd000)
    libcrypt.so.5 => /lib/libcrypt.so.5 (0x8010df000)
    libc.so.7 => /lib/libc.so.7 (0x8012ff000)
    libmd.so.6 => /lib/libmd.so.6 (0x801698000)

代わりに違いは次のとおりです。

  • FreeBSDは、terminfoよりも優先的にtermcapデータベースを使用してncursesを構築します(ポートを使用してterminfoデータベースを取得できます)。
  • FreeBSDには、他の端末データベースと一致しないtermcapファイルがあります。いくつかの修正が行われましたが、まだ次のようないくつかの欠点があります。VT100sカラー改訂するコンソールと実際のxtermの間の違いをあまりTERM=xterm明確にします(もちろんxtermを使用している人を除く)。

やや皮肉なことに、フォーマットが複数行にscreen設定されていることがわかりますTERMCAP。これは4.2BSDと4.3BSDで使用されていますが、ハッシュされたデータベースを代わりに使用し、空白も削除して4.4BSD(約25年前)で使用されなくなりました(これはtermcapサイズの1023バイト制限と比較されます)。 FreeBSD以降1990年代にncursesに移行、この型は廃止され、このTERMCAP変数に依存するアプリケーションはほとんどありません。しかし、lsそれはそれらの一つです。

screen-T実際にオプションがありますしなければならない特定のtermcapエントリ(色を含む)を指定してこの問題を解決するのに役立つ試みがありますが、テストしても問題は解決しないようです。

追加資料:

おすすめ記事