Врываюсь я тут как‑то на онлайн‑собес в приличную контору с намерением выглядеть серьёзно и трезво. Но вебка моего ноута решила навалить хоррора и выдала такую шакальную картинку, будто я подключился к созвону не из дома, а из колодца Самары Морган. Ощущение, будто каждый кадр несёт астматичный голубь‑стажёр пока видео пытается догнать хотя бы цифру 3 в слове «30 FPS».

Рекрутерки, естественно, не были готовы базарить с кандидатом, который выглядит как архивная запись с камер наблюдения фонда SCP, и забанили меня ещё до того, как я успел спросить хорошо ли меня видно. Стало ясно, что про вакансии можно забыть пока я буду собеситься через эту камеру‑обскуру, которая по уровню детализации уступает даже кнопочному Самсунгу, пережившему две мобилизации и одно обрушение шахты.

Что? Твоя вебка на ноуте тоже скулит «Верните мне мой 2007»? Или ты статный Linux‑PC‑боярин, у которого камер столько же сколько друзей в реальной жизни? Не беда — если у тебя под рукой есть более‑менее приличный Android‑смартфон, значит ты зашёл в правильную дверь.

Пара слов про альтернативы

Под Windows и macOS отгрузили тонну готовых решений — Camo Studio, iVCam, Iriun Webcam и ещё куча всего. А что под Linux? Ну, раньше работал DroidCam, потом он исчез для РФ, тут вроде вернулся, но кого теперь это волнует. Есть ещё базар‑вокзал про какой‑то нативный «Режим веб‑камеры» для Android 14+, который в реальности я видел не чаще, чем актуальную документацию в Confluence.

Но мы сегодня всё сделаем по красоте без лишних приложений на телефоне, без рута и прочего непотребства. Разберёмся, как за десять минут бесплатно превратить Android в веб‑камеру, о которой твой компьютер мог только мечтать.

Мы будем использовать scrcpy — читается как screen copy. На первый взгляд это решение тупо для трансляции экрана Android на компьютер, но на самом деле оно также умеет вытаскивать картинку с камеры и отдавать её как вебку. Работает через adb (Android Debug Bridge): просто подключил телефон — картинка пошла.

Посмотрим как всё это заставить работать на Fedora 43. Для других дистрибутивов истина будет где‑то рядом.

ШАГ 1 — Установка scrcpy

Тут всё просто — документация проекта говорит, что для Fedora заготовлен собственный RPM‑репозиторий, навалить который можно при помощи Copr вдогонку к adb всего двумя командами:

sudo dnf copr enable zeno/scrcpy
sudo dnf install android-tools scrcpy -y

Чекаем, что установка не провафлилась:

scrcpy -v

Видим вывод:

scrcpy 3.3.3 <https://github.com/Genymobile/scrcpy>
Dependencies (compiled / linked):
…

Мы только начали, а у нас уже трипс на руках — это хороший старт.

ШАГ 2 — Создание v4l2-устройства

Мало просто отжать изображение у телефона — надо его куда‑то пристроить. Например, в виртуальное устройство Video4Linux (v4l). Тогда Zoom, OBS Studio, браузер и прочие приложения будут видеть телефон как полноценную веб‑камеру.

Звучит так, что Ubuntu‑пацаны могут отскочить на этом этапе на изи, просто скопипастив пару команд из документации. Но если ты купил шляпу и она тебе как раз, придётся не только собрать v4l2loopback вручную, но и подписать его для Secure Boot. Не волнуйся, DKMS это сделает за нас, но ты всё равно почувствуешь себя хакером.

DKMS (Dynamic Kernel Module Support) — это система автоматической сборки и установки модулей ядра Linux. Но чтобы ядро не плюнуло нашему самопальному модулю в лицо, нужно намутить сертификат DKMS для регистрации в ключе MOK (Machine Owner Key).

Создаём сертификат для Secure Boot

Для начала предоставляем системе нужные зависимости (свои личные не подойдут):

sudo dnf install git dkms kernel-devel openssl -y

Генерируем MOK‑ключ (если хочется подробностей, держи документацию). Указанные в команде пути и имена ключей не случайны — они облегчат нам автоматизацию подписи модуля:

sudo openssl req -new -x509 -newkey rsa:2048 -keyout /var/lib/dkms/mok.key -outform DER -out /var/lib/dkms/mok.pub -nodes -days 36500 -subj "/CN=Fedora DKMS MOK/"

Теперь сложная часть — надо придумать пароль. Для удобства запишем его во временную переменную окружения. Пароль подойдёт любой — понадобится он как твой костюм на выпускной — только один раз, при перезагрузке:

MOK_PASS="fedora"

Строки ниже долго работали на стрёмной галере и теперь постоянно твердят «Мы одна команда»:

sudo mokutil -i /var/lib/dkms/mok.pub << EOI
${MOK_PASS}
${MOK_PASS}
EOI

Перезагружаемся и на синем экране приёмной Международного олимпийского комитета подтверждаем добавление ключа. Вводи пароль смело и дерзко. Не волнуйся, каскадный резонанс не запустится — тут надо просто продемонстрировать компьютеру свою власть.

Собираем v4l2loopback

За это пусть впрягается DKMS:

sudo git clone https://github.com/v4l2loopback/v4l2loopback.git /usr/src/v4l2loopback-git

sudo dkms add -m v4l2loopback -v git
sudo dkms build -m v4l2loopback -v git -k $(uname -r)
sudo dkms install -m v4l2loopback -v git -k $(uname -r)

sudo dkms status

Увидеть installed в выводе последней команды — к удаче.

Наводим финальный движ

Говорим компьютеру, что v4l2loopback теперь часть корабля, поэтому будет вставать и работать сразу после восхода солнца, то есть загрузки системы. Для этого создаём файл:

sudo nano /etc/modules-load.d/v4l2loopback.conf

И прописываем в нём имя модуля:

v4l2loopback

Ctrl+O чтобы сохранить, Ctrl+X чтобы выйти из IT

Теперь поясняем модулю с какими аргументами надо входить в системную хату. Тоже через новый файл:

sudo nano /etc/modprobe.d/v4l2loopback.conf

Вставляем:

options v4l2loopback video_nr=0 card_label="Scrcpy" exclusive_caps=1

Давай разберём что тут понаписано:

  • video_nr=0 — выдаём номер виртуального устройства, теперь оно официально будет /dev/video0 — первый парень на районе

  • card_label="Scrcpy" — имя устройства, которое будет видно в приложениях при выборе веб‑камеры; тут можно проявить фантазию

  • exclusive_caps=1 — это для корректной работы в Chrome/WebRTC — когда у тебя нет времени ставить приложения и ты созваниваешься прямо в браузере из туалета без регистрации и подтверждений в MAX

Осталось перекреститься и перезагрузить сервис модулей в надежде не встретить сообщения об ошибках:

sudo systemctl restart systemd-modules-load.service

ШАГ 3 — Пора увидеть первые результаты!

Активируем в телефоне режим разработчика: ищем в информации о системе номер сборки и жмём на него много раз. Поздравляю, теперь ты разработчик! (можешь подаваться в бигтех на 300 к/нс) В появившемся разделе системного меню включаем Отладку по USB.

Осталось подсоединить телефон по USB к компьютеру, подтвердить включение отладки и получить первое изображение с камеры при помощи команды:

scrcpy --video-source=camera --camera-size=1920x1080 --v4l2-sink=/dev/video0
— Хьюстон, принимай трансляцию
— Хьюстон, принимай трансляцию

Экран телефона держать включённым необязательно — можно блокировать замедлять. Закрытие окна с видео автоматически завершит выполнение процесса в консоли.

ШАГ 4 — Финал

Теперь мы можем собрать всю магию в одну команду, для чего добавим в файл .bashrc:

alias webcam="scrcpy --select-usb --video-source=camera --camera-facing=back --camera-size=1280x720 --orientation=flip0 --v4l2-sink=/dev/video0 --no-audio --no-window"

Распедаливаем движ:

  • --select-usb — подключаемся только по USB, а не по TCP/IP. Да, можно гонять видео и без провода через Wi‑Fi, но у меня так картинка лагает даже в HD 720, так что по проводу надёжнее

  • --video-source=camera — забираем видео с камеры, а не экрана устройства — чтобы не палить переписку с твоей бывшей и мемы из WhatsApp

  • --camera-facing=back — используем основную камеру вместо фронтальной — мы же профессионалы

  • --camera-size=1280x720 — выбираем разрешение. Мой ноутбук сделан из обещаний маркетологов, поэтому Full HD вынуждает его ворчать. Ставить разрешение нужно не любое, а из списка поддерживаемых устройством; посмотреть можно командой: scrcpy --list-camera-sizes

  • --orientation=flip0 — снимаем горизонтально, по‑взрослому. Ставь flip90 если в душе ты директор ТикТока

  • --v4l2-sink=/dev/video0 — направляем поток в наше виртуальное устройство, а не в офшоры

  • --no-audio — отключаем передачу звука с микрофона телефона чтобы не было эха

  • --no-window — окно с видео для отладки нам больше не нужно

Ну вот и всё: подключил телефон, написал в консоли webcam и выбрал в нужном приложении Scrcpy как вебку. Представь как завтра ты подключаешься к созвону, и ослеплённые голливудской картинкой коллеги с завистью гадают, когда ты успел купить себе новый Макбук.

Zoom относится к нашей новой камере с уважением
Zoom относится к нашей новой камере с уважением
Zoom относится к нашей новой камере с уважением
OBS Studio: два курсора — две мышки — пользуюсь с двух рук по‑македонски
OBS Studio: два курсора — две мышки — пользуюсь с двух рук по‑македонски
Работает даже на парковке в браузере

На всякий случай вот пример выдачи команды webcam в консоли при успешном запуске:

scrcpy 3.3.3 <https://github.com/Genymobile/scrcpy>
No video mirroring, SDK mouse disabled
Camera video source: control disabled
INFO: ADB device found:
INFO:     -->   (usb)  ZY22LC9K4T                      device  motorola_edge_50_neo
/usr/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 65.3 MB/s (90164 bytes in 0.001s)
[server] INFO: Device: [motorola] motorola motorola edge 50 neo (Android 15)
[server] INFO: Using camera '0'
INFO: v4l2 sink started to device: /dev/video0

Когда созвон закончен и вебка больше не нужна, тормозим процесс в консоли (стандартный Ctrl+C), отсоединяем USB‑кабель и идём в банкомат снимать свои 300к новой зарплаты сразу после успешного собеса.

И да, не забудь отметить в резюме что на досуге ты поднял свой вебкам‑сервис.

Комментарии (0)