SSブログ

【Ubuntu】Virtualbox(Host : Windows Vista)上で動かすと半角/全角キーが連打(オートリピート)状態になる問題 (原因調査にshowkeyコマンド) [ubuntu]

以前から、私の環境でVirtualbox(Host :Windows Vista  Guest : Ubuntu)を動かすと、半角/全角キーが連打状態(オートリピート)になる問題があります。

それで、原因を調査してみました。

キーボードを押すと、キーコードが発生します。X windows上のキーコードは半角/全角は49です。

もっとプリミティブな部分で言うとスキャンコードを発生させます。全角/半角キーは押した時に0x29で離した時に0xa9を発生させます。

それで、キーを押した時にどんなコードが発生したかを調べるコマンドがshowkeyです。このコマンドは端末モードでしか動かないので、リカバリーモードで起動するかCtrl+Alt+F1でコンソールを切り替えて使って下さい。

showkey -sでスキャンコードを取得します。キーを入力しないで10秒間経つと自動的に終了します。

下記がそのスクリーンショットです。

SS-vbox-hankaku-006.JPG

初めの0x9cは、showkeyをEnterキーを押して起動した後Enterキーを離した時のスキャンコードです。そして、半角/全角キーをポンと押してすぐに離すのを、4回繰り返した結果が上図です。

本来、押した時の0x29がまず出て、次に離した時の0xa9が出なくてはなりませんが、逆になってます。と言う事は、一回押すと押しっぱなし状態。又押すと、今度は一度離してすぐに押す状態と言う事です。

すなわち、Virtualbox上のLinuxカーネルに渡ってすぐの所で既におかしいのです。でも、Virtualbox上ではないUbuntu 11.04では正常に出ます。

それならと言う事で、下記のURLのキーボード入力表示プログラムを使ってみました。

http://www.technoveins.co.jp/utility/keyindisp/index.htm

正常に動くと、下記のようになります。1234567890と入れました。

左側はスキャンコードや仮想コードで、右側はVB(Visual Basic)に渡されるコードです。詳しくは上記URLを見て下さい。

注目する点はAPIとVBの欄が同じだけの行あると言う事です。つまり、API上で受け取ればVBにも渡ると言う事です。

SS-vbox-hankaku-005.JPG

それでは、立ち上げて半角全角を一回押すと、

SS-vbox-hankaku-002.JPG

あれ?VBに渡されていません。

二回目押します。

SS-vbox-hankaku-003.JPG

今度は、VBに渡されました。以下、何度か押すと、

SS-vbox-hankaku-004.JPG

上記の矢印の部分が同時に出ているのですが・・仮想キーコードがAPI上とVB上で逆転してます。

showkeyと上記の結果を見ると、、異なるソフトで同じ様なことが起きている可能性があります。そうなるとVirtualboxの問題でもないということにもなります。

可能性としては、Virtualboxが使用しているC++ランタイムライブラリ(msvcp71.dllとか)か、SDLあたりが怪しいかも・・・Windowsは全く分らないので、ここら辺になると全く分りません。

結局、どこが悪いのか分りませんが、結構根深いところの様です。

それで、BugTicketは発行されてないかな~と思ったら、一応ありました。放置状態。

http://www.virtualbox.org/ticket/5543

 

<< 対処方法 >>

探したらありました。(上記のBugTicketを発行された方と同じかな??)

http://yushikun.at.webry.info/200906/article_3.html

xset -r 49 としてキーリピートを禁止してしまう方法です。

記事を見るとかなり古くから発生している問題の様です。Virtualbox 4.0.6でも、まだ直ってないなんて・・・

ともあれ、解決方法を見つけてもらって(^人^)感謝♪です。

 

 ←プログラマブルテンキー

    キー割り付けができるテンキー。これ便利そう。
    写真みたら結構カッコイイし・・・ 
    同じ事を入力する場合の事務作業なんかに向いてるかも。
    ただ、Ubuntuで使えるかな??

 


nice!(0)  コメント(2) 
共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。