showkey -s は CentOS 6.4 ではスキャンコードを表示しません。

showkey -s は CentOS 6.4 ではスキャンコードを表示しません。

私はvagrantでCentOS 6.4を実行し、vagrantを介してボックスにSSHを実行しています。私はしばらくバックスペースキーが正しく機能するように努めてきました(以下の説明:Centos端末はバックスペースとCtrl-hを正しく設定します。)

その一環として、バックスペースキーが送信するスキャンコードとは何か、Ctrl-Hが送信したスキャンコードとは異なるかどうかを調べたいと思います。そのために、指定されたとおりshowkey -sを使用してみました。ここ。しかし、これはうまくいかないようです。これがrootとして実行されたときにコンソールに表示される内容です。

[vagrant@localhost ~]$ sudo showkey -s
kb mode was UNICODE
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
sadfdsdfs[vagrant@localhost ~]$ sadfdsdfs

ご覧のとおり、showkeyはスキャンコードを提供するのではなく、私が入力したものをエコーするようです。何が起こっているのかというアイデアはありますか?

答え1

テストする最初の特別なデバイス(ハードコードされたリストから)を開くと機能しませんshowkey。これは端末です。これが使用するリストは次のとおりです(で引用)。バージョン 1.15):

static char *conspath[] = {
        "/proc/self/fd/0",
        "/dev/tty",
        "/dev/tty0",
        "/dev/vc/0",
        "/dev/systty",
        "/dev/console",
        NULL
};

最初の 2 つは SSH 経由で接続する場合の疑似端末です。後で仮想コンソールであることを確認しようとしないでください。しかし、最初のものはシェルに関連付けられた端末です。他の端末を開くと、予期しないエコーなどが発生します。

これを実行すると、showkey -sデバイスを開いて取得したファイル記述子を使用して端末I / Oモードを変更します(btw、サム、標準入力とは異なります。0)。その機能は次のとおりです。それ端末

stty -icanon -echo -isig

showkey端末の修正(サム)あなたは(おそらく)入力がなく、結果を端末に表示します。元の標準入力はshowkey依然として元の入力モードを使用し、更新された入力モードは他の端末に適用されます。

showkeyこの動作は仮想コンソールからのみスキャンコードを取得できるため、バグではありません。を入力しないと、tty0期待した結果は得られません。それできるフレンドリーで明確に言えば、有用な結果は得られません。

答え2

VagrantにTTY割り当てを強制するように指示してください。

$ vagrant ssh -- -ttt ...

ServerFaultというタイトルのQ&Aへのコメントでこれを見つけました。対話型コマンドには vagrant ssh を使用します。バックスペースキーは文字を削除しません。

関連情報