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.
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()
PYVous 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.
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érer | Signification |
|---|---|
Appareil | Nom et identifiant du périphérique sous Linux. Repérez le contrôleur tactile par son nom. |
Contacts actifs | Nombre de contacts signalés par un contrôleur multipoint pris en charge. Il doit être nul sans toucher. |
Slot / ID | Identifie un contact, pas un emplacement numéroté de l’écran. |
X / Y | Position signalée par le capteur. Les pourcentages ne sont pas automatiquement des pixels ou distances depuis la gauche et le haut. |
BTN_TOUCH | True 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
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.
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.
← Retour à la résolution des problèmes
Contactez votre fournisseur de logiciel.
