make clean; make

Vaio Pro 13における手のひら検知 on Arch Linux

| Comments

Vaio Pro 13にArch Linuxを入れて遊んでいる近頃である。
概ね快適なLinuxライフを過ごせているのだが、一個だけ非常に不満な点がある。
それは「タッチパッドの手のひら検知」。パームディテクト、Palm Detection、等と呼ばれる機能。

手のひら検知?

もはや手のひら検知について触れる必要もなさそうだが、一応。

Vaio Pro 13のタッチパッドはなかなか大きい。
これは最近のノートPC、MBPとか他のUltraBookにも採用されていて流行と言ったら流行。
これ自体は割と私は好みで、二本指、三本指でのスワイプなんかもやりやすくてなかなかいい。

ただ大きいタッチパッドには弊害もあって、キーボードを打ってるときに親指の付け根のあたりで触れちゃうってこと。
触れちゃうとどうなるかっていうと、クリックした扱いになってしまって、つまりカーソルが飛ぶ。
編集中に予期せぬ場所にカーソルが飛んでしまって、あれ、これどうなった、みたいなことになる。

それを解決してくれるのが、手のひら検知の仕組み。
つまり意図したタッチでないと思われるものは無視してくれるというやつで、考えた人凄いと思います。

Arch Linux on Vaio Pro 13の場合

件の手のひら検知を有効にする仕組みがある(デフォルトではオフ)。
synclient、PalmDetect、あたりでぐぐると結構出てくる。具体的には、
synclient PalamDetect=1 とかってやって手のひら検知を有効にする。する、のだが。

なんか全然効いてない気がするんですけど・・・。ということで調べてみた。
ほんとに効いてるのかどうかを。

結論からいうと効いてなかった

効いてなかったです。ちくしょうめ。やっぱりか。

ドライバのソースコードに簡単にログを仕込んで確認してみたところ、やっぱり効いてなかった。
Arch Linuxでタッチパッドのドライバーは、Synapticsが使われている(というか大体どこでもSynapticsか)。
ソースコードはこれ。Githubに公開されている。xf86-input-synaptics

なんで効かないかと言うと、の前に、ソースコードからどうやって手のひら検知をしているかを調べてみたのでそれをメモ。

どうやって手のひら検知している?

以下の3要素を考慮して手のひら検知としている模様。

  • PalmDetectの設定が有効になっているか(synclient PalmDetect=1 で有効になるやつ)
  • PalmMinZがしきい値を超えているか(これも synclient PalmMinZ=XXX で設定できる)
  • PalmMinWidthがしきい値を超えているか(これも synclient PalmMinWidth=XXX で設定できる)

PalmMinZ は、どれくらい深く(強く?)タッチパッドが押されたら手のひらと判断するか、のしきい値。
PalmMinWidth は、タッチの広さを見ていて、太すぎる指は手のひらとみなしましょう、という判断のためのしきい値。

Arch Linux on Vaio Pro 13 が手のひら検知をしてくれない理由

上記のしきい値のうち、どうやらPalmMinWidthのほうがおかしいっぽくて、
どんな触り方をしても常に「0」で判定されてしまっている模様。
ちなみに、SynapticsはPalmMinWidthが0のときは手のひらとして判断しないように実装されている。
なので、PalmDetect、PalmMinZ、PalmMinWidth、どれをどの値にしても手のひら検知は効かないということである。ちくしょうめ。

どうすれば解決するのか?

PalmMinWidthを正しく判定させる方法

調査をしているが今のところわからない。。一般ピープルに手が及ぶ範囲なのかどうか。

それ以外の対処法?

PalmMinWidthはもう一切判断に含めないようにソースコードを書き換えてみたが、、、
それってつまりタッチ深度だけで手のひらを検知するということであって、それはまあ微妙な感じ。

つまり

残念ながら、手のひら検知がいまいちな件は解決できていない。なんとかする方法の調査はTo Be Continuedである。
デュアルブートしているWindowsの側ではできているっぽいので、Arch Linux側でも出来ないことないと信じて。

Comments