尝试连接 USB 相机(Kinect)时“无法在相机上声明接口:-6”

rze*_*erg 6 linux usb kinect

我已经从openkinect.org安装了 freenect 库。使用该库,您可以从终端运行一个演示应用程序来测试 Kinect。但是,当我运行此命令时,我得到以下输出:

richard@behemoth:~$ sudo freenect-glview 
Kinect camera test
Number of devices found: 1
Could not claim interface on camera: -6
Could not open device
Run Code Online (Sandbox Code Playgroud)

这个特定的错误是由库libusb通过函数libusb_claim_interface 抛出的,错误 -6 对应于LIBUSB_ERROR_BUSY. 所以我的猜测是它与安装 USB 有关系,而不是特定的freenect库或 Kinect 本身。

所以我的问题是如何找出使用此接口的资源以及如何释放它以便我可以访问它?

编辑:

到目前为止我尝试过的(只是为了确定):

  • 重新启动
  • 插电,插电
  • 尝试了不同的 USB 端口
  • 重启udev

可能有用的其他信息:

/etc/fstab:

# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=1c73f217-ac8d-451b-8390-7a680628a856 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=bb49bd29-07ec-45a0-bbab-46fb8362b06b none            swap    sw              0       0
Run Code Online (Sandbox Code Playgroud)

须藤uname -r:

Linux 庞然大物 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686 i686 i386 GNU/Linux

cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10"
Run Code Online (Sandbox Code Playgroud)

har*_*ymc 3

我没有你的环境,无法测试,但是gphoto FAQ的摘录似乎说这可能是权限问题,而不是某个程序独占接口。

以下引用包含指向“设置 USB 端口权限”一章的链接,您可以查看该链接。

为什么我收到错误消息“无法声明 USB 设备”?

您必须确保没有加载此类内核模块,并且您已正确设置 USB 设备上的权限,以便您拥有对相机设备的(非根)写入访问权限。第 4.3 节“设置 USB 端口的权限”中介绍了如何设置。

作为 USB 大容量存储设备的相机也会发生这种情况。一个值得注意的例子是,如果您有一台奥林巴斯相机,它会被自动检测为奥林巴斯 C-2040Z。在这种情况下,如果您运行 Linux,则可以尝试删除 usb-storage 内核模块并尝试使用 libgphoto2。但是,除非您想控制相机(并非所有型号都支持),否则不推荐使用该解决方案。继续使用 USB 大容量存储设备。其中一些奥林巴斯支持切换到“PC 控制”模式,以便使用外部程序(例如使用 libgphoto2 的程序)进行远程控制。