私は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 を使用します。バックスペースキーは文字を削除しません。。