web-dev-qa-db-fra.com

Calibrage de l'écran tactile avec deux moniteurs (NVidia et xinput)

J'ai une carte NVidia GTX260 avec un écran normal au-dessus d'un écran tactile utilisant le pilote eGalax.

J'ai essayé de configurer l'écran tactile avec xinput, mais je ne parviens pas à le comprendre correctement. Lorsque l'écran normal est déconnecté et que vous modifiez l'option "Evdev Axis Calibration", tout fonctionne correctement, mais lorsque je reconnecte l'écran normal, le mappage difficile est déplacé. Si je touche l'écran tactile, la souris se déplace à la position correspondante sur l'autre écran.

Ni "matrice de transformation de coordonnées" ni "carte vers sortie" ne semblent fonctionner ...

Toute aide est grandement appréciée!

/ Henrik

6
user129955

Maintenant (le 13.04), j’avais un problème similaire, mais xinput map-to-output m'aidait, si je faisais les choses dans le bon ordre.

xinput map-to-output peaufine la "matrice de transformation de coordonnées".
xinput_calibrator définit "Etalonnage d'axe Evdev" et ignore complètement "la matrice de transformation de coordonnées". En outre, il s'ouvre toujours dans toute l'étendue de la zone de sortie disponible.

Cela signifie que vous devez exécuter xinput_calibrator sur un seul écran.

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

  2. xinput map-to-output <touch input device> <touch-output>
    (pour réinitialiser la "matrice de transformation de coordonnées" si vous l'avez déjà touchée).

  3. Calibrer avec xinput_calibrator.
    Vous devriez maintenant avoir une touche bien calibrée sur l’écran unique.
    (Mon écran tactile était initialement bien éteint - X/Y échangé, Y inversé - je devais donc l'exécuter deux fois, avec --misclick 0. Je crois que c'est une propriété de mon écran tactile, sans rapport avec le double moniteur situation.)

  4. Réactivez le deuxième écran.
    xrandr --output <non-touch-output> --on

  5. Refaites map-to-output.

pour moi avec Ubuntu 12.04 LTS (64bits), il n’a pas travaillé tant que j’ai vu dans le xinput --help que la bonne commande est

xinput map-to-crtc 'Nom du périphérique d'entrée' Nom du périphérique de sortie

alors que le nom du périphérique d'entrée est indiqué par $ xinput --list, le nom du périphérique de sortie est indiqué par $ xrandr et peut être LVDS1 ou VGA1, par ex.

2
user188030

Tandis que réponse de Beni fonctionnera probablement pour certaines personnes (sinon la plupart), dans mon cas, xinput_calibrator était toujours en train de devenir confus, bien que les autres écrans soient désactivés. Je n'aimais pas non plus l'installation de pilotes à source fermée du fournisseur.

Heureusement, en utilisant les informations contenues dans ce même QA et dans d’autres sources ( la documentation EVDEV xorg , et cette réponse ), il s'avère tout à fait possible de tout configurer manuellement tant que vous utilisez EVDEV et Xorg (par défaut pour Kubuntu au moins) .

Configuration en session unique (via xinput)

  1. Recherchez l'ID de l'appareil via xinput --list. Cela sera appelé <DEVICE_ID>.
  2. Exécutez xinput --list-prop <DEVICE-ID> et notez les valeurs par défaut au cas où.
  3. Configurez la propriété Coordinate Transformation Matrix. Le moyen le plus simple serait d'installer ptxconf à partir de Hrobjartur et d'utiliser son option de configuration.
  4. Vous êtes maintenant prêt à définir des axes. La première étape consiste à vérifier si les coordonnées X et Y sont échangées. Pour faire ça:
    • appuyez votre doigt/stylet en haut de votre écran,
    • et sur le bas. Si le pointeur de la souris apparaît à gauche et à droite (ou inversement), exécutez: xinput --set-prop <DEVICE_ID> "Evdev Axes Swap" 1. Sinon, laissez cette propriété inchangée.
  5. Maintenant, vérifiez si les axes X et/ou Y doivent être inversés. Ceci est contrôlé par la propriété Evdev Axis Inversion, avec deux valeurs - X Y, où 0 est normal et 1 inversé. Alors:
    • vérifiez si le fait d'appuyer à l'extrême gauche de l'écran place votre curseur à droite. Si c'est le cas, vous devez inverser X.
    • vérifiez si le fait d'appuyer tout en haut de l'écran place votre curseur en bas. Si oui, vous devez inverser Y.
    • Par exemple, inverser X et laisser Y inchangé signifie exécuter: xinput --set-prop <DEVICE_ID> "Evdev Axis Inversion" 1 0.
  6. Nous passons maintenant aux choses amusantes - la calibration. La propriété Evdev Axis Calibration le contrôle, et c'est théoriquement spécifique au fournisseur , mais il est possible de le résoudre avec un peu d'inspiration (littéralement). Voici ce que vous devez faire:
    • vérifie si Evdev Axis Calibration a été réinitialisé (cela m'est arrivé après l'exécution de ptxconf). Si tel est le cas, exécutez xinput --set-prop <DEVICE_ID> "Evdev Axis Calibration" <DEFAULT_VALUES_FROM_POINT_1> (notez que, bien que les valeurs soient séparées par des virgules dans la sortie, elles doivent être séparées de l’espace dans l’entrée).
    • les valeurs pourraient être décrites, du moins dans mon cas, comme <FAR_RIGHT_OFFSET> <FAR_LEFT_OFFSET> <VERY_TOP_OFFSET> <VERY_BOTTOM_OFFSET>.
    • prenez votre stylet et commencez à piquer le décalage le plus à droite. Ajustez la première valeur jusqu'à ce que le pointeur se trouve sous votre stylet. Ne vous inquiétez pas si le pointeur est hors cible sur l'autre axe.
    • faire la même chose pour le décalage extrême gauche. Vérifiez si le décalage à droite est toujours correct. Sinon, ajustez les deux valeurs jusqu'à obtenir une correspondance.
    • faire la même chose avec les deux autres compensations.
    • vérifiez si le pointeur est correctement placé à l'extrême gauche, à l'extrême droite, en haut au centre et en bas au centre de votre écran. Si c'est le cas, vous êtes prêt à partir.
  7. Exécutez xinput --list-props <DEVICE_ID> et notez vos valeurs finales. C'est ça!

Configuration du permament (via xorg conf)

Comme le note la sortie xinput_calibration, vous devez ajouter un fichier de configuration dans le répertoire de votre configuration xorg (il s'agit de /usr/share/X11/xorg.conf.d/ sur Ubuntu, nommé avec une priorité suffisamment basse, comme 99-calibration.conf dans l'exemple fourni).

Préparez les valeurs de la propriété xinput et vérifiez le nom du périphérique dans xinput --list. Maintenant, tout ce que vous avez à faire est de créer le fichier de la manière suivante:

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

Par exemple:

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

Vérifiez si tout fonctionne après un redémarrage. Et maintenant tout est prêt!

1
mikołak

Si vous voulez un outil graphique qui se trouve dans votre barre d'état système, alors nous en avons simplement créé un et nous aimerions voir s'il peut être utile à quelqu'un d'autre: il suffit de sélectionner votre stylet de saisie et à quel écran vous souhaitez le mapper:

http://wenhsinjen.github.io/ptxconf/

Nous venons juste de commencer, il est donc possible que vous rencontriez des problèmes pour identifier votre tablette ou vos écrans. Veuillez nous en informer. Nous allons le réparer tout de suite. Nous prévoyons également qu’il conserve sa configuration précédente après le démarrage - peut-être même souvenez-vous de la configuration utilisée pour quelle configuration d’écran si certaines personnes continuent d’ajouter et de supprimer des moniteurs.

1

Je ne parvenais pas à faire fonctionner correctement mon écran tactile USB générique/eGalax sur mon système Mint 18.2, quelle que soit la réponse trouvée, mais je pensais que je devais partager ce qui fonctionnait pour moi.

J'ai d'abord désactivé mon moniteur non tactile (comme suggéré par Beni Cherniavsky-Paskin) et calibré mon écran tactile à l'aide de xinput_calibrator.

Rallumez mon autre moniteur (via la section affichage du panneau Paramètres système). À ce stade, l’écran tactile est bien calibré, mais l’entrée correspond toujours aux deux moniteurs.

Pour le décaler complètement vers le moniteur/la zone souhaitée, j'ai ensuite remappé la "matrice de transformation de coordonnées" du panneau, comme indiqué dans ce manuel en utilisant

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

Pour Device Name, j'ai utilisé xinput --list pour obtenir l'identifiant de l'écran tactile. De la sortie suivante, j'ai obtenu l'id 13 :

⎡ 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)]

J'ai calculé les paramètres comme expliqué dans le manuel mentionné. par exemple. Pour moi, une zone tactile large de 768px décalée par mon moniteur de 1900px m'a permis d'obtenir une c0 = 768/(1900+768) = 0.287856. Fini avec cette commande:

$ 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

Cela a tout bien fonctionné. btw, j'ai eu quelques problèmes, qui semblent disparaître lorsque j'ai utilisé une précision de 6 décimales seulement pour les paramètres idk si cela est réellement nécessaire ou, plus probablement, je venais de me gâcher.

0
Simmo Andreev