Как заставить Empathy Internet Messaging изменить веб-камеру по умолчанию?

6

Недавно я купил новую веб-камеру. Он питается от USB. По личным причинам я не хочу использовать встроенную веб-камеру, которая поставляется вместе с моим нетбуком.

Я хочу использовать этот новый. Мне нравится сочувствие, это отличный чат-клиент. Но, похоже, я не могу переключить свою веб-камеру по умолчанию в эмпатии со встроенной веб-камеры, к той, которую я только что купил.

Итак, есть ли способ заставить эмпатию использовать веб-камеру с питанием от USB, а не встроенную веб-камеру?

Давайте устраним некоторые параметры.

  1. Я попробовал метод gstreamer-properties, root и обычный пользователь. Не использовать.

  2. Я пробовал использовать метод редактора конфигурации, пытаясь вручную изменить настройки веб-камеры по умолчанию.

  3. Я также попытался сделать черный список встроенных драйверов веб-камер, но мой второй веб-камера также убегает от этого же драйвера, чтобы опция была бессмысленной, поскольку она отключила оба веб-камеры, а не тот, который мне нужно было использовать.

задан TriforceLZG 04.04.2012 в 01:59
источник

1 ответ

7

То, что вы хотите, я думаю, это 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
Мой выглядел так:

  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==""

Вы ищете атрибуты из lsusb, которые соответствуют вашей камере:

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

Затем, как root, вы редактируете /etc/udev/rules.d/25-video-device.rules
Это имя относительно условно. Это число связано с тем, какие команды сначала обрабатываются, но всплывают во множестве поисковых запросов. Давайте просто используем его.

Моя выглядит как:

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

Сохраните файл

Некоторые источники указывают как root service udev restart , но я получил жесткий замок. Так что просто перезагрузите его. Теперь запустите все, что не позволит вам выбрать видеоустройство. Поскольку они, вероятно, жестко связаны с использованием / dev / video0, это должно «просто работать».

По какой бы то ни было причине, по крайней мере для меня, он не будет перегружать и вытеснять существующее видео0, он просто создает два файла (может быть, по дизайну). Вы можете ln -sf /dev/video1 /dev/video0 . Для меня устройства, которые я указал таким образом, похоже, работают. Я тестировал с guvcview.

Поздравляем, вы только что написали правило 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.

    
ответ дан RobotHumans 13.04.2012 в 10:14
источник