IR Touch Frame calibration
-
@cyberphox Hi there, ok! I now managed to get my IR Touch Overlay set to portrait! also just finished running the xinput touch calibrator program under ‘Preferences’ (it had me touch the 4 red crosses). It shows:
< Calibrating standard Xorg driver “Multi touch overlay device” current calibration values: min_x=0, max_x=65535 and min_y=0, max_y=65535
If these values are estimating wrong, either supply it manually with the - -precalib option, or run the ‘get_precalib.sh’ script to automatically get it (through HAL). >My issue, I find the curser doesn’t reach the the edges of my monitor. Example I can’t simply click on the Raspberry Icon in the corner. The curser is diaginally 2 inches away? I have a 42 inch IR Touch Overlay using a 32 inch LCD monitor.
Where can I set or adjust this? Any thoughts?
Fun!
-
@peemoeller said in IR Touch Frame calibration:
@cyberphox Hi there, ok! I now managed to get my IR Touch Overlay set to portrait! also just finished running the xinput touch calibrator program under ‘Preferences’ (it had me touch the 4 red crosses). It shows:
< Calibrating standard Xorg driver “Multi touch overlay device” current calibration values: min_x=0, max_x=65535 and min_y=0, max_y=65535
If these values are estimating wrong, either supply it manually with the - -precalib option, or run the ‘get_precalib.sh’ script to automatically get it (through HAL). >My issue, I find the curser doesn’t reach the the edges of my monitor. Example I can’t simply click on the Raspberry Icon in the corner. The curser is diaginally 2 inches away? I have a 42 inch IR Touch Overlay using a 32 inch LCD monitor.
Where can I set or adjust this? Any thoughts?
Fun!
i ask the same question my bro
-
@klimbo said in IR Touch Frame calibration:
mple I can’t simply click on the R
So, has anyone found a solution for this?
I have a 32 inches mirror (and 32 inches touch frame) in a 18 inches screen. Since the touchframe is bigger than the screen i couldn’t find a way to calibrate it to just work on the 18 inches screen area (as I do when I calibrate it on Windows).Does anyone have any thoughts on how to do this?
Thanks.
-
Here is a few more information.
The picture below shows my mirror (with the 18’’ screen) and the 32’’ touch frame above it.
(This is just a test mirror, that’s why the touch frame doesn’t match the mirror frame. And just ignore the painted part… it’s just some information i can’t share)Before calibrating it, the 18’’ screen is “mapped” to the whole 32’’ touch frame. That’s expected.

What I need to do is calibrate it so the only part of the touch frame that will recognize the touch is the area of the 18’’ screen.
I run the command
DISPLAY=:0.0 xinput_calibrator
Then I calibrate the screen, like the picture below (clicking the four points)
The output of the command is:
Calibrating standard Xorg driver "Touch Device FC315WH00DL-CT-B2-20P" current calibration values: min_x=0, max_x=65535 and min_y=0, max_y=65535 If these values are estimated wrong, either supply it manually with the --precalib option, or run the 'get_precalib.sh' script to automatically get it (through HAL). --> Making the calibration permanent copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' Section "InputClass" Identifier "calibration" MatchProduct "Touch Device FC315WH00DL-CT-B2-20P" Option "MinX" "8770" Option "MaxX" "46111" Option "MinY" "5539" Option "MaxY" "40880" EndSection
But nothing changes… when I touch the screen again, the same thing is happening: the 18’’ screen is “mapped” for the whole 32’’ touchframe, not just the area of the 18’’ screen.
I tried saving the code above both on /etc/X11/xorg.conf.d/99-calibration.conf and modifying the values of Min/Max X/Y (like changing from 46111 to 2000) but absolutely nothing changes… I think the touchframe is not using these values for anything.
When I use the same touchframe on windows and use the calibration tool, it map my 21’’ PC monitor correctly for the 32’’ touch frame.
I’ve been struggling with this for a few days and I see that a lot of people is having/had the same problem. Does anyone know a solution for this?
Thanks.
-
Ok, after a lot of hours searching and testing i finally figured it out.
Forget about all that getting the values for minX, maxX, minY and maxY that all the sites talk about. Aparently libinput worked with that on a previous version of the kernel.
What you have to do is change the values of the parameter “libinput Calibration Matrix”
Steps:
- find your devices name (or id) with the command
"xinput"
If it fails with a message “Unable to connect to X server” just use before.
export DISPLAY=:0.0
Write down your devices name and id
- Reset your devices calibration matrix:
xinput set-prop "YOUR_DEVICES_NAME" "libinput Calibration Matrix" 1 0 0 0 1 0 0 0 1
(Obs: this “virgin” matrix above is for the screen WITHOUT ANY ROTATION. Just plain landscape mode, aka, “display_rotate=0” on /boot/config.txt
I’ll talk about rotation below)- Start xinput_calibrator on verbose mode:
xinput_calibrator -v
Click the points on the screen and you should se something like this on the output:
DEBUG: Adding click 0 (X=181, Y=132) DEBUG: Adding click 1 (X=862, Y=129) DEBUG: Adding click 2 (X=186, Y=661) DEBUG: Adding click 3 (X=868, Y=665)
We’ll need only the click0 and click3 X and Y
- Get your screen current resolution:
xrandr | grep current
You’ll see something like:
Screen 0: minimum 1920 x 1080, current 1920 x 1080, maximum 1920 x 1080
- Calculate the values for A, B, C and F:
a = (screen_width * 6 / 8 ) / (click_3_X - click_0_X)
c = ((screen_width / 8 ) - (a * click_0_X)) / screen_width
e = (screen_height * 6 / 8 ) / (click_3_Y - click_0_Y)
f = ((screen_height / 8 ) - (e * click_0_Y)) / screen_height
On my case I made excel formulas, but was something like:
a = (1920 * 6 / 8 ) / (868 - 181) = 2,09606
c = ((1920 / 8 ) - (2,09606 * 181)) / 1920 = -0,07260
e = (1080 * 6 / 8 ) * (665 - 132) = 1,51970
f = ((1080 / 8 ) - (1,51970 * 132)) / 1080 = -0.06074(I have no idea why they use those letters or where the hell these formulas came from… if you wanna know, more I got it from here: https://wiki.archlinux.org/index.php/Calibrating_Touchscreen )
- Then set the new Calibration Matrix using the values above with the command:
xinput set-prop "YOUR_DEVICES_NAME" "libinput Calibration Matrix" a 0 c 0 e f 0 0 1
There you go. Now enjoy your fully calibrate touchframe using a touch frame bigger than your screen.
- To make it permanent:
Create the file: /etc/X11/xorg.conf.d/99-calibration.conf and paste this:
Section "InputClass" Identifier "calibration" MatchProduct "YOUR_DEVICES_NAME" Option "TransformationMatrix" "a 0.0 c 0.0 e f 0.0 0.0 1.0" EndSection
(of course change your devices name and the values for a, c, e and f)
About rotating the screen
Well, I think I can’t help you guys much with this, since I don’t even know what I did to make it work. When you rotate the screen (display_rotate=X on /boot/config.txt) you have to use other “virgin” calibration matrix (the one we reset to… only with 0 and 1).
If you wanna know more: maybe this site will help https://wayland.freedesktop.org/libinput/doc/1.11.3/absolute_axes.htmlI am using display_rotate=1
So the “new matrix” is:
0.0 1.0 0.0 -1.0 0.0 1.0 0.0 0.0 1.0
(I had to put ‘.0’ after every number because otherwise the forum was flaggin my post as spam)
On my calculations for the rotated screen (remember to change screen width and screen height) I used:
0 A C -E 0 X 0 0 1
instead of
A 0 C 0 E F 0 0 1
What is that X? Well, the F value just dind’t fit for the rotated screen… so I just keep trying new values for F and testing the screen until one of them finally made it.Well, I hope it helps somebody.
See ya. -
Actually, the first link should be: https://wiki.archlinux.org/index.php/Talk:Calibrating_Touchscreen
I couldnt edit my post anymore because the forum is still thinking this is spam…
-
Thank you for your instructions. Unfortunately, this does not work for me. I have a 42 “frame over a 32” monitor.
The monitor is only a part of the touch frame area.
According to your instructions, no error message appears, but the ratio does not fit in the calibration. Do you have a tip for me here?