Come leggere i report degli input touch
Introduzione e orientamento
Verifichi prima se Linux rileva il dispositivo touch. Confronti poi i contatti segnalati in due situazioni: quando nessuno tocca lo schermo e quando una persona sul posto tocca intenzionalmente un punto noto. Questo mostra se il controller segnala contatti che non corrispondono alla realtà; non identifica automaticamente la causa o una riparazione.
Controlli e risoluzione dei problemi
La console remota e gli strumenti Linux aiutano a capire che cosa accade all'input touch, dall'ufficio o durante una visita sul posto. La diagnostica consente di verificare le ipotesi prima di aggiornare il firmware, ricalibrare o sostituire il sistema touch, evitando potenzialmente lavori inutili. Non sostituisce la verifica dell'hardware.
Partire dal monitoraggio, poi porre una domanda specifica
Controlli prima l'orario dell'ultimo report e i dispositivi USB collegati nel monitoraggio dei dispositivi. Un controller riconosciuto non garantisce tocchi corretti. Il controllo seguente aiuta proprio a verificarli.
1. Identificare i sintomi
- Nessuna risposta: controlli che il dispositivo touch sia rilevato e collegato.
- Risposta nel punto sbagliato: controlli orientamento e mappatura del tocco nelle impostazioni del dispositivo.
- Risposte irregolari o spontanee: confronti i contatti segnalati senza nessuno che tocchi lo schermo e durante un tocco intenzionale.
- Ritardo: distingua un input ritardato da una risposta lenta dell'applicazione; una singola rilevazione dello stato non misura la latenza.
Se un mouse remoto funziona ma il tocco fisico no, questo non conferma da solo un pannello touch guasto. Confronti l'input segnalato da Linux con la risposta dell'applicazione. In Wayland, modificare le impostazioni XInput potrebbe non influire sull'input utilizzato dal player; reimpostare la stessa matrice non è una riparazione.
2. Verificare che cosa segnala il dispositivo touch
Espanda il comando seguente e lo esegua nella console remota. Acquisisce una sola rilevazione e non modifica nulla. Si assicuri prima che nessuno tocchi lo schermo e salvi l'output. Lo ripeta poi con una persona che tocca un punto noto sul posto. Il comando non registra che cosa accade tra le due letture.
Mostra il comando per una verifica singola
python3 - <<'PY'
#!/usr/bin/env python3
"""Read-only Linux evdev snapshot. No reset, grab, calibration or writes.
Requires Python 3, Linux generic ioctl layout (e.g. x86/ARM) and permission
to read /dev/input/event*. Type-B contacts are queried from kernel state.
Raw axes precede compositor rotation/calibration. Run again to compare.
"""
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('\nDevice:', path, name)
print('Snapshot only; coordinates are raw sensor axes, not screen pixels.')
if multi:
count = absinfo(fd, 47)[2] + 1
if not 1 <= count <= 256:
print('Unsupported slot count:', 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('Active contacts:', 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('No type-B contact count; single-touch state only.')
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, 'Cannot read this device:', error)
finally:
os.close(fd)
if not found:
print('No supported candidate read. This does not prove hardware failure.')
if denied:
print('Permission denied for', denied, 'input device(s). Contact authorised support.')
if __name__ == '__main__':
main()
PYPuò eseguire la stessa verifica con lo script diagnostico scaricabile.
Nota tecnica per gli amministratori
Lo script richiede Linux, Python 3 e l'autorizzazione a leggere /dev/input/event*. It installs nothing, changes no calibration, disconnects no driver and does not block input to other applications. The list may include other pointing inputs; identify the correct controller by name. The contact count may be unavailable for an unsupported input type. If permission is denied, ask your provider for help rather than broadly changing access permissions.
Una conferma di invio non è l'output del comando né la prova del completamento. Se la console smette di restituire risultati, soprattutto dopo l'arresto dell'applicazione di rendering, non interpreti il silenzio come un risultato diagnostico vuoto. Predisponga una verifica indipendente tramite un collegamento di manutenzione autorizzato o sul posto. Consulti anche le indicazioni per l'uso della console remota.
3. Interpretare contatti e coordinate
| Che cosa cercare | Che cosa significa |
|---|---|
Device | Nome e identificatore del dispositivo di input in Linux. Individui il controller touch per nome. |
Active contacts | Il numero di contatti attualmente segnalati da un controller multitouch supportato. Ci si aspetta zero quando nessuno lo tocca. |
Slot / ID | Identifica un contatto; non è una posizione numerata sullo schermo. |
X / Y | La posizione segnalata dal sensore. Le percentuali non sono automaticamente pixel o distanze da sinistra e dall'alto. |
BTN_TOUCH | True significa che viene segnalato un tocco e False che non viene segnalato, quando il dispositivo fornisce questa informazione. |
Output illustrativo, non una misurazione del Suo dispositivo:
Device: /dev/input/eventN Example touch controller Active contacts: 1 Slot 0 ID 12 X= 600 50.0% Y= 1100 100.0% BTN_TOUCH: True
Nota tecnica per gli amministratori
X e Y sono assi grezzi del sensore; le percentuali descrivono la posizione nell'intervallo segnalato dal driver. Non sono automaticamente pixel dello schermo o distanze da sinistra e dall'alto. Rotazione, calibrazione e mappatura possono modificarne il rapporto. Confronti tocchi noti per localizzare un punto fisico. I valori non vengono letti atomicamente: ripeta il comando se i contatti si muovono.
Un contatto persistente senza tocco può indirizzare l'ispezione verso una posizione specifica. Aiuta a verificare le ipotesi prima di aggiornare il firmware o sostituire componenti senza riscontri. Non stabilisce come causa sporco, pressione meccanica, stato del controller o guasto. Zero contatti in un momento non escludono problemi intermittenti; un input non rilevato o un errore di lettura non dimostrano un guasto hardware.
Durante una verifica di assistenza, il controller segnalava ripetutamente quattro contatti attivi vicino al bordo inferiore e BTN_TOUCH: True mentre nessuno toccava lo schermo. Dopo un reset software, i contatti ricomparivano con nuovi ID. Questo conferma i contatti segnalati, non la loro causa. Nuovi ID o un diverso nome del file event non dimostrano che il problema sia risolto. Confronti una nuova lettura e ispezioni l'area corrispondente dell'involucro prima di cambiare altre impostazioni.
4. Ispezionare superficie e involucro
Controlli superficie e bordi per individuare sporco, umidità, oggetti attaccati o pressione dell'involucro. Segua le istruzioni di pulizia del produttore. Per gli sportelli con pellicola touch, stabilisca se il problema sia iniziato dopo un intervento o un cambio di posizione.
5. Ripristinare correttamente lo stato iniziale
Registri lo stato prima e dopo ogni intervento. L'identificatore /dev/input/eventN può cambiare dopo un riavvio o una riconnessione. Identifichi nuovamente il controller per nome, senza riutilizzare alla cieca il numero di input precedente. Il reset di un driver software può lasciare alimentato il controller e non garantisce un reset hardware completo.
Alcuni dispositivi possono adattare automaticamente il controller touch all'accensione. Muovere in seguito uno sportello o una pellicola può essere associato a falsi contatti su quei dispositivi. Non è una regola universale: confermi la procedura con il fornitore dell'hardware.
Completi prima l'intervento, chiuda gli sportelli e lasci l'involucro nella posizione di funzionamento normale. Se il produttore raccomanda la disconnessione completa dell'alimentazione, questa deve comprendere il controller touch, che può essere alimentato tramite USB. Riavviare il player potrebbe non interrompere quell'alimentazione. Una persona autorizzata deve seguire la procedura prevista; non sposti l'involucro dopo la riaccensione.
Il ripristino remoto dell'USB dipende dal cablaggio e può disconnettere altri dispositivi. Questa guida non fornisce quindi un comando di reset universale né un'istruzione di aggiornamento del firmware.
Argomenti correlati e passi successivi
6. Controllare il risultato e condividere le osservazioni
Confronti nuovamente lo stato senza tocchi con diversi tocchi in posizioni note. Invii all'assistenza nome del controller, output, sintomi, orientamento dello schermo e ultimo intervento. Indichi se la disconnessione completa dell'alimentazione è servita e se muovere uno sportello influisce sul problema. Se persiste, concordi una verifica dell'hardware.
← Torna a Risoluzione dei problemi
Contatti il Suo fornitore del software.
