스마트 미러(양방향 미러 뒤에서 모니터링)를 만들고 있습니다. 저는 27인치 적외선 터치 프레임을 가지고 있는데 22인치 모니터와 함께 사용하고 싶습니다. 크기가 맞지 않는 이유 중 하나는 카메라를 거울 뒤에 배치했기 때문인데, 거울이 디스플레이와 터치 프레임 사이에 있기 때문에 터치 프레임도 거울 크기와 같아야 합니다.
터치박스를 보정하기 위해 xinput_calibrator 도구를 사용하고 있는데 X는 터치박스와 모니터의 크기가 동일하다고 가정하므로 보정은 화면 중앙(터치박스 중앙과 모니터 중앙)에서만 정확합니다. 모니터 오버랩). 그렇지 않으면 터치 입력이 화면 중앙으로 편향됩니다.
아래 이미지에서 검은색 직사각형 안의 모든 것은 적외선 터치 영역 내에 있습니다. 모니터는 녹색 직사각형입니다.
실제 디스플레이보다 더 큰 터치 표면을 사용하도록 X를 구성하려면 어떻게 해야 합니까?
저는 Raspberry Pi 4에서 Raspbian 10(buster)을 사용하고 있습니다.
답변1
xinput은 터치 입력 장치의 좌표 변환 행렬을 설정하는 데 사용할 수 있습니다. 이는 Arch Linux 위키에 있는 단계를 기반으로 합니다.https://wiki.archlinux.org/index.php/Calibration_Touchscreen
먼저 X11에서 인식되는 입력 장치 목록을 가져옵니다.
$ xinput list
결과 중 하나는 터치박스여야 합니다. 다음으로 현재 설정을 가져옵니다.
$ xinput list-props "Device Name"
업데이트해야 할 "좌표 변환 행렬"이라는 속성이 있습니다.
고려해야 할 두 가지 사항이 있습니다.
- 터치 프레임은 디스플레이보다 물리적으로 크기 때문에 픽셀 크기도 더 커집니다.
- 터치 영역은 디스플레이를 기준으로 수평 및 수직으로 오프셋됩니다.
다음 변수를 수집합니다. 줄자를 사용하여 물리적으로 측정했지만 모든 것이 동일한 기준(예: 픽셀 해상도)인 한 결국 수학은 제대로 작동할 것입니다.
Screen width 52cm
Screen height 32.5cm
Touch area width 60.5cm
Touch area height 34cm
Touch area x offset -4cm (note the negative because the touch area begins beyond the left edge of the display)
Touch area y offset 0 (in my case the top of the touch frame aligned with the top of the display)
이제 좌표 변환 행렬을 작성하십시오. 행렬에는 계산해야 하는 4개의 값이 있습니다.
매트릭스는
[ c0 0 c1 ]
[ 0 c2 c3 ]
[ 0 0 1 ]
이는 행별 배열로 표시됩니다.
c0 0 c1 0 c2 c3 0 0 1
c0 = touch_area_width / total_width
c1 = touch_area_x_offset / total_width
c2 = touch_area_height / total_height
c3 = touch_area_y_offset / total_height
내 측정 결과는 다음과 같습니다.
c0 1.163461538
c1 -0.076923077
c2 1.046153846
c3 0
이제 xinput을 사용하여 새 값을 설정하십시오.
xinput set-prop "Device Name" --type=float "Coordinate Transformation Matrix" c0 0 c1 0 c2 c3 0 0 1
계산된 값을 다음과 같이 대체합니다.
xinput set-prop "Device Name" --type=float "Coordinate Transformation Matrix" 1.16346 0 -0.0769 0 1.046150 0 0 1
이는 현재 세션에 대해서만 설정됩니다. 장치가 연결되거나 부팅될 때 변경하려면 udev 규칙을 생성하세요. 공급업체 ID와 장치 모델 ID를 찾아야 합니다. 내 장치의 경우 "aaec" 및 "c021"입니다.
/etc/udev/rules.d/99-touch-frame.rules
ENV{ID_VENDOR_ID}=="aaec",ENV{ID_MODEL_ID}=="c021",ENV{WL_OUTPUT}="DVI1",ENV{LIBINPUT_CALIBRATION_MATRIX}="1.16346 0 -0.0769 0 1.046150 0 0 1"
이제 장치를 연결하자마자 교정 매트릭스가 자동으로 설정됩니다.