web-dev-qa-db-fra.com

Comment forcer Empathy Internet Messaging à modifier la webcam par défaut?

Je viens d'acheter une nouvelle webcam récemment. C'est alimenté par USB. Pour des raisons personnelles, je souhaite ne pas utiliser la webcam intégrée fournie avec mon netbook.

Je veux utiliser ce nouveau. J'aime l'empathie, c'est un excellent client de discussion. Mais je n'arrive pas à changer ma webcam par défaut empathie de la webcam intégrée à celle que je viens d'acheter.

Alors, y a-t-il un moyen de forcer l'empathie à utiliser la webcam alimentée par USB plutôt que la webcam intégrée?

Éliminons certaines options.

  1. J'ai essayé la méthode gstreamer-properties, root et l'utilisateur normal. Pas d'Utilisation.

  2. J'ai également essayé la méthode de l'éditeur de configuration, essayant de modifier manuellement les paramètres par défaut de la webcam.

  3. J'ai également essayé de mettre en liste noire le pilote intégré de la webcam, mais ma deuxième webcam fonctionnait également sur ce même pilote. Cette option était donc inutile, car elle désactivait les deux webcams, au lieu de celle que je devais utiliser.

6
TriforceLZG

Ce que tu veux, je pense, ce sont les règles udev.

Je suis sur 12.04 alors votre kilométrage peut varier, mais voici un exemple:
Vous voulez changer les commutateurs/dev/video1 et/dev/video0. D'abord obtenir les informations dont vous avez besoin:
udevadm info -a -p $(udevadm info -q path -n /dev/video0)
udevadm info -a -p $(udevadm info -q path -n /dev/video1)
Copiez ces deux énormes blocs de texte dans gedit
Le mien ressemblait à ceci:

  en regardant périphérique '/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0/video4linux/video0':
 KERNEL == "video0" 
 SOUS-SYSTEME == "video4linux" 
 PILOTE == "" 
 ATTR {name} == "USB2.0 PC CAMERA" 
 ATTR {index} == "0" 
 
 en regardant le périphérique parent '/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1:'&
 KERNELS == "1- 1: 1.0 "
 SOUS-SYSTÈMES ==" usb "
 PILOTES ==" 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 "
 
 regardant le périphérique parent '/ devices/pci 0000: 00/0000: 00: 12.2/usb1/1-1 ': 
 KERNELS == "1-1" 
 SOUS-SYSTÈMES == "usb" 
 PILOTES == " 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 {autorisé} == "1" 
 ATTRS {fabricant} == "ARKMICRO" 
 ATTRS {product} == "CAMÉRA PC USB2.0" 
 
 recherche du périphérique parent '/devices/pci0000:00/0000:00:12.2/usb1':
 KERNELS = = "usb1" 
 SOUS-SYSTÈMES == "usb" 
 PILOTES == "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 {vitesse} == "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 {authorisé} == "1" 
 ATTRS {fabricant} == "Linux 3.2.0-22-generic ehci_hcd" 
 ATTRS {produit} == "Contrôleur d’hôte EHCI" 
 ATTRS {série} == "0000: 00: 12.2" 
 ATTRS {authorised_default} == "1" 
 
 En regardant le périphérique parent '/ devices/pci0000: 00 /0000:00:12.2':
 KERNELS == "0000: 00: 12.2" 
 SOUS-SYSTÈMES == "pci" 
 DRIVERS == "ehci_hcd" 
 ATTRS {vendor} == "0x1002" 
 ATTRS {périphérique} == "0x4396" 
 ATTRS {sous-système_vendor} == "0x1043" 
 ATTRS {sous-système_device} == "0x8389 "
 ATTRS {classe} ==" 0x0c0320 "
 ATTRS {irq} ==" 17 "
 ATTRS {local_cpus} ==" 00000000.00000000.0000000000000000000000 , 00000000,000000000000000f "
 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 {compagnon } == "" 
 ATT RS {uframe_periodic_max} == "100" 
 
 En regardant le périphérique parent '/devices/pci0000:00':
 KERNELS == "pci0000: 00" 
 SOUS-SYSTÈMES == "" 
 PILOTES == "" 

Vous recherchez les attributs de lsusb qui correspondent à votre appareil photo:

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

Ensuite, en tant que root, vous éditez votre /etc/udev/rules.d/25-video-device.rules
Ce nom est relativement arbitraire. Le nombre dépend de ce que les ensembles sont analysés en premier, mais cela apparaît dans beaucoup de recherches udev sur Google. Utilisons-le simplement.

Le mien ressemble à:

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

Sauvegarder le fichier

Certaines sources indiquent comme racine service udev restart, mais j'ai un verrou matériel. Donc, redémarrez avec le plug-in.
Lancez tout ce qui ne vous permet pas de choisir un périphérique vidéo. Puisqu'ils sont probablement câblés pour utiliser/dev/video0, cela devrait "fonctionner".

Pour une raison quelconque, du moins pour moi, cela ne va pas écraser la vidéo existante0, mais créer deux fichiers (peut-être par conception). Vous pourriez ln -sf /dev/video1 /dev/video0. Pour moi, les appareils que j'ai spécifiés de cette façon semblent fonctionner. J'ai testé avec guvcview.

Félicitations, vous venez d'écrire une règle udev pour surmonter une URL codée en dur.

Vous pouvez également spécifier d’exécuter des commandes aux extrémités de ces règles 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"

Maintenant, votre vidéo USB occupe/dev/video0 et/dev/video1. Vous ne perdez pas non plus votre fonction intégrée car elle se trouve maintenant dans/dev/video2.

7
RobotHumans