Кристиан Шаллер из Red Hat рассказал об использовании Claude Code для улучшения поддержки оборудования в Linux. С помощью ИИ он разработал драйвер плёночного сканера Plustek OpticFilm 8200i, приложение для оцифровки негативов и исправления камеры ThinkPad. Результаты он проверил на собственных устройствах. Код опубликован, но часть изменений ещё предстоит включить в основные проекты.
Эталонный драйвер Windows помог разобраться со сканером
Шаллер купил OpticFilm 8200i для оцифровки семейных негативов, рассчитывая на поддержку Linux. Однако под прежним названием продавалась новая аппаратная ревизия: вместо контроллера Genesys GL845 в ней установили GL128. Первые попытки написать драйвер с Claude Code зашли в тупик, и разработчик отложил работу на несколько месяцев.
Вернуться к задаче помог опыт Тома Крайдера, известного как Glorious Eggroll. Шаллер предоставил ИИ-агенту управление виртуальной машиной Windows с фирменным драйвером и возможность записывать USB-обмен во время сканирования. Через несколько часов он получил узнаваемый скан в Linux, а через несколько дней – существенно доработанный драйвер с инфракрасным каналом.
usbmon – механизм ядра Linux для записи запросов ввода-вывода USB. В этом эксперименте он позволял на хосте записывать обмен с устройством, переданным виртуальной машине, а затем сопоставлять его с работой Linux-драйвера.
Опубликованный модуль для SANE рассчитан на GL128 с USB ID 07b3:1825. Он поддерживает цветной, серый, инфракрасный и совмещённый режимы, 300–7200 dpi, 8 или 16 бит на канал, удаление пыли и царапин по ИК-каналу и увеличение экспозиции для плотных негативов. Старую ревизию с GL845 и ID 07b3:130d обслуживает штатный модуль genesys. Определить вариант устройства можно командой:
lsusb
За время перерыва другой разработчик уже добавил поддержку GL128 в основной SANE – по данным Шаллера, в сентябре 2026 года. Поэтому собственный драйвер он рассматривает прежде всего как демонстрацию подхода и источник улучшений для общего проекта. Сравнение автора на одном сканере и одном цветном негативе дало следующие результаты:
| Параметр | Драйвер Шаллера | SANE genesys GL128 |
|---|---|---|
| Скан при 600 dpi: размер и время | 864x645 пикселей; 16,7 с | 864x586 пикселей; 16,4 с |
| Скан при 3600 dpi: размер и время | 5184x3877 пикселей; 34,6 с | 5184x3519 пикселей; 54,4 с |
| ИК-канал и удаление пыли и царапин | Есть | Нет в сравнении автора |
| Глубина цвета на канал | 8 или 16 бит | 16 бит |
| Ступени разрешения | 6, от 300 до 7200 dpi | 11, от 150 до 7200 dpi |
| Поля слева / справа при 3600 dpi, мм | 0,17 / 0,85 | 1,19 / 0,06 |
| Поля сверху / снизу при 3600 dpi, мм | 1,64 / 1,56 | 0,45 / 0,22 |
При 3600 dpi оба варианта передавали одинаковые мелкие детали, но захватывали разную область. У genesys окно смещено примерно на 1,06 мм влево, а исходное изображение ярче и зеленее. Это единичный тест; при 600 dpi штатный модуль оказался немного быстрее. После переключения между драйверами автору однажды потребовалось выключить и включить сканер. Новый модуль проверен на одном экземпляре, сканирует по кадру с ручным перемещением держателя; RPM для Fedora выпускаются как предварительные автоматические сборки.
Negative Vibes: оцифровка плёнки в GNOME
Параллельно Шаллер создал с Claude Code приложение Negative Vibes на Rust для GNOME. Оно сканирует цветные и чёрно-белые негативы и слайды, сохраняя исходные линейные 16-битные данные и ИК-канал, если он доступен. Обработку можно менять без повторного сканирования.

Программа поддерживает преобразование негатива в позитив с коррекцией основы плёнки и взаимного влияния красителей, настройки всей плёнки и отдельных кадров, инфракрасное и программное удаление пыли, IT8-калибровку через ArgyllCMS. Экспорт предусмотрен в TIFF, JPEG, PNG и DNG с цветовыми профилями ICC и метаданными.
Flatpak-сборка включает драйвер 8200i; пока приложение проверено именно с этим сканером. Разработчик рассчитывает расширить совместимость, но SANE ещё не стандартизировал предоставление ИК-канала. На других устройствах инфракрасная очистка может быть недоступна, тогда остаётся программное удаление пыли.
Пять исправлений для камеры ThinkPad
Следующей задачей стала камера Lenovo ThinkPad X1 Carbon Gen 14 Aura Edition: сенсор Sony IMX471 подключён через Intel IPU7. В Linux изображение получалось тёмным, с затемнёнными углами и жёлто-зелёным оттенком. Повторно используя подготовленные инструменты, Шаллер за рабочий день получил исправления для ядра и libcamera.
В драйвере исправили получение области считывания сенсора, разрядность регистра тестового изображения и предел аналогового усиления: вместо примерно 4,57-кратного стало доступно 16-кратное. В программный обработчик libcamera добавили компенсацию затемнения углов и исправили расчёт баланса белого, смешивавший данные разной разрядности. Последняя ошибка затрагивает также другие RAW10/RAW12-сенсоры, использующие этот обработчик.
В контрольном сравнении автора при слабом освещении средняя яркость кадра выросла с 31,1 до 90,9 по его шкале. Положение ноутбука и освещение сохраняли, а перед измерением каждой конфигурации ждали 400 кадров для стабилизации автоматики. Отношения красного и синего каналов к зелёному показывают изменение цветового баланса:
| Слабое освещение | Красный / зелёный | Синий / зелёный | Яркость кадра |
|---|---|---|---|
| Без исправлений | 0,890 | 0,672 | 31,1 |
| Все пять исправлений | 1,047 | 0,823 | 90,9 |
| Эталонная USB-камера | 1,052 | 0,989 | Не указана |
При более ярком освещении автор отдельно сравнил этапы обработки. Коэффициент затемнения углов измерен в парном тесте равномерного поля; меньшее значение означает более равномерную яркость.
| Конфигурация | Красный / зелёный | Синий / зелёный | Затемнение углов |
|---|---|---|---|
| Без исправлений | 0,871 | 0,667 | 2,78 раза |
| С компенсацией затемнения углов | 0,974 | 0,855 | 1,09 раза |
| С исправлением баланса белого и цветовой матрицей | 1,001 | 0,870 | 1,09 раза |
| Эталонная USB-камера | 0,99 | 0,97 | Не измерено |
Проблемы остаются: при слабом свете синий канал примерно на 17% ниже эталона, а libcamera не увеличивает выдержку за счёт снижения частоты кадров. Экспозиция ограничена 18,8 мс при 52,5 кадра/с; даже с максимальным усилением камера заметно уступает USB-эталону. Проверки охватывали одну комнату и обработку на GPU, без цветовой мишени; путь обработки на CPU не проверен из-за существующего сбоя libcamera.
По словам Шаллера, патчи ядра переданы Кейт Сюань, а изменения libcamera проверяет Вим Тайманс перед отправкой в проект. Подтверждения включения в стабильные выпуски нет. Автор также заявляет о RPM для Fedora 44, однако на указанная страница релизов не содержит выпусков, поэтому доступность готовых пакетов не подтверждена.
hw-harness позволяет повторить подход
Шаллер опубликовал hw-harness – набор инструментов для подобных исследований с Claude Code или Codex. Он автоматизирует управление Windows в KVM, передачу устройства между системами и запись обмена. Для внутренних MIPI-камер вместо USB-захвата используются INF-файлы, реестр, таблицы ACPI и свойства устройств; код фирменных драйверов инструменты не декомпилируют. Набор разработан и проверен в Fedora, требует libvirt/KVM и гостевой Windows 11 Pro с RDP-сервером.
Это обобщённая версия ранее написанных специальных скриптов: именно в таком виде Шаллер её в своих экспериментах ещё не использовал. Он отдельно предупреждает, что записи обмена могут содержать серийные номера, а каталог проекта – закрытые SSH-ключи; их нельзя публиковать вместе с кодом.
Подобные эксперименты дополняют работу над ядром Linux с помощью Claude Code. В случае Шаллера решающую роль сыграл доступ к эталонному поведению оборудования: ИИ сравнивал результаты, предлагал проверки и готовил код, а человек проверял итог на реальных устройствах.
Вывод
Опыт Шаллера показывает практическую пользу ИИ при разборе протоколов и поиске ошибок поддержки оборудования. Опубликованные инструменты позволяют другим разработчикам повторить такой рабочий процесс. Его результат всё равно зависит от проверок на устройстве и последующей доработки кода вместе с сопровождающими Linux-проектов.
Claude