Como forçar o Empathy Internet Messaging a mudar a webcam padrão?

6

Eu comprei recentemente uma nova webcam. É alimentado por USB. Por motivos pessoais, desejo não usar a webcam incorporada que acompanha o meu netbook.

Eu quero usar este novo. Eu amo empatia, é um ótimo cliente de chat. Mas, parece que eu não consigo mudar minha webcam padrão com empatia da webcam integrada para a que acabei de comprar.

Então, existe uma maneira de forçar a empatia a usar a webcam com USB, em vez da webcam embutida?

Vamos eliminar algumas opções.

  1. Eu tentei o método de propriedades gstreamer, root e usuário normal. Sem uso.

  2. Eu testei o método do editor de configuração também, tentando alterar manualmente os padrões da web cam.

  3. Eu também tentei colocar na lista negra o driver integrado de webcams, mas minha segunda web cam também funciona com o mesmo driver, então essa opção era inútil porque desativava as duas webcams, em vez da que eu precisava usar.

por TriforceLZG 04.04.2012 / 01:59

1 resposta

7

O que você quer, eu acho, são as regras do udev.

Estou no dia 12.04 para que sua milhagem possa variar, mas aqui está um exemplo:
Você quer mudar o switch / dev / video1 e / dev / video0. Primeiro, obtenha as informações necessárias:
udevadm info -a -p $(udevadm info -q path -n /dev/video0)
udevadm info -a -p $(udevadm info -q path -n /dev/video1)
Copie os dois enormes blocos de texto para o gedit
O meu parecia assim:

  looking at device '/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 CAMERA"
    ATTR{index}=="0"

  looking at parent device '/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"

  looking at parent device '/devices/pci0000: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 CAMERA"

  looking at parent device '/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"
    ATTRS{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"

  looking at parent device '/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}==""
    ATTRS{uframe_periodic_max}=="100"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Você está procurando os atributos do lsusb que correspondem à sua câmera:

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

Em seguida, como root, edite seu /etc/udev/rules.d/25-video-device.rules
Esse nome é relativamente arbitrário. O número tem a ver com o que os conjuntos são analisados primeiro, mas ele aparece em muitas pesquisas no google do udev. Vamos apenas usá-lo.

Parece o meu:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="18ec", ATTRS{idProduct}=="3298", NAME:="video0", OPTIONS:="link_priority=100"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="090c", ATTRS{idProduct}=="c371", NAME:="video2"

Salve o arquivo

Algumas fontes indicam como root service udev restart , mas eu tenho um hard lock. Então, basta reiniciar com ele conectado.
Agora acione tudo o que não lhe permite escolher um dispositivo de vídeo. Uma vez que eles são provavelmente hard-wired para usar / dev / video0, isso deve "apenas funcionar".

Por qualquer motivo, pelo menos para mim, não irá substituir e substituir o vídeo existente0, ele apenas cria dois arquivos (talvez por design). Você poderia ln -sf /dev/video1 /dev/video0 . Para mim, os dispositivos que eu especifiquei desse jeito parecem funcionar. Eu testei com guvcview.

Parabéns, você acabou de escrever uma regra do udev para superar um URL codificado.

Você pode especificar a execução de comandos nas extremidades dessas regras do udev também.

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"

Agora seu vídeo USB ocupa / dev / video0 e / dev / video1. Você não perde seu built-in, já que agora está localizado em / dev / video2.

    
por RobotHumans 13.04.2012 / 10:14