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의 이 위키 게시물숫자가 다음과 같은 경우를 제외하면 내가 해야 할 일을 정확히 수행합니다.조금떠나다. 이 스레드는 너무 혼란스러워서 답변을 드리고 있지만 마지막으로 해결해야 할 문제가 하나 있습니다(아래 참조).

이 마지막 사항에 대한 논의는 다음을 참조하세요.이 게시물.

내가 한 일은 다음과 같습니다.

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을 얻어야 하며 이는 실험적으로 찾은 것과 일치합니다.

관련 정보