Detection & Drivers¶
This page walks through everything Linux does when the Pengo HDMI Grabber is plugged in, and how to confirm everything is healthy.
Plug it in¶
Plug the included USB cable into a USB 3.0 port on your computer. The front blue LED on the grabber should illuminate immediately.
Within ~1 second, the kernel will enumerate the device, load the right modules, and create device nodes.
Confirm with lsusb¶
lsusb
You should see something like:
Bus 002 Device 003: ID 1e4e:701f Cubeternet Pengo HDMI Grabber
Two other devices (048d:8595 and 048d:8950, both ITE) may also appear —
they're auxiliary chips inside the grabber. They use the generic USB hub
driver and don't need anything special.
For verbose info (descriptors, endpoints, current configuration):
lsusb -v -d 1e4e:701f
Confirm with v4l2-ctl¶
v4l2-ctl is the standard tool for talking to V4L2 devices.
# Arch / Manjaro / CachyOS:
sudo pacman -S v4l-utils
# Debian / Ubuntu / Mint:
sudo apt install v4l-utils
Then list video devices:
v4l2-ctl --list-devices
Expected output:
Pengo HDMI Grabber: Pengo HDMI (usb-0000:80:14.0-2.2):
/dev/video0
/dev/video1
/dev/media0
Two /dev/videoN nodes is normal — the grabber exposes one for the main
stream and one for metadata. Use /dev/video0 for everything.
Full probe of the device (formats, frame rates, controls):
v4l2-ctl --device=/dev/video0 --all
This gives you, among other things:
Driver name : uvcvideo
Card type : Pengo HDMI Grabber: Pengo HDMI
Driver version : 7.2.2
Capabilities : 0x84a00001
Format Video Capture:
Width/Height : 1920/1080
Pixel Format : 'YUYV' (YUYV 4:2:2)
Bytes per Line : 3840
Size Image : 4147200
Streaming Parameters Video Capture:
Frames per second: 60.000 (60/1)
To see every resolution and pixel format the grabber advertises:
v4l2-ctl --device=/dev/video0 --list-formats-ext
Expected:
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
[1]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Which format should you pick?
- MJPG (Motion-JPEG): compressed, lighter on USB bandwidth, reliable 1080p60. Default choice for recording and for AI vision pipelines.
- YUYV (4:2:2 uncompressed): slightly better colour fidelity per frame but a 4147200-byte payload per 1080p frame, which can drop frames on marginal USB ports. Use it when you need every pixel exact and your USB port is solidly USB 3.0.
Confirm audio¶
arecord -l
Expected (your card numbers will differ):
card 1: Grabber [Pengo HDMI Grabber], device 0: USB Audio [USB Audio]
Subdevices: 1/1
subdevice #0: subdevice #0
Record 5 seconds of audio straight to disk to verify:
arecord -D hw:1,0 -f S16_LE -r 48000 -c 2 -d 5 test.wav
aplay test.wav
If you hear the audio from your source, the audio path is healthy. If not, see Audio capture →.
Kernel modules in use¶
You don't have to load anything manually, but if you're curious:
lsmod | grep -E 'uvcvideo|snd_usb_audio|usbcore'
Expected:
uvcvideo 188416 0
snd_usb_audio 180224 2
videobuf2_vmalloc 20480 1 uvcvideo
videobuf2_v4l2 45056 1 uvcvideo
videobuf2_common 98304 4 videobuf2_vmalloc,videobuf2_v4l2,uvcvideo,videobuf2_memops
videodev 438272 2 videobuf2_v4l2,uvcvideo
mc 94208 5 videodev,snd_usb_audio,videobuf2_v4l2,uvcvideo,videobuf2_common
Permissions¶
On most distros, normal users can read /dev/video0 out of the box. If
yours can't:
sudo usermod -aG video $USER
# log out and back in
For audio:
sudo usermod -aG audio $USER
Quick live preview¶
Confirm the image end-to-end:
# ffplay is part of ffmpeg
ffplay -f v4l2 -input_format mjpeg -framerate 60 -video_size 1920x1080 /dev/video0
A window should pop up showing your HDMI source. ESC to quit.
Next: FFmpeg & GStreamer → for recording, streaming and processing pipelines.