web-dev-qa-db-ja.com

Empathy Internet Messagingにデフォルトのウェブカメラを変更させるにはどうすればよいですか?

最近、新しいウェブカメラを購入しました。 USB電源です。個人的な理由から、私は私のネットブックに付属している内蔵のウェブカメラを使用したくない。

この新しいものを使いたいです。私は共感が大好きで、素晴らしいチャットクライアントです。しかし、共感でデフォルトのウェブカメラを組み込みのウ​​ェブカメラから購入したばかりのウェブカメラに切り替えることはできないようです。

では、組み込みのウ​​ェブカメラではなく、USB駆動のウェブカメラを使用するように共感を強制する方法はありますか?

いくつかのオプションを削除しましょう。

  1. ルートおよび通常のユーザーであるgstreamer-propertiesメソッドを試しました。役に立たない。

  2. 構成エディターの方法も同様に試し、Webカメラのデフォルトを手動で変更しようとしました。

  3. また、組み込みのWebカメラドライバーをブラックリストに登録しようとしましたが、2つ目のWebカメラも同じドライバーで実行されるため、使用するのではなく、両方のWebカメラを無効にしたため、オプションは無意味でした。

6
TriforceLZG

あなたが欲しいのは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にコピーします
私は次のように見えました。

  デバイス '/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0/video4linux/video0'を見る:
 KERNEL == "video0" 
 SUBSYSTEM == "video4linux" 
 DRIVER == "" 
 ATTR {name} == "USB2.0 PCカメラ" 
 ATTR {index} == "0" 
 
親デバイスを見る '/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0':
 KERNELS == "1- 1:1.0 "
 SUBSYSTEMS ==" usb "
 DRIVERS ==" 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/pciを見る0000:00/0000:00:12.2/usb1/1-1 ':
 KERNELS == "1-1" 
 SUBSYSTEMS == "usb" 
 DRIVERS == " usb "
 ATTRS {configuration} ==" "
 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 {speed} == "480" 
 ATTRS {busnum} == "1" 
 ATTRS {devnum} == "14" 
 ATTRS {devpath} == "1" 
 ATTRS {version} == "2.00" 
 ATTRS {maxchild} == "0" 
 ATTRS {quirks} == "0x0" 
 ATTRS {avoid_reset_quirk} == "0" 
 ATTRS {authorized} == "1" 
 ATTRS {manufacturer} == "ARKMICRO" 
 ATTRS {product} == "USB2.0 PCカメラ" 
 
親デバイス '/devices/pci0000:00/0000:00:12.2/usb1'を見る:
 KERNELS = = "usb1" 
 SUBSYSTEMS == "usb" 
 DRIVERS == "usb" 
 ATTRS {configuration} == "" 
 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 {speed} == "480" 
 ATTRS {busnum} == "1" 
 ATTRS {devnum} == "1" 
 ATTRS {devpath} == "0" 
 ATTRS {version} == "2.00" 
 ATTRS {maxchild} == "6" 
 ATTRS {quirks} == "0x0" 
 ATTRS {avoid_reset_quirk} == "0" 
 AT TRS {authorized} == "1" 
 ATTRS {manufacturer} == "Linux 3.2.0-22-generic ehci_hcd" 
 ATTRS {product} == "EHCI Host Controller" 
 ATTRS {serial} == "0000:00:12.2" 
 ATTRS {authorized_default} == "1" 
 
親デバイスを見る '/ devices/pci0000:00 /0000:00:12.2':
 KERNELS == "0000:00:12.2" 
 SUBSYSTEMS == "pci" 
 DRIVERS == "ehci_hcd" 
 ATTRS {vendor} == "0x1002" 
 ATTRS {device} == "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 {companion } == "" 
 ATT RS {uframe_periodic_max} == "100" 
 
親デバイス '/ devices/pci0000:00'を見る:
 KERNELS == "pci0000:00" 
 SUBSYSTEMS == "" 
 DRIVERS == "" 

カメラに一致するlsusbの属性を探しています:

SUBSYSTEMS=="usb"
ATTRS{idVendor}=="firsthalf"
ATTRS{idProduct}=="secondhalf"

次に、ルートとして/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"

ファイルを保存する

一部のソースは、ルートservice udev restart、しかし、私はハードロックを取得しました。プラグインされた状態で再起動するだけです。
ビデオデバイスを選択できないものを起動します。それらはおそらく/ dev/video0を使用するように配線されているので、これは「正常に機能する」はずです。

何らかの理由で、少なくとも私にとっては、既存のvideo0を上書きしたり置き換えたりすることはなく、2つのファイルを作成するだけです(おそらく設計上)。あなたは出来る ln -sf /dev/video1 /dev/video0。私にとってこの方法を指定したデバイスは機能しているようです。 guvcviewでテストしました。

おめでとうございます、あなたはハードコーディングされたURLを克服するためにudevルールを書きました。

これらの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"

これで、USBビデオは/ dev/video0と/ dev/video1を占有します。ビルトインも/ dev/video2にあるため、失われることはありません。

7
RobotHumans