Как да разчитате отчетите за сензорно въвеждане
Въведение и ориентация
Първо проверете дали Linux вижда сензорното устройство. След това сравнете отчетените контакти в две ситуации: когато никой не докосва екрана и когато човек на място целенасочено докосва известна точка. Така се вижда дали контролерът отчита контакти, които не съответстват на действителността; това не установява автоматично причината или начина на поправка.
Проверки и отстраняване на проблеми
Дистанционната конзола и инструментите на Linux могат да помогнат да се установи какво става със сензорното въвеждане — от офиса или при посещение на място. Диагностиката проверява предположенията преди актуализация на фърмуера, повторно калибриране или замяна на сензорния слой и може да спести ненужна работа. Тя не замества проверката на хардуера.
Започнете с мониторинга, след което задайте конкретен въпрос
Първо проверете времевата отметка на последния отчет и свързаните USB устройства в мониторинга на устройството. Разпознат контролер не означава, че отчита правилно докосванията. Следващата проверка помага да установите именно това.
1. Определете симптомите
- Няма реакция: проверете дали сензорното устройство е разпознато и свързано.
- Реакция на неправилно място: проверете ориентацията и съпоставянето на сензорното въвеждане в настройките на устройството.
- Неправилни или непредизвикани реакции: сравнете отчетените контакти, когато никой не докосва екрана и при целенасочено докосване.
- Забавяне: разграничете забавеното въвеждане от бавна реакция на приложението; моментната снимка на състоянието сама по себе си не измерва латентността.
Ако дистанционната мишка работи, но физическото докосване не, това само по себе си не потвърждава повреден сензорен панел. Сравнете въвеждането, отчетено от Linux, с реакцията на приложението. При Wayland промяната на XInput настройките може да не влияе на въвеждането, използвано от плейъра; повторното задаване на същата матрица не е поправка.
2. Проверете какво отчита сензорното устройство
Разгънете командата по-долу и я изпълнете в дистанционната конзола. Тя прави една моментна снимка и не променя нищо. Първо се уверете, че никой не докосва екрана, и запазете резултата. След това я изпълнете отново, докато човек на място докосва предварително избрана точка на екрана. Командата не записва случващото се между двете отчитания.
Показване на командата за еднократна проверка
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Можете да извършите същата проверка с диагностичния скрипт за изтегляне.
Техническа бележка за администратори
Скриптът изисква Linux, Python 3 и разрешение за четене на /dev/input/event*. Не инсталира нищо, не променя калибрирането, не изключва драйвер и не блокира въвеждането към други приложения. Списъкът може да съдържа и други указателни устройства; определете правилния контролер по име. Броят контакти може да не е наличен при неподдържан тип въвеждане. Ако достъпът е отказан, поискайте помощ от доставчика си, вместо да променяте масово разрешенията за достъп.
Потвърждението за изпращане не е резултат от командата или доказателство за изпълнението ѝ. Ако конзолата престане да връща резултати, особено след спиране на приложението за визуализиране, не тълкувайте мълчанието като празен диагностичен резултат. Организирайте независима проверка чрез оторизирана връзка за поддръжка или на място. Вижте също указанията за работа с дистанционната конзола.
3. Разчетете контактите и координатите
| Какво да проверите | Какво означава |
|---|---|
Device | Името и идентификаторът на входното устройство в Linux. Намерете сензорния си контролер по име. |
Active contacts | Броят на текущо отчетените контакти при поддържан мултитъч контролер. Когато никой не го докосва, очакваната стойност е нула. |
Slot / ID | Обозначава контакт; не представлява номерирано място върху екрана. |
X / Y | Позицията, отчетена от сензора. Процентите не са автоматично пиксели или разстояния от левия и горния край. |
BTN_TOUCH | True означава отчетено докосване, а False — липса на такова, когато устройството предоставя тази информация. |
Примерен резултат, а не измерване от вашето устройство:
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
Техническа бележка за администратори
X и Y са суровите оси на сензора; процентите описват позицията в диапазона, отчетен от драйвера. Те не са автоматично пиксели на екрана или разстояния от левия и горния край. Завъртането, калибрирането и съпоставянето могат да променят връзката. Сравнете известни докосвания, за да определите физическа точка. Стойностите не се прочитат атомарно: повторете командата, ако контактите се движат.
Контакт, който продължава да се отчита без докосване, може да насочи проверката към определено място. Той помага да проверите предположенията, преди да актуализирате фърмуера или да сменяте части без доказателства. Не установява като причина замърсяване, механичен натиск, състояние на контролера или повреда. Нула контакти в един момент не изключва периодични проблеми; неразпознато входно устройство или грешка при четене не доказва хардуерна повреда.
При една сервизна проверка контролерът многократно отчита четири активни контакта близо до долния край и BTN_TOUCH: True, когато никой не докосва екрана. След софтуерно нулиране контактите се появяват отново с нови ID. Това потвърждава отчетените контакти, но не причината за тях. Нови ID или променено име на event файла не доказват, че проблемът е решен. Сравнете ново отчитане и проверете съответната област на корпуса, преди да променяте още настройки.
4. Проверете повърхността и корпуса
Проверете повърхността и ръбовете за замърсяване, влага, прикрепени предмети или натиск от корпуса. Следвайте указанията за почистване на производителя. При врати със сензорно фолио установете дали проблемът е започнал след сервизна намеса или промяна на положението.
5. Възстановете началното състояние по подходящ начин
Записвайте състоянието преди и след всяка намеса. Идентификаторът /dev/input/eventN може да се промени след рестартиране или повторно свързване. Определете контролера отново по име, вместо сляпо да използвате предишен номер на входно устройство. Нулирането на софтуерен драйвер може да остави контролера под напрежение и не гарантира пълно хардуерно нулиране.
Някои конструкции могат автоматично да адаптират сензорния контролер при включване на захранването. Последващо преместване на врата или фолио може да е свързано с фалшиви контакти при тези устройства. Това не е универсално: потвърдете процедурата с доставчика на хардуера.
Първо завършете сервизната работа, затворете вратите и оставете корпуса в нормалното му работно положение. Ако производителят препоръчва пълно изключване на захранването, то трябва да включва и сензорния контролер, който може да се захранва през USB. Рестартирането на плейъра може да не прекъсне това захранване. Оторизирано лице трябва да следва предвидената процедура; не местете корпуса след повторно включване на захранването.
Дистанционното възстановяване на USB зависи от свързването и може да изключи други устройства. Затова това ръководство не предоставя нито универсална команда за нулиране, нито инструкция за актуализация на фърмуера.
Свързани теми и следващи стъпки
6. Проверете резултата и споделете установеното
Сравнете отново състоянието без докосване с няколко докосвания на известни места. Изпратете на поддръжката името на контролера, резултатите, симптомите, ориентацията на екрана и последната сервизна намеса. Посочете дали пълното прекъсване на захранването е помогнало и дали преместването на врата влияе на проблема. Ако той продължава, организирайте проверка на хардуера.
← Назад към отстраняването на проблеми
Свържете се с Вашия доставчик на софтуер.
