川口です 特定機種のハードウェアの問題っぽい話ですが, キーボードが変だという話です
● 利用環境 機種は HP ML110 G6 (core i3版),PS/2ポートに mouse/keyboardを挿しています (但し実際には搭載されている ServerEngines の仕様で,内部的には USB keyboard/mouse に変換されているので,OSからは USB kb/mouse に見えています). FreeBSD 8-stable/amd64, Xorg7.5を hald/dbus で動かしている状態です. 格安で出回っているので買ってみた方も多いのではないかと. http://h10010.www1.hp.com/wwpc/jp/ja/sm/WF06b/15351-15351-241434-3328424-3328424-3984625-4125040.html ● 問題の挙動 コンソールでXorg起動し,キーボードで物書きなどを していると結構フラストレーションがたまります. 挙動は,一見正常に動作しているように見える. しかしctrl,shift などのモディファイヤに問題挙動あり: * ctrl + l などは単発では正常 * ctrl キーを押しっ放しで連続でキー入力をする場合に問題あり 1. ○ Ctrl[押下] "l" "a" "n" "n" "p" Ctrl[解放] (ほぼ連続的(各キー操作間隔0.5s以内くらい)で実施) 2. × Ctrl[押下] "l" "a" "n" [数秒の間] "n" "p" Ctrl[解放] 3. ○ Ctrl[押下] [数秒の間] "l" "a" "n" "n" "p" Ctrl[解放] (ctrl後,最初のkeyeventまでは多少待っても大丈夫) どうも,「ctrl を押して最初の "1キーイベント" はきちんと待つ」のですが, ctrl を押してから 1キー以上のイベントが生じると, その一連の(ほぼ連続した key press)イベントの後については, 約1秒程度無操作状態が続くと, (押しっ放しにしている)モディファイヤの key release が発生してしまうようです. (後ろに xev で見た挙動も付記します) なお,shift等も全く同様の挙動になります. # あまりローカルでは使っていなかったので細かく見ませんでしたが, # ML115 G1 なんかも似たような挙動だった気がします emacs とかで作業するには死ぬほどやりにくいですね. ● 質問 a. 他の機種でこんな挙動見られたことのある方はいますか? (おそらくは ServerEngines の所為だろうと思ってますが) a'. 他の OS でも生じる問題なのか,それとも FreeBSD 固有の問題なのでしょうか? b. 何か解決する手段はありますでしょうか? (普通の USB keyboard 使ってみる? 今は手持ちがないので試していません) ● 補足説明 xev(1)で見てみた際の出力と対応させて挙動を説明します. (1) Ctrl key 押下 (2) 数秒待ってから "l" key 押下 (3) ほぼ連続操作で "l" を2回押す (それぞれCtrl+Lと認識される) (4) Ctrl キーを押したまま待っていると約一秒後に… 勝手に Ctrl キーの KeyRelease 発生 (5) この時点で,実際には Ctrl キーは押し続けた状態だが, ctrl は release されていると Xorg は認識しているので, "l" キーを押すと ctrl + L ではなく 普通の"l"キー単独操作 とアプリケーションに認識される (6) 物理的に Ctrl キーを解放しても当然 KeyRelease は発生しない. もう一度 Ctrl キーを押し直すとまた(1)からの動作になる. (押し直せば問題ないともいえる) (1) KeyPress event, serial 30, synthetic NO, window 0x2800001, root 0x117, subw 0x0, time 3457661, (168,99), root:(172,309), state 0x0, keycode 66 (keysym 0xffe3, Control_L), same_screen YES, XKeysymToKeycode returns keycode: 37 XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False (2) 数秒待ち KeyPress event, serial 30, synthetic NO, window 0x2800001, root 0x117, subw 0x0, time 3463086, (168,99), root:(172,309), state 0x4, keycode 46 (keysym 0x6c, l), same_screen YES, XLookupString gives 1 bytes: (0c) " " XmbLookupString gives 1 bytes: (0c) " " XFilterEvent returns: False (3) KeyRelease event, serial 30, synthetic NO, window 0x2800001, root 0x117, subw 0x0, time 3463238, (168,99), root:(172,309), state 0x4, keycode 46 (keysym 0x6c, l), same_screen YES, XLookupString gives 1 bytes: (0c) " " XFilterEvent returns: False (4) KeyRelease event, serial 30, synthetic NO, window 0x2800001, root 0x117, subw 0x0, time 3464734, (168,99), root:(172,309), state 0x4, keycode 66 (keysym 0xffe3, Control_L), same_screen YES, XKeysymToKeycode returns keycode: 37 XLookupString gives 0 bytes: XFilterEvent returns: False (5) KeyPress event, serial 30, synthetic NO, window 0x2800001, root 0x117, subw 0x0, time 3472238, (168,99), root:(172,309), state 0x0, keycode 46 (keysym 0x6c, l), same_screen YES, XLookupString gives 1 bytes: (6c) "l" XmbLookupString gives 1 bytes: (6c) "l" XFilterEvent returns: False KeyRelease event, serial 30, synthetic NO, window 0x2800001, root 0x117, subw 0x0, time 3472390, (168,99), root:(172,309), state 0x0, keycode 46 (keysym 0x6c, l), same_screen YES, XLookupString gives 1 bytes: (6c) "l" XFilterEvent returns: False (6) (key event なし) ● dmesg抜粋(ServerEngines関係) ugen1.3: <ServerEngines> at usbus1 ukbd0: <ServerEngines SE USB Device, class 0/0, rev 1.10/0.01, addr 3> on usbus1 kbd2 at ukbd0 ums0: <ServerEngines SE USB Device, class 0/0, rev 1.10/0.01, addr 3> on usbus1 ums0: 8 buttons and [XYZ] coordinates ID=0 -- ∧∧ Zzz.. (- - )⌒⌒⊇〜 川口 銀河 ############## ginga-free...@ginganet.org