画面を使用しているときにスクロールしたり、Ctrl-A/Ctrl-E を使用できないのはなぜですか?

画面を使用しているときにスクロールしたり、Ctrl-A/Ctrl-E を使用できないのはなぜですか?

私はiTerm2を使用していますが、screenを使用しているときに次のことに気付きました:ssh -t [username]@[domain].edu 'screen -DR'

私は次のような奇妙な点に気づきました。

  • iTerm2 ウィンドウでマウスを使って上下にスクロールすることができません

  • Ctrl-A を使って行の先頭に移動できない

  • Ctrl + E を使って行末に移動できない

  • ~/.bash_profileがソース化されていない

他にもあるとは思いますが、screen セッションなしで ssh で接続したかのように動作させるにはどうすればよいのでしょうか?

答え1

あなたが言及したキーボード ショートカットは、Bash シェルによって実装されています。それらが機能しない場合は、何らかの理由で Bash をシェルとして使用していない可能性があります。ただし、Screen が SSH とは異なるシェルを起動するのは少し奇妙です。

  • ~/.screenrcファイルに「shell」または「defshell」コマンドが含まれているかどうかを確認します。
  • getent passwd $USER最後のフィールドで報告されたシェルが /bin/bash であるかどうかを確認します。
  • printenv SHELL(画面外) がレポート内容と一致するかどうかを確認しますgetent

一部のシステムでは、実際のログイン シェルが奇妙な設定になっている場合、shell bashscreenrc 設定で Screen に bash を使用するように手動で指示する必要があります。(たとえば、サーバーにユーザー アカウントのシェルとして /bin/sh が実際にあるが、sh の ~/.profile が /bin/bash を最上位で起動するように設定されている可能性があります。この場合、Screen によって起動された 'sh' シェルは ~/.profile を読み取りませんし、bash にジャンプしません。)


~/.bash_profileは、非ログインシェルには適用されません。Screenを起動した外部シェルからは「ログイン」シェルでした。Screen 内のシェルは通常は非ログインであり、~/.bashrc のみをロードし、「プロファイル」スクリプトはロードしないことが想定されています。これは、新しい Screen ウィンドウがそれぞれ、最初のシェルによって既に開始されているものを不必要に開始することを回避するためです。

エイリアスや関数などは代わりに に入れる必要があります~/.bashrcが、screenrc の「shell」設定を使用して、コマンドの前に を付けることにより、シェルを「ログイン」モードで強制的に起動することができます-(例 ) -bash


標準的な端末ベースのスクロールは、Screenやtmuxなどのマルチプレクサでは機能しません。これは部分的には設計によるものです。マルチプレクサは独自の端末エミュレータであり、テキストがそれほど重要ではない外部端末をより直接的に操作します。スクロールアウトそのまま消去され上書きされた

たとえば、Screen セッションに水平に分割された 2 つのペインがある場合、下のペインのテキストは、スクロールして表示されなくなるときに明示的に消去する必要があります。そうしないと、上のペインにゴミが残ってしまいます。(Screen セッションに垂直に分割された 2 つのペインがある場合、スクロールバックはどのように機能しますか?)

このため、Screen は通常、意図的に外部ターミナルを「代替画面」モードに切り替え、その間 iTerm2 のスクロールバックを無効にするように構成されます。screenrcaltscreen offの設定を使用してこれを防ぐことはできますが、iTerm のスクロールバックはあまり意味がないと期待してください。

これを実行する代わりに、 を使用して Screen の「コピー モード」に入り、Ctrl-a[特定のペインをスクロールできるようにすることができます。

関連情報