So lesen Sie Berichte zu Touch-Eingaben
Einführung und Überblick
Prüfen Sie zunächst, ob Linux das Touchgerät erkennt. Vergleichen Sie gemeldete Kontakte, wenn niemand den Bildschirm berührt und wenn jemand vor Ort gezielt einen bekannten Punkt berührt. So erkennen Sie, ob der Controller von der Realität abweichende Kontakte meldet. Ursache und Reparatur werden dadurch nicht automatisch bestimmt.
Prüfungen und Fehlerbehebung
Remote-Konsole und Linux-Werkzeuge helfen, Touch-Eingaben aus dem Büro oder vor Ort zu untersuchen. Die Diagnose prüft Annahmen vor Firmwareupdate, Neukalibrierung oder Austausch der Touch-Ebene und kann unnötige Arbeiten vermeiden. Sie ersetzt keine Hardwareprüfung.
Mit Monitoring beginnen und dann gezielt prüfen
Prüfen Sie zuerst Zeitstempel und angeschlossene USB-Geräte des neuesten Berichts unter Gerätemonitoring. Ein erkannter Controller meldet nicht zwingend korrekte Berührungen. Dies prüfen Sie im nächsten Schritt.
1. Symptome bestimmen
- Keine Reaktion: Prüfen Sie, ob das Touchgerät erkannt und verbunden ist.
- Reaktion an falscher Stelle: Prüfen Sie Touch-Ausrichtung und Zuordnung in den Geräteeinstellungen.
- Unregelmäßige oder ungewollte Reaktion: Vergleichen Sie Kontakte ohne Berührung und bei gezieltem Berühren.
- Verzögerung: Unterscheiden Sie verzögerte Eingabe von langsamer Anwendungsreaktion. Ein Zustandsabzug allein misst keine Latenz.
Funktioniert eine entfernte Maus, aber nicht die Berührung, beweist dies keinen Touchpaneldefekt. Vergleichen Sie die Linux-Eingabedaten mit der Anwendungsreaktion. Unter Wayland beeinflussen XInput-Änderungen möglicherweise nicht die vom Player verwendete Eingabe. Dieselbe Matrix erneut zu setzen ist keine Reparatur.
2. Meldungen des Touchgeräts prüfen
Öffnen Sie den folgenden Befehlsblock und führen Sie ihn in der Remote-Konsole aus. Er liest einmalig den Zustand aus und ändert nichts. Speichern Sie zuerst eine Ausgabe ohne Bildschirmberührung. Wiederholen Sie die Abfrage dann bei gezielter Berührung eines bekannten Punkts vor Ort. Vorgänge zwischen den beiden Abfragen werden nicht aufgezeichnet.
Befehl für eine einmalige Prüfung anzeigen
python3 - <<'PY'
#!/usr/bin/env python3
"""Linux-evdev-Zustandsabzug mit reinem Lesezugriff. Kein Reset, Grab, Kalibrieren oder Schreiben.
Benötigt Python 3, das generische Linux-ioctl-Layout (z. B. x86/ARM) und Leseberechtigung
für /dev/input/event*. Typ-B-Kontakte werden aus dem Kernelzustand abgefragt.
Rohe Achsen vor Rotation/Kalibrierung des Compositors. Zum Vergleich erneut ausführen.
"""
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('\nGerät:', path, name)
print('Nur Zustandsabzug; Koordinaten sind rohe Sensorachsen, keine Bildschirmpixel.')
if multi:
count = absinfo(fd, 47)[2] + 1
if not 1 <= count <= 256:
print('Nicht unterstützte Slotanzahl:', 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('Aktive Kontakte:', 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('Keine Typ-B-Kontaktanzahl; nur Single-Touch-Zustand.')
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, 'Dieses Gerät kann nicht gelesen werden:', error)
finally:
os.close(fd)
if not found:
print('Kein unterstütztes Gerät ausgelesen. Dies beweist keinen Hardwaredefekt.')
if denied:
print('Zugriff verweigert bei', denied, 'Eingabegerät(en). Kontaktieren Sie den autorisierten Support.')
if __name__ == '__main__':
main()
PYDieselbe Prüfung können Sie auch durchführen mit dem herunterladbaren Diagnoseskript.
Technischer Hinweis für Administratoren
Das Skript benötigt Linux, Python 3 und Leseberechtigung für /dev/input/event*. Es installiert nichts, ändert keine Kalibrierung, trennt keinen Treiber und blockiert keine Eingaben anderer Anwendungen. Die Liste kann weitere Zeigegeräte enthalten. Identifizieren Sie den richtigen Controller am Namen. Bei nicht unterstützten Eingabetypen kann die Kontaktanzahl fehlen. Bitten Sie bei verweigertem Zugriff Ihren Anbieter um Hilfe, statt Berechtigungen pauschal zu ändern.
Eine Versandbestätigung ist weder Befehlsausgabe noch Abschlussnachweis. Liefert die Konsole keine Ergebnisse mehr, insbesondere nach dem Stoppen der Anzeigeanwendung, ist Schweigen kein leerer Diagnosebefund. Vereinbaren Sie eine unabhängige Prüfung über einen berechtigten Wartungszugang oder vor Ort. Siehe auch Hinweise zur Remote-Konsole.
3. Kontakte und Koordinaten auswerten
| Worauf Sie achten sollten | Bedeutung |
|---|---|
Gerät | Name und Kennung des Eingabegeräts unter Linux. Suchen Sie den Touchcontroller anhand seines Namens. |
Aktive Kontakte | Anzahl aktuell gemeldeter Kontakte eines unterstützten Multitouchcontrollers. Ohne Berührung sollten es null sein. |
Slot / ID | Kennzeichnet einen Kontakt, keine nummerierte Bildschirmposition. |
X / Y | Vom Sensor gemeldete Position. Prozentwerte sind nicht automatisch Pixel oder Abstände vom linken und oberen Rand. |
BTN_TOUCH | True bedeutet gemeldete Berührung, False keine gemeldete Berührung, sofern das Gerät diese Angabe liefert. |
Beispielausgabe, keine Messung Ihres Geräts:
Gerät: /dev/input/eventN Beispiel-Touchcontroller Aktive Kontakte: 1 Slot 0 ID 12 X= 600 50.0% Y= 1100 100.0% BTN_TOUCH: True
Technischer Hinweis für Administratoren
X und Y sind rohe Sensorachsen. Prozentwerte beschreiben die Position im vom Treiber gemeldeten Wertebereich. Sie sind nicht automatisch Bildschirmpixel oder Abstände von links und oben. Rotation, Kalibrierung und Zuordnung können den Zusammenhang verändern. Vergleichen Sie bekannte Berührungen, um einen physischen Punkt zu lokalisieren. Werte werden nicht atomar gelesen; wiederholen Sie bei bewegten Kontakten den Befehl.
Ein ohne Berührung gemeldeter Kontakt kann die Prüfung auf einen bestimmten Bereich lenken. So lassen sich Annahmen vor Firmwareupdates oder unbegründetem Teiletausch prüfen. Er beweist nicht, dass Schmutz, mechanischer Druck, Controllerzustand oder Defekt die Ursache ist. Null Kontakte zu einem Zeitpunkt schließen sporadische Probleme nicht aus. Fehlende Erkennung oder Lesefehler beweisen keinen Hardwaredefekt.
Bei einer Serviceprüfung meldete der Controller wiederholt vier aktive Kontakte nahe dem unteren Rand und BTN_TOUCH: True, obwohl niemand den Bildschirm berührte. Nach einem Software-Reset kamen sie mit neuen IDs zurück. Dies bestätigt die Meldungen, nicht ihre Ursache. Neue IDs oder ein geänderter Event-Dateiname beweisen keine Behebung. Vergleichen Sie eine neue Abfrage und prüfen Sie den betreffenden Gehäusebereich vor weiteren Änderungen.
4. Oberfläche und Gehäuse prüfen
Prüfen Sie Oberfläche und Ränder auf Schmutz, Feuchtigkeit, anhaftende Gegenstände oder Gehäusedruck. Beachten Sie die Reinigungsvorgaben des Herstellers. Klären Sie bei Türen mit Touchfolie, ob das Problem nach Wartung oder Positionsänderung begann.
5. Ausgangszustand sachgerecht wiederherstellen
Dokumentieren Sie den Zustand vor und nach jedem Eingriff. Die Kennung /dev/input/eventN kann sich nach Neustart oder erneutem Anschließen ändern. Identifizieren Sie den Controller erneut am Namen statt anhand einer alten Eingabenummer. Ein Treiberreset kann den Controller weiter mit Strom versorgen und garantiert keinen vollständigen Hardware-Reset.
Manche Konstruktionen passen den Touchcontroller beim Einschalten automatisch an. Wird danach eine Tür oder Folie bewegt, können bei diesen Geräten falsche Kontakte auftreten. Dies gilt nicht allgemein. Klären Sie das Vorgehen mit dem Hardwareanbieter.
Schließen Sie zuerst die Wartung ab, schließen Sie Türen und bringen Sie das Gehäuse in normale Betriebsposition. Empfiehlt der Hersteller eine vollständige Stromtrennung, muss sie auch den möglicherweise über USB versorgten Touchcontroller umfassen. Ein Playerneustart unterbricht diese Versorgung eventuell nicht. Eine berechtigte Person muss das vorgesehene Verfahren befolgen. Bewegen Sie das Gehäuse nach dem Einschalten nicht mehr.
Eine USB-Wiederherstellung aus der Ferne hängt von der Verkabelung ab und kann weitere Geräte trennen. Diese Anleitung enthält deshalb weder einen universellen Resetbefehl noch eine Firmwareupdate-Anweisung.
Verwandte Themen und nächste Schritte
6. Ergebnis prüfen und Befunde weitergeben
Vergleichen Sie erneut den unberührten Zustand mit mehreren Berührungen an bekannten Stellen. Senden Sie dem Support Controllername, Ausgabe, Symptome, Bildschirmausrichtung und den letzten Eingriff. Geben Sie an, ob vollständige Stromtrennung half und ob Türbewegungen das Problem beeinflussen. Vereinbaren Sie bei Fortbestehen eine Hardwareprüfung.
Wenden Sie sich an Ihren Softwareanbieter.
