Jak zjistit, co hlásí dotyková obrazovka
Úvod a orientace
Nejprve ověříte, zda Linux vidí dotykové zařízení. Potom porovnáte hlášené dotyky ve dvou situacích: když se obrazovky nikdo nedotýká a když ji člověk na místě vědomě stiskne. Zjistíte tak, zda řadič hlásí dotyky, které neodpovídají skutečnosti; nezjistíte tím automaticky příčinu ani způsob opravy.
Postup kontroly a řešení
Vzdálená konzola a nástroje Linuxu mohou pomoci zjistit, co se s dotykem děje — z kanceláře i při zásahu na místě. Diagnostika pomáhá ověřit předpoklady před aktualizací firmwaru, změnou kalibrace či výměnou dotykové vrstvy a může zabránit zbytečnému zásahu. Sama však nenahrazuje kontrolu hardwaru.
Začněte monitoringem, pokračujte konkrétní otázkou
Nejprve v monitoringu zařízení ověřte čas posledního hlášení a připojená USB zařízení. Rozpoznaný řadič ještě neznamená, že hlásí správné dotyky. Právě to ověříte níže.
1. Rozlište projev problému
- Žádná reakce: ověřte, zda je dotykové zařízení rozpoznáno a připojeno.
- Reakce na jiném místě: prověřte orientaci a mapování dotyku v nastavení zařízení.
- Nepravidelné či samovolné reakce: porovnejte kontakty bez dotýkání a při skutečném dotyku.
- Zpoždění: rozlište opožděný vstup od pomalé reakce aplikace; samotný snímek stavu časové zpoždění nezměří.
Pokud vzdálená myš funguje, ale fyzický dotyk ne, samo o sobě to nepotvrzuje závadu dotykové vrstvy. Porovnejte hlášení vstupu v Linuxu s reakcí aplikace. Na Waylandu nemusí změna nastavení XInput ovlivnit vstup, který používá přehrávač; opětovné nastavení stejné matice není opravou.
2. Zjistěte, co hlásí dotykové zařízení
Níže rozbalte příkaz a spusťte jej ve vzdálené konzole. Vypíše jednorázový stav, nic nenastavuje. Nejprve zajistěte, aby se obrazovky nikdo nedotýkal, a výstup uložte. Potom jej s pomocí člověka na místě zopakujte během dotyku na známém místě. Příkaz nezaznamenává průběh mezi těmito dvěma měřeními.
Zobrazit příkaz pro jednorázovou 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()
PYStejnou kontrolu můžete spustit i pomocí diagnostického skriptu ke stažení.
Technická poznámka pro správce
Skript vyžaduje Linux, Python 3 a oprávnění číst /dev/input/event*. Nic neinstaluje, nemění kalibraci, neodpojuje ovladač a neblokuje vstup ostatním aplikacím. Ve výpisu mohou být i jiné polohovací vstupy; správný řadič určete podle názvu. U nepodporovaného typu vstupu nemusí být dostupný počet kontaktů. Při chybě oprávnění neměňte plošně přístupová práva, požádejte poskytovatele o pomoc.
Potvrzení o odeslání není výstup příkazu ani důkaz jeho dokončení. Pokud konzola přestane vracet výsledky, zejména po zastavení vykreslovací aplikace, nepovažujte ticho za prázdný diagnostický nález. Další ověření zajistěte přes samostatný povolený servisní přístup nebo na místě. Přečtěte si také pravidla používání vzdálené konzole.
3. Vyhodnoťte kontakty a souřadnice
| Co ve výpisu hledat | Co to znamená |
|---|---|
Device | Název a označení vstupního zařízení v Linuxu. Podle názvu vyhledejte svůj dotykový řadič. |
Active contacts | Počet právě hlášených kontaktů u podporovaného vícedotykového řadiče. Bez dotýkání očekáváte nulu. |
Slot / ID | Označení jednotlivého kontaktu; není to číslo místa na obrazovce. |
X / Y | Poloha hlášená snímačem. Procenta nejsou automaticky pixely ani vzdálenost zleva a shora. |
BTN_TOUCH | True znamená hlášený dotyk, False jeho nehlášení, pokud zařízení tuto informaci poskytuje. |
Ukázkový výstup, nikoli měření vašeho zařízení:
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 pro správce
X a Y jsou surové osy snímače; procenta vyjadřují polohu v rozsahu hlášeném ovladačem. Nejde automaticky o pixely obrazovky ani vzdálenost zleva a shora. Rotace, kalibrace a mapování mohou polohu měnit. Pro přiřazení k fyzickému místu porovnejte známé dotyky. Čtení jednotlivých hodnot není atomické: při pohybu příkaz zopakujte.
Kontakt, který zůstává hlášený bez dotýkání, může nasměrovat kontrolu ke konkrétnímu místu. Pomáhá prověřit domněnky a předejít aktualizaci či výměně dílů naslepo. Sám nepotvrzuje nečistotu, mechanické působení, stav řídicí jednotky ani závadu. Nulový počet v jednom okamžiku nevylučuje občasný problém; nerozpoznaný vstup nebo chyba čtení nejsou důkazem poruchy.
Při jednom servisním měření řadič bez dotýkání opakovaně hlásil čtyři aktivní kontakty u dolního okraje a BTN_TOUCH: True. Po softwarovém obnovení se kontakty objevily znovu s novými ID. Pozorování potvrzuje hlášené kontakty, nikoli jejich příčinu. Nová ID ani změna názvu event souboru nejsou důkazem odstranění problému. Před další změnou nastavení proto porovnejte nové měření a zkontrolujte odpovídající místo na konstrukci.
4. Zkontrolujte plochu a konstrukci
Prohlédněte plochu a okraje: nečistoty, vlhkost, přilepené předměty či tlak konstrukce. Čistěte podle pokynů výrobce. U dvířek s dotykovou fólií zjistěte, zda problém nezačal po servisu nebo změně jejich polohy.
5. Obnovte výchozí stav vhodným postupem
Zaznamenejte stav před zásahem a po něm. Po restartu nebo opětovném připojení se označení /dev/input/eventN může změnit. Vyhledejte řadič znovu podle názvu; nekopírujte slepě dřívější číslo vstupu. Samotné obnovení softwarového ovladače nemusí odpojit napájení řadiče a není zárukou jeho úplného resetu.
U některých konstrukcí může při zapnutí probíhat automatické přizpůsobení dotykové řídicí jednotky. Pohyb dvířek či fólie po spuštění může u těchto zařízení souviset s falešnými kontakty. Nejde o univerzální vlastnost: postup potvrďte s dodavatelem hardwaru.
Nejprve dokončete servis, uzavřete dvířka a ponechte konstrukci v běžné provozní poloze. Pokud výrobce doporučuje úplné odpojení napájení, musí zahrnovat i dotykovou řídicí jednotku, případně napájenou přes USB. Restart přehrávače nemusí její napájení přerušit. Použijte určený postup a oprávněnou osobu; po opětovném zapnutí s konstrukcí nemanipulujte.
Vzdálené obnovení USB závisí na konkrétním zapojení a může odpojit i další zařízení. Tento návod proto neobsahuje univerzální resetovací příkaz ani pokyn k aktualizaci firmwaru.
Související témata a další kroky
6. Ověřte výsledek a předejte podklady
Znovu porovnejte stav bez dotýkání a několik dotyků na známých místech. Podpoře předejte název ovladače, výstup, projev, orientaci obrazovky a poslední servisní zásah. Uveďte, zda pomohlo úplné odpojení a zda problém souvisí s pohybem dvířek. Přetrvává-li závada, domluvte kontrolu hardwaru.
Obraťte se na svého poskytovatele softwaru.
