Documentation / Résolution des problèmes / Comment lire les rapports d’entrée tactile

Comment lire les rapports d’entrée tactile

Présentation et repères

Vérifiez d’abord si Linux détecte le périphérique tactile. Comparez les contacts signalés sans toucher l’écran, puis lors d’un toucher volontaire à un point connu sur place. Vous verrez si le contrôleur signale des contacts irréels, sans déterminer automatiquement la cause ni la réparation.

Vérifications et résolution des problèmes

La console à distance et les outils Linux aident à observer les entrées tactiles depuis le bureau ou sur place. Le diagnostic teste les hypothèses avant une mise à jour du firmware, un recalibrage ou un remplacement, afin d’éviter des travaux inutiles. Il ne remplace pas l’inspection matérielle.

Commencer par la supervision, puis cibler la question

Vérifiez d’abord l’horodatage du dernier rapport et les périphériques USB dans supervision de l’appareil. Un contrôleur reconnu ne signale pas forcément des touchers corrects. Le contrôle suivant permet de le vérifier.

1. Identifier les symptômes

  • Aucune réponse : vérifiez la détection et la connexion du périphérique.
  • Réponse au mauvais endroit : vérifiez l’orientation et la correspondance tactile dans les paramètres.
  • Réponses irrégulières ou spontanées : comparez les contacts sans toucher et lors d’un toucher volontaire.
  • Retard : distinguez une entrée retardée d’une application lente ; un instantané ne mesure pas la latence.
Distinguer l’entrée tactile de la réponse de l’application

Si une souris distante fonctionne mais pas le tactile, cela ne confirme pas une dalle défectueuse. Comparez l’entrée Linux à la réponse de l’application. Sous Wayland, modifier XInput peut ne pas affecter l’entrée utilisée par le lecteur ; réappliquer la même matrice n’est pas une réparation.

2. Vérifier les données du périphérique tactile

Dépliez la commande et exécutez-la dans la console. Elle prend un instantané sans rien modifier. Vérifiez d’abord que personne ne touche l’écran et conservez le résultat. Recommencez ensuite avec une personne touchant un point connu sur place. La commande n’enregistre pas ce qui se passe entre les deux lectures.

Afficher la commande de contrôle ponctuel
python3 - <<'PY'
#!/usr/bin/env python3
"""Instantané Linux evdev en lecture seule. Aucune réinitialisation, capture exclusive, calibration ou écriture.

Nécessite Python 3, le format ioctl Linux générique (p. ex. x86/ARM) et le droit
de lire /dev/input/event*. Les contacts de type B proviennent de l’état du noyau.
Axes bruts avant rotation/calibrage du compositeur. Relancer pour comparer.
"""
import array
import fcntl
import glob
import os

def query(fd, number, size, initial=None):
    data = bytearray(size) if initial is None else bytearray(initial)
    fcntl.ioctl(fd, (2 << 30) | (size << 16) | (ord('E') << 8) | number, data, True)
    return data

def absinfo(fd, code):
    a = array.array('i')
    a.frombytes(query(fd, 0x40 + code, 24))
    return a

def slots(fd, code, count):
    a = array.array('i', [code] + [0] * count)
    data = query(fd, 0x0a, len(a) * a.itemsize, a.tobytes())
    result = array.array('i'); result.frombytes(data)
    return result[1:]

def position(value, limits):
    lo, hi = limits[1], limits[2]
    return 'n/a' if hi <= lo else '{:.1f}%'.format(100 * (value - lo) / (hi - lo))

def main():
    found = denied = 0
    for path in sorted(glob.glob('/dev/input/event*')):
        try:
            fd = os.open(path, os.O_RDONLY | os.O_NONBLOCK)
        except PermissionError:
            denied += 1; continue
        except OSError as error:
            print(path, error); continue
        try:
            bits = query(fd, 0x20 + 3, 64)
            has = lambda code: bool(bits[code // 8] & (1 << (code % 8)))
            keys = query(fd, 0x20 + 1, 96)
            touch_supported = bool(keys[330 // 8] & (1 << (330 % 8)))
            multi = has(47) and has(57) and has(53) and has(54)
            if not multi and not (touch_supported and has(0) and has(1)):
                continue
            found += 1
            name = query(fd, 0x06, 256).split(b'\0', 1)[0].decode(errors='replace')
            print('\nAppareil :', path, name)
            print('Instantané uniquement ; coordonnées des axes bruts du capteur, pas des pixels de l’écran.')
            if multi:
                count = absinfo(fd, 47)[2] + 1
                if not 1 <= count <= 256:
                    print('Nombre de slots non pris en charge :', count); continue
                tracking = slots(fd, 57, count)
                xs, ys = slots(fd, 53, count), slots(fd, 54, count)
                xr, yr = absinfo(fd, 53), absinfo(fd, 54)
                active = [i for i, value in enumerate(tracking) if value >= 0]
                print('Contacts actifs :', len(active))
                for i in active:
                    print('Slot', i, 'ID', tracking[i], 'X=', xs[i], position(xs[i], xr),
                          'Y=', ys[i], position(ys[i], yr))
            else:
                print('Pas de comptage de type B ; état monotactile uniquement.')
                x, y = absinfo(fd, 0), absinfo(fd, 1)
                print('X=', x[0], position(x[0], x), 'Y=', y[0], position(y[0], y))
            if touch_supported:
                state = query(fd, 0x18, 96)
                print('BTN_TOUCH:', bool(state[330 // 8] & (1 << (330 % 8))))
        except OSError as error:
            print(path, 'Impossible de lire ce périphérique :', error)
        finally:
            os.close(fd)
    if not found:
        print('Aucun périphérique pris en charge lu. Cela ne prouve pas une panne matérielle.')
    if denied:
        print('Accès refusé pour', denied, 'périphérique(s) d’entrée. Contactez l’assistance autorisée.')

if __name__ == '__main__':
    main()

PY

Vous pouvez effectuer le même contrôle avec le script de diagnostic à télécharger.

Note technique pour les administrateurs

Le script nécessite Linux, Python 3 et l’autorisation de lire /dev/input/event*. Il n’installe rien, ne modifie aucun calibrage, ne déconnecte aucun pilote et ne bloque pas les autres applications. La liste peut inclure d’autres périphériques de pointage ; identifiez le contrôleur par son nom. Le nombre de contacts peut manquer pour un type non pris en charge. En cas de refus d’accès, demandez de l’aide plutôt que de modifier largement les permissions.

Si la console renvoie uniquement SEND OK

Un accusé d’envoi n’est ni un résultat de commande ni une preuve de fin. Si la console cesse de répondre, notamment après l’arrêt de l’application d’affichage, n’interprétez pas le silence comme un diagnostic vide. Prévoyez une vérification indépendante via un accès autorisé ou sur place. Consultez aussi les conseils d’utilisation de la console.

3. Interpréter les contacts et coordonnées

Éléments à repérerSignification
AppareilNom et identifiant du périphérique sous Linux. Repérez le contrôleur tactile par son nom.
Contacts actifsNombre de contacts signalés par un contrôleur multipoint pris en charge. Il doit être nul sans toucher.
Slot / IDIdentifie un contact, pas un emplacement numéroté de l’écran.
X / YPosition signalée par le capteur. Les pourcentages ne sont pas automatiquement des pixels ou distances depuis la gauche et le haut.
BTN_TOUCHTrue indique un toucher signalé et False son absence, si le périphérique fournit cette information.

Résultat illustratif, pas une mesure de votre appareil :

Appareil : /dev/input/eventN Contrôleur tactile d’exemple
Contacts actifs : 1
Slot 0 ID 12 X= 600 50.0% Y= 1100 100.0%
BTN_TOUCH: True

Suite à donner au résultat

  • Des contacts restent signalés sans toucher : comparez leurs positions à des touchers connus et inspectez la zone, le bord ou le boîtier. C’est une piste, pas la confirmation de saleté ou de panne.
  • Les contacts correspondent aux touchers mais l’application ne répond pas : vérifiez l’orientation et la correspondance dans les paramètres d’orientation tactile. Un instantané correct ne prouve pas une réponse correcte de l’application.
  • Périphérique absent ou lecture impossible : conservez le résultat et envoyez-le au fournisseur. Permissions, type non pris en charge ou connexion peuvent être en cause ; la liste seule ne prouve pas une panne.
Note technique pour les administrateurs

X et Y sont les axes bruts du capteur ; les pourcentages indiquent la position dans la plage du pilote. Ce ne sont pas automatiquement des pixels ou des distances depuis la gauche et le haut. Rotation, calibrage et correspondance peuvent modifier ce lien. Comparez des touchers connus pour situer un point physique. La lecture n’est pas atomique : recommencez si les contacts bougent.

Un contact persistant sans toucher peut orienter l’inspection vers un endroit précis et tester les hypothèses avant une mise à jour du firmware ou un remplacement sans preuve. Il n’établit pas que la cause soit la saleté, la pression, l’état du contrôleur ou une panne. Zéro contact à un instant n’exclut pas un problème intermittent ; une entrée non détectée ou une erreur de lecture ne prouve pas une panne matérielle.

Exemple : contacts sans toucher l’écran

Lors d’un contrôle, le contrôleur signalait quatre contacts près du bord inférieur et BTN_TOUCH: True sans toucher. Après une réinitialisation logicielle, ils revenaient avec de nouveaux identifiants. Cela confirme les contacts signalés, pas leur cause. De nouveaux identifiants ou un autre fichier event ne prouvent pas la résolution. Comparez une nouvelle lecture et inspectez la zone du boîtier avant d’autres réglages.

4. Inspecter la surface et le boîtier

Inspectez la surface et les bords : saleté, humidité, objets collés ou pression du boîtier. Suivez les consignes de nettoyage du fabricant. Pour une porte avec film tactile, vérifiez si le problème a commencé après maintenance ou changement de position.

5. Rétablir correctement l’état initial

Consignez l’état avant et après chaque intervention. L’identifiant /dev/input/eventN peut changer après redémarrage ou reconnexion. Identifiez à nouveau le contrôleur par son nom plutôt que de réutiliser un ancien numéro. Réinitialiser un pilote peut laisser le contrôleur alimenté et ne garantit pas une réinitialisation matérielle complète.

Certaines conceptions adaptent automatiquement le contrôleur à la mise sous tension. Déplacer ensuite une porte ou le film peut être lié à de faux contacts. Ce n’est pas universel : confirmez la procédure avec le fournisseur matériel.

Terminez la maintenance, fermez les portes et laissez le boîtier en position normale. Si le fabricant recommande une coupure complète, elle doit inclure le contrôleur tactile, éventuellement alimenté par USB. Redémarrer le lecteur ne coupe pas forcément cette alimentation. Une personne autorisée doit suivre la procédure prévue ; ne déplacez pas le boîtier après remise sous tension.

La récupération USB à distance dépend du câblage et peut déconnecter d’autres périphériques. Ce guide ne fournit donc ni commande universelle de réinitialisation ni instruction de mise à jour du firmware.

Rubriques associées et prochaines étapes

6. Vérifier le résultat et transmettre les constats

Comparez à nouveau l’état sans toucher et plusieurs touchers connus. Envoyez à l’assistance le nom du contrôleur, le résultat, les symptômes, l’orientation et la dernière intervention. Précisez si la coupure complète a aidé et si bouger une porte affecte le problème. Prévoyez une inspection matérielle s’il persiste.

Vous n’avez pas trouvé ce que vous cherchiez ?
Contactez votre fournisseur de logiciel.