Веб-камера определяется системой в lsusb, но устройство /dev/video0 не появляется — почти всегда причина в том, что модуль ядра uvcvideo не загружен или заблокирован. Этот модуль реализует стандарт USB Video Class (UVC), которому следует подавляющее большинство современных USB-камер, и без него видеопоток попросту некому обрабатывать на уровне ядра.
В этой статье разберём, какие модули ядра Linux отвечают за USB-видео, как проверить их состояние, что делать при ошибках загрузки и когда требуются альтернативные драйверы вроде gspca. Материал ориентирован на дистрибутивы с ядром Linux — Ubuntu, Debian, Fedora, Arch и их производные.
Как устроена поддержка USB-видео в ядре Linux
Поддержка USB-камер в Linux строится в несколько слоёв. На нижнем уровне работает USB-стек ядра (модули usbcore, xhci_hcd или ehci_hcd в зависимости от контроллера), который обеспечивает само подключение устройства к шине. Выше располагается подсистема Video4Linux2 (V4L2) — единый интерфейс для всех видеоустройств, через который приложения получают доступ к потоку.
Между ними находится драйвер конкретного класса устройств. Для камер, совместимых со стандартом UVC, это uvcvideo. Для старых или нестандартных моделей существуют отдельные драйверы — исторически наиболее известен набор gspca, охватывающий множество чипов бюджетных камер.
Именно модуль uvcvideo создаёт файлы устройств /dev/video0, /dev/video1 и так далее. Если этих файлов нет, проблема почти наверняка на уровне модуля, а не в приложении.
Основные модули ядра для USB-видео
Ниже перечислены ключевые модули, которые участвуют в работе USB-видео. Знать их имена полезно при диагностике: по выводу lsmod сразу видно, какой элемент цепочки отсутствует.
- 🎥 uvcvideo — драйвер устройств USB Video Class, основной модуль для современных веб-камер и камер ноутбуков.
- 📼 videodev — ядро подсистемы V4L2, загружается автоматически как зависимость драйверов камер.
- 🔌 usbcore и модули хост-контроллера (
xhci_hcd,ehci_hcd) — обеспечивают работу самой шины USB. - 🧩 gspca_* — семейство драйверов для старых и нестандартных камер (например,
gspca_zc3xx,gspca_sonixj). - 🔊 snd-usb-audio — модуль микрофона камеры: звуковая часть UVC-устройства обслуживается отдельно от видео.
Обратите внимание на последний пункт: у большинства веб-камер микрофон — это отдельное USB-устройство. Поэтому ситуация, когда видео работает, а звук нет (или наоборот), вполне нормальна и решается независимо.
Проверка состояния модулей
Начните диагностику с проверки того, видит ли система камеру на уровне USB:
lsusb
В выводе должна присутствовать строка с названием камеры или её производителя. Если устройства нет даже здесь — проблема аппаратная: порт, кабель или сама камера. Модули ядра в этом случае ни при чём.
Далее проверьте, загружен ли модуль uvcvideo:
lsmod | grep -E "uvcvideo|videodev"
Пустой вывод означает, что модуль не загружен. Загрузите его вручную:
sudo modprobe uvcvideo
После этого снова проверьте наличие устройства командой ls /dev/video*. Если файл появился — камера должна заработать в приложениях без перезагрузки.
☑️ Диагностика USB-камеры
Типичные проблемы и их решение
Одна из частых ситуаций — модуль загружается, но с ошибкой. Детали смотрите в журнале ядра:
sudo dmesg | grep -i -E "uvc|video"
Сообщения вида «Failed to query» или ошибки инициализации UVC-дескрипторов указывают на нестандартную прошивку камеры. Для некоторых таких устройств помогает загрузка модуля с параметром quirks, но конкретное значение зависит от модели камеры — его стоит искать в документации к драйверу или в баг-трекерах вашего дистрибутива.
⚠️ Внимание: не загружайте модули с параметрами, найденными на форумах для чужих моделей камер. Неверное значениеquirksможет привести к зависанию устройства или полному отказу инициализации. Сначала сверьтесь с источниками, относящимися именно к вашей модели (её VID:PID виден в выводеlsusb).
Ещё одна причина «невидимой» камеры — права доступа. Пользователь должен входить в группу video. Проверить это можно командой groups, а добавить себя в группу — командой sudo usermod -aG video имя_пользователя с последующим повторным входом в сессию.
Автоматическая загрузка модуля при старте системы
Обычно udev загружает uvcvideo автоматически при обнаружении камеры. Если этого не происходит, проверьте, не попал ли модуль в чёрный список: поищите строки с его именем в файлах каталога /etc/modprobe.d/.
Чтобы принудительно загружать модуль при старте, достаточно добавить его имя в файл /etc/modules-load.d/uvc.conf (создайте файл, если его нет):
echo "uvcvideo" | sudo tee /etc/modules-load.d/uvc.conf
Если модуль отсутствует в системе вообще (команда modinfo uvcvideo выдаёт ошибку), возможно, вы используете кастомное или сильно урезанное ядро. В стандартных ядрах популярных дистрибутивов модуль включён по умолчанию; в собственных сборках убедитесь, что в конфигурации ядра активирован параметр CONFIG_USB_VIDEO_CLASS.
Почему камера может пропадать после обновления ядра
После обновления ядра старые сторонние модули (например, собранные через DKMS) могут оказаться несовместимы с новой версией. Проверьте вывод dkms status и при необходимости пересоберите модули. Для штатного uvcvideo это не требуется — он входит в состав ядра и обновляется вместе с ним.
Сравнение драйверов для USB-камер
Выбор драйвера определяется чипом камеры, а не желанием пользователя. Тем не менее полезно понимать, какой модуль за что отвечает.
| Модуль | Назначение | Когда используется |
|---|---|---|
uvcvideo | Стандарт USB Video Class | Практически все современные камеры |
gspca_* | Драйверы нестандартных чипов | Старые бюджетные камеры |
videobuf2-* | Буферизация кадров V4L2 | Загружается автоматически как зависимость |
snd-usb-audio | Звук USB-устройств | Микрофон камеры, USB-гарнитуры |
Определить, какой драйвер обслуживает конкретное устройство, можно командой lsusb -t: в её выводе для каждого устройства указан привязанный драйвер.
Проверка работоспособности камеры
После того как модуль загружен и устройство появилось, протестируйте захват видео без браузеров и мессенджеров. Проще всего использовать утилиту ffplay из состава FFmpeg:
ffplay /dev/video0
Если окно с изображением открылось — ядро и драйвер работают корректно, а любые дальнейшие проблемы относятся уже к настройкам конкретного приложения (выбор устройства, разрешения в браузере и т.п.).
Отсутствие изображения при открывшемся окне может указывать на неподдерживаемый формат кадра. Список форматов и разрешений, которые камера сообщает системе, выводится командой v4l2-ctl --list-formats-ext.
⚠️ Внимание: камеру одновременно может использовать только одно приложение. Если устройство «занято», закройте все программы, которые могли захватить видео (в том числе вкладки браузера с видеозвонками), и проверьте заново. Узнать, какой процесс держит устройство, поможет команда sudo fuser /dev/video0.
Часто задаваемые вопросы
Что делать, если modprobe uvcvideo выдаёт ошибку «module not found»?
Модуль отсутствует в установленном ядре. В стандартных дистрибутивах он входит в пакет ядра — проверьте, что ядро установлено корректно и система загружена именно с него. В самосборных ядрах включите опцию CONFIG_USB_VIDEO_CLASS и пересоберите ядро.
Нужно ли устанавливать отдельные драйверы для веб-камеры в Linux?
Для камер стандарта UVC — нет, драйвер uvcvideo уже входит в ядро. Отдельные драйверы требуются только для редких устройств с проприетарными чипами, и их наличие нужно проверять по VID:PID конкретной модели.
Почему камера работает в одной программе, но не видна в другой?
Обычно дело в правах доступа приложения (особенно в sandbox-окружениях вроде Flatpak или Snap) либо в том, что устройство уже занято первым приложением. Проверьте настройки разрешений пакета и освободите устройство.
Как узнать, поддерживается ли моя камера стандартом UVC?
Выполните lsusb -v для устройства и поищите в выводе строки с bInterfaceClass 14 Video. Их наличие означает, что камера объявляет себя как UVC-устройство и должна обслуживаться модулем uvcvideo.
Можно ли выгрузить модуль uvcvideo без перезагрузки?
Да, командой sudo modprobe -r uvcvideo, но только если камера не используется ни одним приложением. Перезагрузка модуля иногда помогает при «зависшей» камере — это безопасная обратимая операция.