/dev/video0 无法打开,但计算机知道已连接摄像头。Ubuntu 不会使用摄像头,但它可以在 Windows 上使用

/dev/video0 无法打开,但计算机知道已连接摄像头。Ubuntu 不会使用摄像头,但它可以在 Windows 上使用

我在这台内置网络摄像头的笔记本电脑上同时启动了 ubuntu 和 windows。网络摄像头在 windows 上运行良好,但在 ubuntu 上却不行,我不知道如何修复它。我查看了其他与我的问题类似的问题,但它们没有给出可行的解决方案。以下是我见过的几个人尝试的一些测试,以及我将它们放入终端后得到的结果

cd /dev/video0
bash: cd: /dev/video0: Not a directory
lsusb
Bus 002 Device 002: ID 045e:0306 Microsoft Corp. USB3.0 Card Reader
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 045e:09c0 Microsoft Corp. Surface Type Cover
Bus 001 Device 003: ID 1286:204c Marvell Semiconductor, Inc. Bluetooth and Wireless LAN Composite
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Driver Info:
    Driver name      : ipu3-imgu
    Card type        : ipu3-imgu
    Bus info         : PCI:0000:00:05.0
    Driver version   : 5.18.10
    Capabilities     : 0xa4202000
        Video Output Multiplanar
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps      : 0x24202000
        Video Output Multiplanar
        Streaming
        Extended Pix Format
Media Driver Info:
    Driver name      : ipu3-imgu
    Model            : ipu3-imgu
    Serial           : 
    Bus info         : PCI:0000:00:05.0
    Media version    : 5.18.10
    Hardware revision: 0x80862015 (2156273685)
    Driver version   : 5.18.10
Interface Info:
    ID               : 0x03000009
    Type             : V4L Video
Entity Info:
    ID               : 0x00000007 (7)
    Name             : ipu3-imgu 0 input
    Function         : V4L2 I/O
    Pad 0x01000008   : 0: Source
      Link 0x0200000b: to remote pad 0x1000002 of entity 'ipu3-imgu 0' (Video Statistics): Data
Priority: 2
Video output: 0 (ipu3-imgu 0 input)
Format Video Output Multiplanar:
    Width/Height      : 1920/1080
    Pixel Format      : 'ip3G' (10-bit bayer GRBG IPU3 Packed)
    Field             : None
    Number of planes  : 1
    Flags             : 
    Colorspace        : Raw
    Transfer Function : Default
    YCbCr/HSV Encoding: Default
    Quantization      : Default
    Plane 0           :
       Bytes per Line : 2496
       Size Image     : 2695680

它确实检测到了某些东西,但似乎没有一个程序能够真正使用它。到目前为止,我已经测试了 Firefox、Discord、Cheese 和 guvcview。Discord 和 Firefox 无法检测到摄像头,否则运行正常。在 cheese 上,屏幕是黑色的,显示“播放网络摄像头的视频时出错”。当我去更改首选项中的设备时,我看到“ipu3-imgu”8 次。它们都不起作用。当我打开 guvcview 时,会立即打开一个小错误窗口,提示“未找到视频设备。您似乎安装了视频设备。您想试试吗?”当我转到下拉菜单选择一个设备时,我看到“ipu3-imgu”10 次,看到“Intel IPU3 CIO2”4 次。

目前使用的是 Ubuntu 22.04LTS,但据我所知,这种情况可能已经持续了一段时间

编辑:更多测试:

sudo cheese
[sudo] password for user: 

(cheese:11404): GLib-GObject-CRITICAL **: 11:37:57.992: g_value_dup_string: assertion 'G_VALUE_HOLDS_STRING (value)' failed

(cheese:11404): GLib-GObject-CRITICAL **: 11:37:57.992: g_value_dup_string: assertion 'G_VALUE_HOLDS_STRING (value)' failed

(cheese:11404): GLib-GObject-CRITICAL **: 11:37:57.992: g_value_dup_string: assertion 'G_VALUE_HOLDS_STRING (value)' failed

(cheese:11404): GLib-GObject-CRITICAL **: 11:37:57.992: g_value_dup_string: assertion 'G_VALUE_HOLDS_STRING (value)' failed

(cheese:11404): GLib-GObject-CRITICAL **: 11:37:58.050: g_value_dup_string: assertion 'G_VALUE_HOLDS_STRING (value)' failed

(cheese:11404): GLib-GObject-CRITICAL **: 11:37:58.052: g_value_dup_string: assertion 'G_VALUE_HOLDS_STRING (value)' failed

(cheese:11404): GLib-GObject-CRITICAL **: 11:37:58.054: g_value_dup_string: assertion 'G_VALUE_HOLDS_STRING (value)' failed

(cheese:11404): GLib-GObject-CRITICAL **: 11:37:58.080: g_value_dup_string: assertion 'G_VALUE_HOLDS_STRING (value)' failed

(cheese:11404): cheese-WARNING **: 11:37:58.085: Device '/dev/video2' has no supported format: ../sys/v4l2/gstv4l2object.c(4038): gst_v4l2_object_set_format_full (): /GstCameraBin:camerabin/GstWrapperCameraBinSrc:camera_source/GstBin:bin18/GstV4l2Src:v4l2src1:
Call to S_FMT failed for NV12 @ 4224x3136: Invalid argument

Cheese 仍然无法使用 sudo 权限运行。将打开并运行

ls -l /dev/video*
crw-rw----+ 1 root video 81,  0 Jul 13 22:57 /dev/video0
crw-rw----+ 1 root video 81,  1 Jul 13 22:57 /dev/video1
crw-rw----+ 1 root video 81, 12 Jul 13 22:57 /dev/video10
crw-rw----+ 1 root video 81, 13 Jul 13 22:57 /dev/video11
crw-rw----+ 1 root video 81, 14 Jul 13 22:57 /dev/video12
crw-rw----+ 1 root video 81, 15 Jul 13 22:57 /dev/video13
crw-rw----+ 1 root video 81,  2 Jul 13 22:57 /dev/video2
crw-rw----+ 1 root video 81,  3 Jul 13 22:57 /dev/video3
crw-rw----+ 1 root video 81,  4 Jul 13 22:57 /dev/video4
crw-rw----+ 1 root video 81,  5 Jul 13 22:57 /dev/video5
crw-rw----+ 1 root video 81,  6 Jul 13 22:57 /dev/video6
crw-rw----+ 1 root video 81,  7 Jul 13 22:57 /dev/video7
crw-rw----+ 1 root video 81,  8 Jul 13 22:57 /dev/video8
crw-rw----+ 1 root video 81,  9 Jul 13 22:57 /dev/video9

答案1

许多设备访问问题可以通过组成员身份变更来解决。

具体来说,如果ls -l 显示组权限(第二个“ rwx”三元组)为“ rw”(例如“ -rw-rw----”),那么将自己添加到拥有该设备的组将授予rw访问权限。

就是这样:

# change to your device name 
device="/dev/video0"
sudo adduser $USER $(stat -c "%G" $device)

rw这允许您成为可以使用该设备的群组的成员,但还有一步。

要使所有进程成为新组的成员,请注销并登录。组成员资格是按时设置的login

要在新组中创建单个进程(用于测试,在注销/登录之前):

newgrp $(stat -c "%G" $device)  

或者,只需键入组名。请参阅man newgrp

相关内容