2729


CentOSで、ターミナルはputtyを使用しています。 矢印キーを敢えて無効にしたいのですが、方法はありますか？
できれば自分で作ったワーニングを出せるようにしたいのですが。


CC BY-SA 3.0
2014-12-28T07:06:31.743
2725
2015-01-23T01:56:30.247
2014-12-28T11:36:53.050
5835
5835
question
bash centos putty
ターミナルで矢印キーを無効にしたい


ログインシェルに bash を使われているのでしたら方法はあります。bash(と readline
library)にはキーバンドを変更する機能がありますので、それを使います。

[code]

    ignore_cursor_key () { echo "Can not use cursor key."; }
    
    bind '"\e[A":"\C-a\C-kignore_cursor_key\C-m\C-y"'  # cursor up
    bind '"\e[B":"\C-a\C-kignore_cursor_key\C-m\C-y"'  # cursor down
    bind '"\e[C":"\C-a\C-kignore_cursor_key\C-m\C-y"'  # cursor right
    bind '"\e[D":"\C-a\C-kignore_cursor_key\C-m\C-y"'  # cursor left
    
[/code]

以上を ${HOME}/.bashrc に追加して、`. ${HOME}/.bashrc` としてみて下さい。  
ただし、いくつか注意点があります。

  * `\e[A` などのキーコードがそちらの環境では異なっている可能性があります 
  * bash の行編集モードが emacs である必要があります。 
  * `Contorl-a`, `Control-k`, `Control-m`, `Control-y` キーをデフォルト以外の動作に割り当てていると期待通りには動作しません


CC BY-SA 3.0
2014-12-28T07:28:30.413
2729
2014-12-28T08:54:18.813
2014-12-28T08:54:18.813
2725
answer


いろいろなレベルでキーの無効化はできると思いますが、ターミナルでということなので、 bash の設定変更でよいでしょう。以下、bash
環境下での、「キーコードの調査」、「キー無効化」、「再バインド(メッセージ付き)」、「モード変更」 の説明をします。

## 矢印キーのキーコードの調査

bash シェル上で、

  * `Ctrl+V``↑`
  * `Ctrl+V``↓`
  * `Ctrl+V``→`
  * `Ctrl+V``←`

とキーを打ってみてください。 (環境によっては、`Ctrl+V` を二回押してください)

私の環境だと、以下のような出力が得られました。

[code]

    ^[[A^[[B^[[C^[[D
    
[/code]

（キーコードの意味の調査には、[このスクリプトを使う](https://ja.stackoverflow.com/questions/2305/character-
sequence%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E3%82%AD%E3%83%BC%E5%85%A5%E5%8A%9B%E3%82%92%E8%AA%BF%E3%81%B9%E3%81%9F%E3%81%84#2354)と良いでしょう。）

## 矢印キーのアンバインド

  * `~/.profile`
  * `~/.bashrc`
  * `~/.bash_profile`
  * `/etc/profile`

のどれかに、以下のコマンドを追加しておきます。

[code]

    bind -r "\e[A"
    bind -r "\e[B"
    bind -r "\e[C"
    bind -r "\e[D"
    
[/code]

設定を有効にするには、 `source 設定ファイル`、 もしくは、再度ログインします。  
なお、上下左右が効かなくなりますから、予め [vi
の練習](https://ja.stackoverflow.com/questions/1611/vivim%E3%81%A7%E5%AE%8C%E5%85%A8%E3%81%AB%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%AD%E3%83%BC%E3%82%92%E7%84%A1%E5%8A%B9%E5%8C%96%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84#2124)はしておきましょう。

## 矢印キーの再バインド

メッセージを出すには、先ほど編集をしたファイルのアンバインドを行った行の下に、以下の行を追加します。

[code]

    bind '"\e[A":"# [Up] key disabled.\n"'
    bind '"\e[B":"# [Down] key disabled.\n"'
    bind '"\e[C":"# [Right] key disabled.\n"'
    bind '"\e[D":"# [Left] key disabled.\n"'
    
[/code]

設定を有効にするには、 `source 設定ファイル`、 もしくは、再度ログインします。

## vi モードに移行する

晴れて上下左右が効かなくなったら、いよいよ、 vi モードにします。 (きっと必要でしょうそうでしょう)  
`~/.inputrc` に以下を追加してください。

[code]

    set editing-mode vi
    set keymap vi-command
    
[/code]

設定を有効にするには、 再度ログインします。


CC BY-SA 3.0
2014-12-28T08:35:41.737
2734
2014-12-28T08:35:41.737
2017-04-13T12:52:39.113
-1
4978
2725
answer


ターミナルソフトをPuttyから変更してもいいのであれば、  
[**RLogin** (http://nanno.dip.jp/softlib/man/rlogin/)
](http://nanno.dip.jp/softlib/man/rlogin/)ではキーボード設定で、キーコードが`UP`, `DOWN`,
`LEFT`,
`RIGHT`の設定を全て削除することで、送信しないようにすることができます。(送信されていないことは表示メニューのトレースウィンドウから確認しました。)  
これはサーバーごとに設定できます。

puttyとは`Back Space`キーの振る舞いが少々異なりますので、putty相当にするには同じくキーボード設定で  
KeyCodeに`BACK`, Assign Stringに`\0177`を設定する必要があります。

![KeyboardSetting](https://i.stack.imgur.com/UMFWq.jpg)

メッセージも表示されませんがこういう選択肢もありますという事で挙げてみました。


CC BY-SA 3.0
2014-12-28T09:27:25.130
2735
2014-12-28T09:27:25.130
728
2725
answer


readline(3) が使われているソフトウェアであれば、~/.inputrc に

[code]

    "\e[A": ""
    "\e[B": ""
    "\e[C": ""
    "\e[D": ""
    
[/code]

とか

[code]

    "\e[A": "\a# ↑キーが押されました"
    
[/code]

とか書いておけばいいんじゃないでしょうか。C-xC-r で再読み込みできます。プロセスの再起動とか必要ないですし、bash 以外でも使えます。bash
だけであっても .inputrc を

[code]

    $if Bash
    "\e[A": ""
    $endif
    
[/code]

とかしておけば、やっぱり bash の再起動とか .bashrc の再読み込みとかいりません。


CC BY-SA 3.0
2015-01-23T01:56:30.247
5118
2015-01-23T01:56:30.247
2521
2725
answer