Linuxの「端末」で最もウザいキーバインド「Ctrl+S」を無効化する方法

Linuxテクニック

Linuxの端末で「Ctrl+S」をタイプすると、出力がロックされてしまいます。キーを入力しても何も出力されなくなるので、戸惑う人も多いでしょう。知っていても、間違って押して出力が止まることもあります。

この場合、「Ctrl+Q」をタイプすれば出力が再開されます。なお、ロック中にキー入力をしていた場合、画面に出力されていないだけで、実際は入力されています

この「Ctrl+S」による画面出力の停止ですが、起源は「テレプリンター」にあります。かつて、コンピューターからの文字出力は「ディスプレイへ表示」ではなく「プリンターへ印字」されていました。プリントを一時的にストップしたい場合に「Ctrl+S」で停止し、「Ctrl+Q」で再開していたわけです。その後、ディスプレイへと置き換わった後も、今の端末ほどスクロール機能は充実していなかったことから、「Ctrl+S」で出力を止めて内容を確認し、「Ctrl+Q」を押して出力を再開するという形で使われました。

しかし、現代の端末アプリ(端末エミュレーター)はスクロール機能が充実していますし、画面外に流れた出力を検索することもできます。SSHでリモート操作している場合によく使われるByobuにも、スクロールや検索の機能があります。そのため、今や「Ctrl-S」を活用している人のほうが珍しいと思われます。

そこで、使わないなら端末での「Ctrl-S」を無効化してしまいましょう。そうすれば、間違ってタイプして出力が止まることもなくなります。以下の行を、「~/.bashrc」に追記するだけです。

if [[ -t 0 ]]; then
  stty stop undef
  stty start undef
fi

これにより、Bashがインタラクティブシェルとして起動され、標準入力がオープンしている時に、「stty stop undef」と「stty start undef」が実行されます。

[[ -t 0 ]]」は、標準入力がオープンしている時に「真」となります。これを指定しないと、環境によっては「scp」コマンドを実行した時に失敗してしまいます。

stty stop undef」が実行されると、「Ctrl+S」による出力停止が無効になります。

stty start undef」が実行されると、「Ctrl+Q」による出力再開が無効になります。「Ctrl+Q」を端末上で動作するテキストエディターなどに割り当てる場合、このコマンドも必要になる場合があります。ついでに記述しておくと良いでしょう。

更新履歴

2018-08-29 Ubuntu 18.04 LTSで動作を確認

Linuxテクニック
\シェアお願いします/
LFI

コメント

タイトルとURLをコピーしました