Dokumentácia / Riešenie problémov / Ako zistiť, čo hlási dotyková obrazovka

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.
Oddeľte dotykový vstup od reakcie aplikácie

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()

PY

Rovnakú 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.

Keď konzola vracia iba SEND OK

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á
DeviceNázov a označenie vstupného zariadenia v Linuxe. Podľa názvu vyhľadajte svoj dotykový radič.
Active contactsPočet práve hlásených kontaktov pri podporovanom viacdotykovom radiči. Bez dotýkania očakávate nulu.
Slot / IDOznačenie jednotlivého kontaktu; nie je to číslo miesta na obrazovke.
X / YPoloha hlásená snímačom. Percentá nie sú automaticky pixely ani vzdialenosť zľava a zhora.
BTN_TOUCHTrue 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

Ako podľa výsledku pokračovať

  • Kontakty zostávajú hlásené, aj keď sa nikto nedotýka: porovnajte ich polohu so známymi dotykmi a prezrite zodpovedajúce miesto, okraj alebo konštrukciu. Je to stopa na kontrolu, nie potvrdenie nečistoty alebo poruchy.
  • Kontakty zodpovedajú skutočným dotykom, ale aplikácia nereaguje: pokračujte overením orientácie a mapovania v nastavení orientácie dotykovej vrstvy. Správny snímok vstupu sám nepotvrdzuje správnu reakciu aplikácie.
  • Zariadenie nie je uvedené alebo čítanie skončí chybou: uložte výstup a odovzdajte ho poskytovateľovi. Môže ísť o oprávnenia, nepodporovaný vstup alebo pripojenie; samotný výpis nepreukazuje poruchu.
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.

Príklad: kontakty zostávajú hlásené bez dotyku

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.

Nenašli ste, čo ste hľadali?
Obráťte sa na svojho poskytovateľa softvéru.