Ako zistiť, čo hlási dotyková obrazovka
Úvod a orientácia
Najprv overíte, či Linux vidí dotykové zariadenie. Potom porovnáte hlásené dotyky v dvoch situáciách: keď sa obrazovky nikto nedotýka a keď ju človek na mieste vedome stlačí. Zistíte tak, či radič hlási dotyky, ktoré nezodpovedajú skutočnosti; nezistíte tým automaticky príčinu ani spôsob opravy.
Postup kontroly a riešenia
Vzdialená konzola a nástroje Linuxu môžu pomôcť zistiť, čo sa s dotykom deje — z kancelárie aj pri zásahu na mieste. Diagnostika pomáha overiť predpoklady pred aktualizáciou firmvéru, zmenou kalibrácie či výmenou dotykovej vrstvy a môže zabrániť zbytočnému zásahu. Sama však nenahrádza kontrolu hardvéru.
Začnite monitoringom, pokračujte konkrétnou otázkou
Najprv v monitoringu zariadenia overte čas posledného hlásenia a pripojené USB zariadenia. Rozpoznaný radič ešte neznamená, že hlási správne dotyky. Práve to overíte nižšie.
1. Rozlíšte prejav problému
- Žiadna reakcia: overte rozpoznanie a pripojenie dotykového zariadenia.
- Reakcia na inom mieste: preverte orientáciu a mapovanie dotyku v nastavení zariadenia.
- Nepravidelné či samovoľné reakcie: porovnajte kontakty bez dotýkania a pri skutočnom dotyku.
- Oneskorenie: rozlíšte oneskorený vstup od pomalej reakcie aplikácie; samotná snímka stavu časové oneskorenie nezmeria.
Ak vzdialená myš funguje, ale fyzický dotyk nie, samo osebe to nepotvrdzuje poruchu dotykovej vrstvy. Porovnajte hlásenie vstupu v Linuxe s reakciou aplikácie. Na Waylande nemusí zmena nastavení XInput ovplyvniť vstup používaný prehrávačom; opätovné nastavenie rovnakej matice nie je opravou.
2. Zistite, čo hlási dotykové zariadenie
Nižšie rozbaľte príkaz a spustite ho vo vzdialenej konzole. Vypíše jednorazový stav, nič nenastavuje. Najprv zabezpečte, aby sa obrazovky nikto nedotýkal, a výstup uložte. Potom ho s pomocou človeka na mieste zopakujte počas dotyku na známom mieste. Príkaz nezaznamenáva priebeh medzi týmito dvoma meraniami.
Zobraziť príkaz na jednorazovú kontrolu
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()
PYRovnakú kontrolu môžete spustiť aj pomocou diagnostického skriptu na stiahnutie.
Technická poznámka pre správcu
Skript vyžaduje Linux, Python 3 a oprávnenie čítať /dev/input/event*. Nič neinštaluje, nemení kalibráciu, neodpája ovládač a neblokuje vstup ostatným aplikáciám. Vo výpise môžu byť aj iné polohovacie vstupy; správny radič určite podľa názvu. Pri nepodporovanom type vstupu nemusí byť dostupný počet kontaktov. Pri chybe oprávnenia nemeňte plošne prístupové práva, požiadajte poskytovateľa o pomoc.
Potvrdenie o odoslaní nie je výstup príkazu ani dôkaz jeho dokončenia. Ak konzola prestane vracať výsledky, najmä po zastavení vykresľovacej aplikácie, nepovažujte ticho za prázdny diagnostický nález. Ďalšie overenie zabezpečte cez samostatný povolený servisný prístup alebo na mieste. Prečítajte si aj pravidlá používania vzdialenej konzoly.
3. Vyhodnoťte kontakty a súradnice
| Čo vo výpise hľadať | Čo to znamená |
|---|---|
Device | Názov a označenie vstupného zariadenia v Linuxe. Podľa názvu vyhľadajte svoj dotykový radič. |
Active contacts | Počet práve hlásených kontaktov pri podporovanom viacdotykovom radiči. Bez dotýkania očakávate nulu. |
Slot / ID | Označenie jednotlivého kontaktu; nie je to číslo miesta na obrazovke. |
X / Y | Poloha hlásená snímačom. Percentá nie sú automaticky pixely ani vzdialenosť zľava a zhora. |
BTN_TOUCH | True znamená hlásený dotyk, False jeho nehlásenie, ak zariadenie túto informáciu poskytuje. |
Ukážkový výstup, nie meranie vášho zariadenia:
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
Technická poznámka pre správcu
X a Y sú surové osi snímača; percentá vyjadrujú polohu v rozsahu hlásenom ovládačom. Nejde automaticky o pixely obrazovky ani vzdialenosť zľava a zhora. Rotácia, kalibrácia a mapovanie môžu polohu meniť. Na priradenie k fyzickému miestu porovnajte známe dotyky. Čítanie hodnôt nie je atomické: pri pohybe príkaz zopakujte.
Kontakt, ktorý zostáva hlásený bez dotýkania, môže nasmerovať kontrolu ku konkrétnemu miestu. Pomáha preveriť domnienky a predísť aktualizácii či výmene dielov naslepo. Sám nepotvrdzuje nečistotu, mechanické pôsobenie, stav riadiacej jednotky ani poruchu. Nulový počet v jednom okamihu nevylučuje občasný problém; nerozpoznaný vstup alebo chyba čítania nie sú dôkazom poruchy.
Pri jednom servisnom meraní radič bez dotýkania opakovane hlásil štyri aktívne kontakty pri dolnom okraji a BTN_TOUCH: True. Po softvérovom obnovení sa kontakty objavili znova s novými ID. Pozorovanie potvrdzuje hlásené kontakty, nie ich príčinu. Nové ID ani zmena názvu event súboru nie sú dôkazom odstránenia problému. Pred ďalšou zmenou nastavení preto porovnajte nové meranie a skontrolujte zodpovedajúce miesto na konštrukcii.
4. Skontrolujte plochu a konštrukciu
Prezrite plochu a okraje: nečistoty, vlhkosť, prilepené predmety či tlak konštrukcie. Čistite podľa pokynov výrobcu. Pri dvierkach s dotykovou fóliou zistite, či problém nezačal po servise alebo zmene ich polohy.
5. Obnovte východiskový stav vhodným postupom
Zaznamenajte stav pred zásahom a po ňom. Po reštarte alebo opätovnom pripojení sa označenie /dev/input/eventN môže zmeniť. Vyhľadajte radič znova podľa názvu; nekopírujte slepo skoršie číslo vstupu. Samotné obnovenie softvérového ovládača nemusí odpojiť napájanie radiča a nie je zárukou jeho úplného resetu.
Pri niektorých konštrukciách môže pri zapnutí prebiehať automatické prispôsobenie dotykovej riadiacej jednotky. Pohyb dvierok či fólie po spustení môže pri týchto zariadeniach súvisieť s falošnými kontaktmi. Nejde o univerzálnu vlastnosť: postup potvrďte s dodávateľom hardvéru.
Najprv dokončite servis, uzavrite dvierka a ponechajte konštrukciu v bežnej prevádzkovej polohe. Ak výrobca odporúča úplné odpojenie napájania, musí zahŕňať aj dotykovú riadiacu jednotku, prípadne napájanú cez USB. Reštart prehrávača nemusí jej napájanie prerušiť. Použite určený postup a oprávnenú osobu; po opätovnom zapnutí s konštrukciou nemanipulujte.
Vzdialené obnovenie USB závisí od konkrétneho zapojenia a môže odpojiť aj ďalšie zariadenia. Tento návod preto neobsahuje univerzálny resetovací príkaz ani pokyn na aktualizáciu firmvéru.
Súvisiace témy a ďalšie kroky
6. Overte výsledok a odovzdajte podklady
Znova porovnajte stav bez dotýkania a niekoľko dotykov na známych miestach. Podpore odovzdajte názov ovládača, výstup, prejav, orientáciu obrazovky a posledný servisný zásah. Uveďte, či pomohlo úplné odpojenie a či problém súvisí s pohybom dvierok. Ak porucha pretrváva, dohodnite kontrolu hardvéru.
Obráťte sa na svojho poskytovateľa softvéru.
