如何强制 Empathy Internet Messaging 更改默认网络摄像头?

Tri*_*LZG 5 empathy default usb webcam 11.10

我最近刚买了一个新的网络摄像头。它是 USB 供电的。出于个人原因,我不想使用上网本附带的内置网络摄像头。

我想用这个新的。我喜欢同理心,它是一个很棒的聊天客户端。但是,我似乎无法将我的默认网络摄像头从内置网络摄像头切换到我刚购买的那个。

那么,有没有办法强制同理心使用 USB 供电的网络摄像头,而不是内置的网络摄像头?

让我们消除一些选择。

  1. 我尝试了 gstreamer-properties 方法,root 和普通用户。没用。

  2. 我也尝试了配置编辑器方法,尝试手动更改网络摄像头默认值。

  3. 我还尝试将内置网络摄像头驱动程序列入黑名单,但我的第二个网络摄像头也运行了相同的驱动程序,因此该选项毫无意义,因为它禁用了两个网络摄像头,而不是我需要使用的那个。

Rob*_*ans 6

我认为你想要的是 udev 规则。

我在 12.04,所以你的里程可能会有所不同,但这里有一个例子:
你想改变开关 /dev/video1 和 /dev/video0。首先获取您需要的信息:
udevadm info -a -p $(udevadm info -q path -n /dev/video0)
udevadm info -a -p $(udevadm info -q path -n /dev/video1)
将这两个巨大的文本块复制到 gedit
Mine 中,如下所示:

  查看设备'/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0/video4linux/video0':
    内核==“视频0”
    子系统==“video4linux”
    司机==""
    ATTR{name}=="USB2.0 电脑摄像头"
    ATTR{索引}=="0"

  查看父设备'/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0':
    内核=="1-1:1.0"
    子系统==“usb”
    驱动程序==“uvcvideo”
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{bInterfaceClass}=="0e"
    ATTRS{bInterfaceSubClass}=="01"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{iad_bFirstInterface}=="00"
    ATTRS{iad_bInterfaceCount}=="02"
    ATTRS{iad_bFunctionClass}=="0e"
    ATTRS{iad_bFunctionSubClass}=="03"
    ATTRS{iad_bFunctionProtocol}=="00"

  查看父设备'/devices/pci0000:00/0000:00:12.2/usb1/1-1':
    内核==“1-1”
    子系统==“usb”
    驱动程序==“USB”
    ATTRS{配置}==""
    ATTRS{bNumInterfaces}==" 4"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="320mA"
    ATTRS{urbnum}=="5064"
    ATTRS{idVendor}=="18ec"
    ATTRS{idProduct}=="3299"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bDeviceClass}=="ef"
    ATTRS{bDeviceSubClass}=="02"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{速度}==“480”
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="14"
    ATTRS{devpath}=="1"
    ATTRS{version}==“2.00”
    ATTRS{maxchild}=="0"
    ATTRS{怪癖}==“0x0”
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{授权}==“1”
    ATTRS{制造商}=="ARKMICRO"
    ATTRS{product}=="USB2.0 电脑摄像头"

  查看父设备“/devices/pci0000:00/0000:00:12.2/usb1”:
    内核==“usb1”
    子系统==“usb”
    驱动程序==“USB”
    ATTRS{配置}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}==“0mA”
    ATTRS{urbnum}=="324"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0302"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{速度}==“480”
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==“2.00”
    ATTRS{maxchild}=="6"
    ATTRS{怪癖}==“0x0”
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{授权}==“1”
    ATTRS{制造商}=="Linux 3.2.0-22-generic ehci_hcd"
    ATTRS{product}=="EHCI 主机控制器"
    ATTRS{serial}=="0000:00:12.2"
    ATTRS{authorized_default}=="1"

  查看父设备'/devices/pci0000:00/0000:00:12.2':
    内核==“0000:00:12.2”
    子系统==“pci”
    驱动程序==“ehci_hcd”
    ATTRS{供应商}==“0x1002”
    ATTRS{设备}==“0x4396”
    ATTRS{subsystem_vendor}=="0x1043"
    ATTRS{subsystem_device}=="0x8389"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="17"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{numa_node}=="0"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{同伴}==""
    ATTRS{uframe_periodic_max}=="100"

  查看父设备“/devices/pci0000:00”:
    内核==“pci0000:00”
    子系统==""
    驱动程序==""

您正在从 lsusb 中寻找与您的相机相匹配的属性:

SUBSYSTEMS=="usb"
ATTRS{idVendor}=="firsthalf"
ATTRS{idProduct}=="secondhalf"
Run Code Online (Sandbox Code Playgroud)

然后以 root 身份编辑你的/etc/udev/rules.d/25-video-device.rules
那个名字是相对随意的。该数字与首先解析的集合有关,但它会在很多 udev google 搜索中弹出。让我们使用它。

我的看起来像:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="18ec", ATTRS{idProduct}=="3298", NAME:="video0", OPTIONS:="link_priority=100"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="090c", ATTRS{idProduct}=="c371", NAME:="video2"
Run Code Online (Sandbox Code Playgroud)

保存文件

一些消息来源表明为 root service udev restart,但我得到了一个硬锁。所以只要插上它就重启。
现在启动任何不允许你选择视频设备的东西。由于他们可能硬连线使用 /dev/video0,所以这应该“正常工作”。

无论出于何种原因,至少对我而言,它不会覆盖并取代现有的 video0,它只会创建两个文件(可能是设计使然)。你可以ln -sf /dev/video1 /dev/video0。对我来说,我以这种方式指定的设备似乎有效。我用guvcview测试过。

恭喜,您刚刚编写了一个 udev 规则来克服硬编码的 url。

您也可以指定在这些 udev 规则的末尾运行命令。

SUBSYSTEMS=="usb", ATTRS{idVendor}=="18ec", ATTRS{idProduct}=="3298", NAME:="video0", OPTIONS:="link_priority=100", RUN+="ln -sf /dev/video1 /dev/video0"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="090c", ATTRS{idProduct}=="c371", NAME:="video2"
Run Code Online (Sandbox Code Playgroud)

现在你的 USB 视频占用了 /dev/video0 和 /dev/video1。您也不会丢失内置文件,因为它现在位于 /dev/video2。