GNU/Linux >> Linux の 問題 >  >> Linux

ターミナルでスクロールできないのはなぜですか?

端末を再初期化するには、単純な reset これを修正します。詳細とオプションについては、man reset


このAskUbuntuの質問に対する@James Henstridgeの回答は、端末が「カーソルアドレス指定」モードでスタックしているため、エラーを正しく識別しているようです.

彼の最初の解決策、コマンド $ tput rmcup 、動作しますが、説明の方法はあまりありません。それで、私はそれを理解しようとしました.

man tput

<ブロック引用>

tput ユーティリティは terminfo を使用します データベースを使用して、端末に依存する機能の値と情報をシェルで使用できるようにし (sh(1) を参照)、端末を初期化またはリセットするか、要求された端末タイプの長い名前を返します。

terminfo また、あまり有用な文書化もされていません。私が見つけることができる最も包括的な情報源は、tldp.org の記事です。明らかに terminfo さまざまな端末と、それらが持つコマンドと機能のデータベースです。おそらく、すべての Linux インストールに 1 つあるのでしょうか?では、異なる端末を使用できますか?

man terminfo そのファイルが /etc/terminfo/*/* にあることを示します 、しかしUbuntu 16.04では、そこにREADMEしか見つかりませんでした。実際のファイルは /lib/terminfo/*/* にあります;例えば/lib/terminfo/l/linux 、おそらくほとんどの読者にとって最も関連性の高いファイルはどれですか?これらのファイルは人間が判読できないため、わかりません。上記にリンクされた tldp.org の記事には、infocmp と記載されています。 ソースを表示するために使用できますが、そうではありません:

$ infocmp /lib/terminfo/l/linux
infocmp: couldn't open terminfo file /lib/terminfo/l/linux.

この記事では、ソース コード ファイル /etc/termcap についても言及しています。 と /etc/terminfo.src 、しかしこれらはUbuntu 16.04には存在しません。 /usr/share/vte/termcap*/ のセットを見つけました 人間が読める xterm を含むディレクトリ ファイル。これはすべて、私が使用しているデフォルトの Ubuntu である GNOME ターミナルに接続されていると推測する必要がありますが、その方法を理解するのにうんざりしています.

man terminfo のページ ただし、もう1つ役立つメモがあります。その「事前定義された機能」の下に「変数文字列」があります exit_ca_mode 'capname' ("機能名" だと思います) rmcup 説明 strings to end programs using cup 付き .説明はあまり役に立ちませんが、変数名は次のとおりです。これは、端末がスタックしている「カーソル アドレッシング モード」を終了する端末の機能を参照する必要があります。

つまり、$ tput rmcup tput を使用する必要があります terminfo にアクセスするには データベースを開き、現在の端末の exit_ca_mode を有効にします 能力 rmcup 、カーソルのアドレス指定モードを強制終了し、端末を通常のスクロール動作に戻します。


Linux
  1. サーバーが私のIPをブロックしたのはなぜですか?

  2. なぜ(そしてどのように)バイナリファイルでCatを使用したのですか?

  3. Mate-terminalの複数のインスタンスが同じPidを持っているのはなぜですか?

  1. バックグラウンドプロセスの出力を確認できるのはなぜですか?

  2. stdout への出力が非常に遅いのはなぜですか?高速化できますか?

  3. 端末での誤ったコピー/貼り付けを防止または中断するにはどうすればよいですか?

  1. Linuxターミナルでファイルをコピーする

  2. Linuxターミナルでファイルの名前を変更します

  3. 「tail -f /proc/$pid/fd/1」ができないのはなぜですか?