Kako provjeriti što prijavljuje dodirni zaslon
Uvod i orijentacija
Najprije provjerite vidi li Linux dodirni uređaj. Zatim usporedite prijavljene kontakte kada nitko ne dodiruje zaslon i kada osoba na lokaciji svjesno dodirne poznatu točku. Tako ćete vidjeti prijavljuje li kontroler kontakte koji ne odgovaraju stvarnosti; time ne utvrđujete automatski uzrok ni način popravka.
Provjera i rješavanje problema
Udaljena konzola i alati Linuxa mogu pomoći otkriti što se događa s dodirom — iz ureda ili tijekom pregleda na lokaciji. Dijagnostika pomaže provjeriti pretpostavke prije ažuriranja firmvera, promjene kalibracije ili zamjene dodirnog sloja i može spriječiti nepotreban zahvat. Ne zamjenjuje pregled hardvera.
Počnite nadzorom, zatim postavite konkretno pitanje
Najprije u nadzoru uređaja provjerite vrijeme posljednjeg izvještaja i priključene USB uređaje. Prepoznat kontroler još ne znači da prijavljuje ispravne dodire. To ćete provjeriti u nastavku.
1. Razlikujte simptome
- Nema reakcije: provjerite prepoznavanje i povezanost dodirnog uređaja.
- Reakcija na pogrešnom mjestu: provjerite orijentaciju i mapiranje dodira u postavkama uređaja.
- Nepravilne ili samovoljne reakcije: usporedite prijavljene kontakte bez dodirivanja i pri namjernom dodiru.
- Kašnjenje: razlikujte zakašnjeli ulaz od spore reakcije aplikacije; jednokratno očitanje stanja ne mjeri kašnjenje.
Ako udaljeni miš radi, a fizički dodir ne, to samo po sebi ne potvrđuje kvar dodirne površine. Usporedite ulaz koji prijavljuje Linux s reakcijom aplikacije. U okruženju Wayland promjena postavki XInputa ne mora utjecati na ulaz koji koristi reproduktor; ponovno postavljanje iste matrice nije popravak.
2. Provjerite što prijavljuje dodirni uređaj
Proširite naredbu u nastavku i pokrenite je u udaljenoj konzoli. Ispisuje jednokratni snimak stanja i ništa ne mijenja. Najprije osigurajte da nitko ne dodiruje zaslon i spremite izlaz. Zatim ponovite uz dodir osobe na lokaciji na poznatoj točki. Naredba ne bilježi događaje između tih dvaju očitanja.
Prikaži naredbu za jednokratnu provjeru
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()
PYIstu provjeru možete pokrenuti i pomoću dijagnostičke skripte za preuzimanje.
Tehnička napomena za administratore
Skripta zahtijeva Linux, Python 3 i ovlast za čitanje /dev/input/event*. Ništa ne instalira, ne mijenja kalibraciju, ne odspaja upravljački program i ne blokira ulaz drugim aplikacijama. Ispis može sadržavati i druge pokazivačke ulaze; ispravan kontroler odredite prema nazivu. Za nepodržanu vrstu ulaza broj kontakata možda nije dostupan. Ako nedostaje ovlast, zatražite pomoć pružatelja softvera umjesto promjene pristupnih dozvola za sve uređaje.
Potvrda slanja nije izlaz naredbe niti dokaz da je izvršena. Ako konzola prestane vraćati rezultate, osobito nakon zaustavljanja aplikacije za prikaz, izostanak odgovora nemojte tumačiti kao prazan dijagnostički nalaz. Osigurajte neovisnu provjeru putem zasebnog odobrenog servisnog pristupa ili na lokaciji. Pogledajte i upute za korištenje udaljene konzole.
3. Protumačite kontakte i koordinate
| Što potražiti u ispisu | Što to znači |
|---|---|
Device | Naziv i oznaka ulaznog uređaja u Linuxu. Pronađite svoj dodirni kontroler prema nazivu. |
Active contacts | Broj trenutačno prijavljenih kontakata za podržani višedodirni kontroler. Bez dodira očekujete nulu. |
Slot / ID | Oznaka pojedinog kontakta; nije broj mjesta na zaslonu. |
X / Y | Položaj koji prijavljuje senzor. Postoci nisu automatski pikseli ni udaljenosti slijeva i odozgo. |
BTN_TOUCH | True znači prijavljen dodir, a False da nije prijavljen, ako uređaj pruža taj podatak. |
Primjer ispisa, a ne mjerenje s vašeg uređaja:
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
Tehnička napomena za administratore
X i Y su sirove osi senzora; postoci označavaju položaj unutar raspona koji prijavljuje upravljački program. To nisu automatski pikseli zaslona ni udaljenosti slijeva i odozgo. Rotacija, kalibracija i mapiranje mogu promijeniti odnos. Za pronalaženje fizičkog mjesta usporedite poznate dodire. Vrijednosti se ne čitaju istodobno: ponovite naredbu ako se kontakti pomiču.
Kontakt koji ostaje prijavljen bez dodirivanja može usmjeriti pregled na određeno mjesto. Pomaže provjeriti pretpostavke prije ažuriranja ili zamjene dijelova bez dokaza. Sam ne potvrđuje nečistoću, mehanički pritisak, stanje kontrolera ni kvar. Nula kontakata u jednom trenutku ne isključuje povremeni problem; neprepoznat ulaz ili pogreška čitanja ne dokazuju kvar hardvera.
Tijekom jedne servisne provjere kontroler je bez dodirivanja opetovano prijavljivao četiri aktivna kontakta uz donji rub i BTN_TOUCH: True. Nakon softverskog ponovnog pokretanja kontakti su se vratili s novim ID-ovima. To potvrđuje prijavljene kontakte, ali ne i njihov uzrok. Novi ID-ovi ili promjena naziva event datoteke ne dokazuju da je problem riješen. Prije daljnjih promjena postavki usporedite novo očitanje i pregledajte odgovarajuće mjesto na konstrukciji.
4. Pregledajte površinu i kućište
Pregledajte površinu i rubove: nečistoću, vlagu, zalijepljene predmete ili pritisak kućišta. Čistite prema uputama proizvođača. Kod vrata s dodirnom folijom utvrdite je li problem počeo nakon servisa ili promjene položaja.
5. Primjereno obnovite početno stanje
Zabilježite stanje prije i nakon zahvata. Oznaka /dev/input/eventN može se promijeniti nakon ponovnog pokretanja ili spajanja. Ponovno pronađite kontroler prema nazivu; nemojte naslijepo koristiti prethodni broj ulaza. Ponovno pokretanje softverskog upravljačkog programa ne mora prekinuti napajanje kontrolera i ne jamči njegovo potpuno ponovno pokretanje.
Neke izvedbe mogu automatski prilagođavati dodirni kontroler pri uključivanju. Pomicanje vrata ili folije nakon toga kod tih uređaja može biti povezano s lažnim kontaktima. To nije univerzalno svojstvo: postupak potvrdite s dobavljačem hardvera.
Najprije dovršite servis, zatvorite vrata i ostavite kućište u uobičajenom radnom položaju. Ako proizvođač preporučuje potpuno isključivanje napajanja, ono mora obuhvatiti i dodirni kontroler, koji se može napajati USB-om. Ponovno pokretanje reproduktora možda neće prekinuti to napajanje. Ovlaštena osoba mora slijediti predviđeni postupak; nakon uključivanja nemojte pomicati konstrukciju.
Udaljena obnova USB veze ovisi o spoju i može odspojiti i druge uređaje. Zato ovaj vodič ne sadrži univerzalnu naredbu za ponovno postavljanje ni uputu za ažuriranje firmvera.
Povezane teme i sljedeći koraci
6. Provjerite rezultat i predajte nalaze
Ponovno usporedite stanje bez dodirivanja i nekoliko dodira na poznatim mjestima. Podršci pošaljite naziv kontrolera, ispis, simptome, orijentaciju zaslona i posljednji servisni zahvat. Navedite je li potpuno isključivanje napajanja pomoglo i utječe li pomicanje vrata na problem. Ako problem ostane, dogovorite pregled hardvera.
← Natrag na rješavanje problema
Obratite se svojem pružatelju softvera.
