我的网络摄像头确实存在,但无法识别任何地方在我的电脑中。我唯一看到与视频相关的内容的地方是# dmesg | grep video
:
[ 64.907469] videodev: Linux video capture interface: v2.00
[ 64.921610] usbcore: registered new interface driver uvcvideo
[ 72.665592] usbcore: deregistering interface driver uvcvideo
[ 72.848476] videodev: Linux video capture interface: v2.00
[ 72.857832] usbcore: registered new interface driver uvcvideo
其他一些可能有用的命令是lsusb
:
Bus 003 Device 002: ID 093a:2533 Pixart Imaging, Inc. Gaming Mouse
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 1b3f:2008 Generalplus Technology Inc. USB Audio Device
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
和lsmod | grep video
uvcvideo 114688 0
videobuf2_vmalloc 20480 1 uvcvideo
videobuf2_memops 20480 1 videobuf2_vmalloc
videobuf2_v4l2 36864 1 uvcvideo
videobuf2_common 65536 2 videobuf2_v4l2,uvcvideo
videodev 286720 3 videobuf2_v4l2,uvcvideo,videobuf2_common
mc 61440 5 videodev,snd_usb_audio,videobuf2_v4l2,uvcvideo,videobuf2_common
usbcore 323584 6 xhci_hcd,snd_usb_audio,usbhid,snd_usbmidi_lib,uvcvideo,xhci_pci
usb_common 16384 3 xhci_hcd,usbcore,uvcvideo
video 53248 1 asus_wmi
ls /dev/video*
:
zsh: no matches found: /dev/video*
我知道 StackExchange 上已经有类似的问题,但他们的解决方案不起作用,我的笔记本电脑有不是有一个网络摄像头按钮。
我的笔记本电脑是运行 Linux 5.10.0-5-amd64 x86_64 的 ASUS TUF Gaming FX705DY
答案1
我遇到了同样的问题:USB 枚举正常(甚至创建了网络摄像头中麦克风的设备),但没有/dev/video
并cheese
报告no device found
。
我查看了一下dmesg
,发现它报告了与网络摄像头无关的固件问题 ( firmware: failed to load rtl_nic/rtl8168h-2.fw
)。为了解决这个问题,我添加了contrib
和non-free
来deb
排队/etc/apt/source.list
,然后:
apt update
apt install linux-headers-$(uname -r)
apt install firmware-linux firmware-realtek
我重新启动 - 但一路上我还在 BIOS 中启用了“xHCI hand-off” - 并且cheese
正在工作。
也就是说,我不知道是哪个改变起作用了,但也许它有帮助。
答案2
许多设备访问问题可以通过组成员身份更改来解决。
具体来说,如果ls -l
显示组权限(第二个“ rwx
”三元组)为“ rw
”(例如“ -rw-rw----
”),则将自己添加到拥有该设备的组中将授予rw
访问权限。
就是这样:
device="/dev/whatever"
sudo adduser $USER $(stat -c "%G" $device)
这允许您成为可以使用该设备的组的成员资格rw
,但还有一个步骤。
要使所有进程成为新组的成员,请注销并登录。小组成员资格是按时间设立的login
。
要在新组中创建单个进程(用于测试,在注销/登录之前):
newgrp $(stat -c "%G" $device)
或者,只需键入组名称。看man newgrp
。