x入力校正とオプション

x入力校正とオプション

私はlenovo thinkpad x220tにfedora 22を新しくインストールしています。タブレットをプロジェクタに接続すると、解像度の変更によりペンが補正されなくなることを除いて、すべてがうまく機能します。調整してみましたxinput_calibratorが、誤ってクリックしたものを「自動検出」するので、正常に動作しません。オフにするオプションを試しました--misclick 0が、やはり動作しませんでした。このオプションは--precalib私には影響しません。

この問題を解決する最善の方法は手動で設定することだと思いますxinputが、オプションが見つかりません。xinput 手動。私の質問は次のとおりです。

質問: xinputでoptionsを使いたいです--set-int-prop device property format value。私のデバイス名はです"Wacom ISDv4 E6 Pen stylus"

  1. などはproperty何を使うべきですか?x_minx_max
  2. それは何でなければならないかformat。利用可能な形式は8、16、32であることがわかっていますが、どの形式を選択する必要がありますか?
  3. これらのオプションの詳細はどこで確認できますか?

-

それともこの校正を処理するより良い方法はありますか?このマニュアルには、xinput_calibrator次のいずれかの問題が発生する可能性があることが示されています。

  1. 十字線をクリックしたり、スタイラスを使用したり、--misclickしきい値を上げたりするのはうまくいきません。
  2. お使いのデバイスはカーネルで正しくサポートされておらず、クリックを誤って解釈します。
  3. 画面に非線形の変形があるため、4点補正は役に立ちません。

まあ、私は1が本当ではないと確信しています。デフォルトの解像度ではうまく機能するため、2にすることはできません。おそらく3ではありません。ペンがモニターの端(画面ではなく)に達すると、線形変形であり、ポインターが画面の端にあり、一致する中央にあることが確実にわかるからです!私は必要なのはxinputにすべてを一定の要素に拡張するように指示することだと思いますが、そうする方法がわかりません。

どんな助けでも大変感謝します。


修正する: ガイドラインここ画面を「拡大/縮小」して「移動」する方法を正確に教えてください。数字が正確にわからないようです。私の結果のいくつかは次のとおりです。

なぜなら、xrandrそのうちのいくつかの行を得たからです。

1366x768      60.02 +
...
1024x768      60.00*
...

一番上にあるもの(+があるもの)は、ペンが機能するようにモニターがサポートする最高解像度です。一番下(*マークがあるもの)が現在の解像度です。このリンクで提案されている数字は次のとおりです。

 c0 = touch_area_width / total_width
 c2 = touch_area_height / total_height
 c1 = touch_area_x_offset / total_width
 c3 = touch_area_y_offset / total_height

幅に問題がないため、c2 = 1とc3 = 0が適しています。 c0 と c3 の場合は、次の数字を使用します。 touch_area_width = 1366 Total_width = 1024 touch_area_x_offset = -171

(1366 - 1024) / 2から171を取得します.

この翻訳は「ほぼ」動作します。私が誤って使用しているパラメータと正確な値を見つける方法を知っている人はいますか?

答え1

私が見つけたArchLinuxのこのwiki投稿数字が次の場合を除いて、私がしなければならないことを正確に行います。少し去る。このスレッドはあまりにも混乱しているので答えていますが、最後に解決する必要がある問題が1つあります(下記参照)。

この最後の点については、以下をご覧ください。この投稿

私がしたことは次のとおりです。

xrandrから次のようになります。

Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
LVDS1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 277mm x 156mm
   1366x768      60.02 +
   1280x720      60.00  
   1024x768      60.00* 
   1024x576      60.00  
   ...

+があるのがモニターがサポートする最大解像度、*があるのが現在の解像度です。だから私は結論を下しました。

total_width = 1024
touch_area_width = 1366
touch_area_x_offset = (1024 - 1366) /2 = -171

私は本当に必要なものを手に入れなかったので、おそらく私が間違っているのかもしれませんが、ほとんどすべてが来ました。

次に、xinput listの出力を表示します。

⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Logitech M325                               id=9    [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E6 Pen stylus                   id=10    [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E6 Finger                       id=11    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                  id=13    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                       id=14    [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E6 Pen eraser                   id=16    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Sleep Button                                id=8    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=12    [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                      id=15    [slave  keyboard (3)]

4,5,8行が私に必要なものなので、デバイス名は「Wacom ISDv4 E6 Pen stylus」、「Wacom ISDv4 E6 Finger」、「Wacom ISDv4 E6 Pen Esper」です。

xinput list-props "device name" | grep Matrix現在の座標変換行列をリストする必要があります。デフォルトは行単位の行列です。

Coordinate Transformation Matrix (138): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000

変換行列は行列です

[ c0 0  c1 ]
[ 0  c2 c3 ]
[ 0  0  1  ]

チュートリアルでは、次のように行列を計算します。 (右の数字は私が計算した数字です。)

c0 = touch_area_width / total_width = 1366/1024 = 1.333984375
c2 = touch_area_height / total_height = 768/768 = 1
c1 = touch_area_x_offset / total_width = -171/768 = -0.22265625
c3 = touch_area_y_offset / total_height = 0/768 = 0

c2=1 と c3=0 の理由は、私の場合は高さが大丈夫なので、幅を調整して移動すればよいからです。

今やるべきことは、行列を行配列として表現することだけです。つまり、次のようになります。

c0 0 c1 0 c2 c3 0 0 1

私にとっては、次のようになります。

1.333984375 0 -0.22265625 0 1 0 0 0 1

その後、次のコマンドを翻訳する必要があります。

xinput set-prop "DEVICE NAME" --type=float "Coordinate Transformation Matrix" 1.333984375 0 -0.22265625 0 1 0 0 0 1

これは私が望むところにほとんど到達しましたが、まだ到達していません。それで試行錯誤を経て次のような数字を得ました。1.345 0 -0.17 0 1 0 0 0 1

だから私の質問はこれです

変換行列の正確な値を見つけるには?異なる解像度を使用する必要がありますが、すべての解像度に対して試行錯誤プロセスを繰り返すことはできません。

答え2

私の考えでは、c1の計算が間違っていると思います。 -171/768ではなく-171/1024 = -0.167を取得する必要があり、これは実験的に見つかったものと一致します。

関連情報