单会话设置(通过 xinput)

单会话设置(通过 xinput)

我有一块 NVidia GTX260 卡,它在一块触摸屏上方有一个普通屏幕,使用 eGalax 驱动程序。

我尝试使用 xinput 配置触摸屏,但无法正确配置。断开普通屏幕并摆弄“Evdev 轴校准”选项后,它可以正常工作,但当我再次连接普通屏幕时,棘手的映射发生了变化。如果我触摸触摸屏,鼠标会移动到另一屏幕上的相应位置。

“坐标变换矩阵”和“映射到输出”似乎都不起作用......

任何帮助是极大的赞赏!

/亨利克

答案1

我现在(13.04)遇到了类似的问题,但xinput map-to-output如果我按照正确的顺序做事,确实有帮助。

xinput map-to-output调整“坐标变换矩阵”。
xinput_calibrator设置“Evdev 轴校准”,完全不知道“坐标变换矩阵”。它还始终打开并拉伸到完整的可用输出区域。

这意味着您必须xinput_calibrator在单个屏幕上运行。

  1. xrandr --output <non-touch-output> --off

  2. xinput map-to-output <touch input device> <touch-output>
    (如果您之前已经接触过它,请重置“坐标变换矩阵”)。

  3. 使用 进行校准xinput_calibrator
    现在您应该可以在单个屏幕上获得校准良好的触摸效果。
    (我的触摸屏最初偏离了方向 — X/Y 交换,Y 反转 — 所以我不得不使用 运行两次--misclick 0。我相信这是我的触摸屏的属性,与双显示器情况无关。)

  4. 重新启用第二个屏幕。
    xrandr --output <non-touch-output> --on

  5. 再做map-to-output一次。

答案2

尽管Beni 的回答可能对某些人(如果不是大多数人)有用,但就我而言,xinput_calibrator尽管其他显示器被禁用,但我仍然感到困惑。我也不喜欢安装供应商提供的闭源驱动程序。

幸运的是,使用本 QA 中的信息和其他来源(EVDEV xorg 文档, 和这个答案),事实证明,完全可以手动设置一切只要你使用 EVDEV 和 Xorg (至少目前是 Kubuntu 的默认设置)

单会话设置(通过 xinput)

  1. 通过 查找设备 ID xinput --list。这将被称为<DEVICE_ID>
  2. 运行xinput --list-prop <DEVICE-ID>并记下默认值以防万一。
  3. 设置坐标变换矩阵属性。最简单的方法是安装ptxconfHrobjartur的回答并使用其配置选项。
  4. 现在您可以设置轴了。第一步是检查 X 和 Y 坐标是否互换。操作如下:
    • 用手指/触控笔按下屏幕顶部,
    • 和底部。如果鼠标指针出现在左侧和右侧(或反之亦然),则运行: xinput --set-prop <DEVICE_ID> "Evdev Axes Swap" 1。否则,保持此属性不变。
  5. 现在,检查 X 轴和/或 Y 轴是否需要反转。这由属性控制Evdev Axis Inversion,有两个值 - X Y,其中 0 为正常,1 为反转。所以:
    • 检查按下屏幕最左侧是否会将光标置于右侧。如果是,则需要反转 X。
    • 检查按下屏幕最顶部是否会将光标置于底部。如果是,则需要反转 Y。
    • 例如,反转 X 和 并保持 Y 不变意味着运行: xinput --set-prop <DEVICE_ID> "Evdev Axis Inversion" 1 0
  6. 现在我们开始讲有趣的东西——校准。Evdev Axis Calibration属性控制它,它是理论上特定于供应商,但只要稍微推动一下(字面意思),就有可能弄清楚。以下是您需要做的事情:
    • 检查是否Evdev Axis Calibration已重置(在我的情况下,在运行 ptxconf 后发生了这种情况)。如果是,请运行xinput --set-prop <DEVICE_ID> "Evdev Axis Calibration" <DEFAULT_VALUES_FROM_POINT_1>(请注意,虽然输出中的值以逗号分隔,但在输入中它们应该以空格分隔)。
    • 至少就我而言,这些价值观可以描述为<FAR_RIGHT_OFFSET> <FAR_LEFT_OFFSET> <VERY_TOP_OFFSET> <VERY_BOTTOM_OFFSET>
    • 拿起你的触控笔,开始在最右边的偏移处戳。调整第一个值,直到指针位于触控笔下方。如果指针在另一个轴上偏离目标,请不要担心。
    • 对最左边的偏移执行相同操作。检查右侧的偏移是否仍然正确,如果不正确,则调整两个值直到匹配。
    • 对另外两个偏移执行相同操作。
    • 检查指针是否正确放置在屏幕的最左中间、最右中间、顶部中间和底部中间。如果正确,则一切正常。
  7. 运行xinput --list-props <DEVICE_ID>并记下您的最终值。就这样!

永久设置(通过 xorg conf)

正如xinput_calibration输出所示,为了使设置生效,您需要将配置文件添加到您的 xorg conf 的目录中(它位于/usr/share/X11/xorg.conf.d/Ubuntu 上,以足够低的优先级命名 - 就像 99-calibration.conf在提供的示例中所见)。

准备好 xinput 属性值,并检查 中的设备名称xinput --list。现在,您要做的就是按照以下方式创建文件:

Section "InputClass"
        Identifier                      "calibration"
        MatchProduct                    "<DEVICE_NAME_FROM_XINPUT_LIST>"
        Option  "TransformationMatrix"  "<VALUES_FROM(Coordinate Transformation Matrix)>"
        Option  "Calibration"           "<VALUES_FROM(Evdev Axis Calibration)>"
        Option  "SwapAxes"              "<VALUE_FROM(Evdev Axes Swap)>"
        Option  "InvertX"               "<X_VALUE_FROM(Evdev Axis Inversion)>"
        Option  "InvertY"               "<Y_VALUE_FROM(Evdev Axis Inversion)>"
EndSection

例如:

Section "InputClass"
        Identifier                      "calibration"
        MatchProduct                    "ACME USB Touch"
        Option  "TransformationMatrix"  "0.5656 0.000000 0.676576 0.000000 0.765756 0.756233 0.000000 0.000000 1.000000"
        Option  "Calibration"           "50 1366 25 2876"
        Option  "SwapAxes"              "1"
        Option  "InvertY"               "1"
EndSection

重启后检查一切是否正常。现在您已一切就绪!

答案3

对于我来说,Ubuntu 12.04 LTS(64位)直到我在xinput--help中看到正确的命令是

xinput map-to-crtc '输入设备名称' 输出设备名称

输入设备的名称由 $xinput --list 显示,输出设备的名称则显示为 $xrandr,可以是 LVDS1 或 VGA1,例如

答案4

在我的 Mint 18.2 系统上,我无法让我的通用/eGalax USB 触摸面板正常工作,也无法通过自己找到的任何答案,但我认为我应该分享对我有用的方法。

我首先禁用了我的非触摸显示器(按照 Beni Cherniavsky-Paskin 的建议)并使用校准了我的触摸面板xinput_calibrator

重新打开我的另一台显示器(通过系统设置面板的显示部分)。此时,触摸板已校准完毕,但输入仍通过两台显示器进行映射。

为了将其完全偏移到所需的监视器/区域,我按照建议重新映射了面板的“坐标变换矩阵”。本手册使用

$ xinput set-prop "Device Name" --type=float "Coordinate Transformation Matrix" c0 0 c1 0 c2 c3 0 0 1

Device Name曾经xinput --list获取过触摸面板的 ID。从以下输出中我得到了 ID十三

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SIGMACH1P USB Keyboard                    id=10   [slave  pointer  (2)]
⎜   ↳ SOAI Gaming Mouse                         id=12   [slave  pointer  (2)]
⎜   ↳ eGalax Inc. USB TouchController           id=13   [slave  pointer  (2)]

我按照上述手册中的说明计算了参数。例如,对于我来说,一个 768px 宽的触摸区域偏移了我的 1900px 显示器,我得到了一个c0 = 768/(1900+768) = 0.287856。最后用这个命令:

$ xinput set-prop 13 --type=float "Coordinate Transformation Matrix" 0.287856, 0.000000, 0.712114, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000

一切都运行良好。顺便说一句,我确实遇到了一些问题,当我对参数仅使用 6 位小数精度时,这些问题似乎消失了,我不知道这是否真的有必要,或者更有可能的是,我只是搞砸了其他事情。

相关内容