web-dev-qa-db-fra.com

Comment désactiver la webcam intégrée et toujours pouvoir utiliser une webcam externe

Je cherche un moyen de désactiver la webcam intégrée à mon ordinateur portable. La webcam utilise le module uvcvideo mais je ne veux pas la mettre sur liste noire, car elle est également utilisée par une webcam externe que j'ai.

Est-il possible de désactiver l'appareil lui-même sans toucher à la liste des modules?

Voici comment les webcams sont répertoriées par lsusb. Le premier est intégré (il est identifié par certaines applications comme étant BisonCam NB Pro), le second est le Logitech C525 externe:

Bus 002 Device 004: ID 5986:0361 Acer, Inc 
Bus 003 Device 002: ID 046d:0826 Logitech, Inc. 

J'ai déjà vérifié le BIOS - il n'y a aucun moyen de désactiver la webcam à partir de là. En outre, j'aimerais bien apprendre à désactiver le périphérique par ID de toute façon.

Merci!

13
AtomHeartFather

C'est assez simple. Le travail acharné consiste à déterminer le chemin d'accès au périphérique USB. Nous devons commencer par rechercher le périphérique que nous voulons désactiver. Nous pouvons le faire avec lsusbname__:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0402:5602 ALi Corp. M5602 Video Camera Controller
Bus 001 Device 003: ID 045e:0723 Microsoft Corp. LifeCam VX-7000 (UVC-compliant)

Changez 1-6 sur les ports de votre appareil pour être désactivé. Le port n'est souvent pas logique (c'est physique) mais vous pouvez obtenir un mappage de port avec lsusb -t. Une fois que vous pensez l'avoir, vous pouvez le tester avec:

cat /sys/bus/usb/devices/1-6/id{Vendor,Product} 

Cela me donne les codes 0402 et 5602, ainsi que les identifiants de fournisseur et de produit du périphérique approprié (comme indiqué dans lsusbname__).

Maintenant que nous l'avons trouvé, l'éteindre est simple:

echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValue

Après vous être assuré qu'il fonctionne comme vous le souhaitez, chargez-le à chaque démarrage (par exemple, dans /etc/rc.local.)

14
Wildneuro

@surjack: 1-6 dépend de votre mappage de port. Si vous tapez lsusb -t, vous l'obtiendrez, puis vous le comparerez à la sortie de lsusb. Pour moi, je reçois les sorties suivantes:

lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 5986:0525 Acer, Inc 
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 012: ID 413c:2107 Dell Computer Corp. 

et

lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 1, Class=Video, Driver=uvcvideo, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 3: Dev 9, If 0, Class=Vendor Specific Class, Driver=hdm_usb, 480M
    |__ Port 4: Dev 10, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 3: Dev 11, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 4: Dev 12, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
        |__ Port 3: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
        |__ Port 3: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M

Maintenant, trouvez juste le bon bus qui est 04 dans mon cas car le Acer, Inc est la caméra. Le mappage de port montre que la caméra est située à Bus 04.Port 1. Cela signifie qu'au lieu d'utiliser 1-6, je dois utiliser 4-1. Je ne suis pas un expert Linux/Ubuntu, mais cela me donne l’impression que vous devez utiliser Bus-Port et utiliser simplement les nombres. Si vous voulez être sûr à 100%, utilisez la commande cat comme décrit ci-dessous:

cat /sys/bus/usb/devices/<Bus>-<Port>/id{Vendor,Product} 

et le comparer avec lsusb.

Dans mon cas:

cat /sys/bus/usb/devices/4-1/id{Vendor,Product}
5986
0525

qui est identique à la sortie de lsusb: 5986:0525.

Maintenant, vous avez trouvé votre webcam interne.

Mais malheureusement, lysdexia a raison et la commande echo ne fonctionne pas car Permission denied.

Y a-t-il une autre solution disponible?

6
DamBedEi

Si vous souhaitez n'activer que l'externe lorsqu'il est connecté, mais que l'interne soit activé si l'externe n'est pas attaché, voici un script pour cela. Il est basé sur la réponse de Wildneuro, mais peut déterminer le chemin d'accès du périphérique pour vous en fonction de l'identifiant.

Je l'utilise parce que certaines applications dont je dépend ne semblent pas offrir un moyen de choisir facilement votre appareil photo préféré. Vous pouvez facilement personnaliser avec vos propres identifiants de caméra (à partir de lsusb).

Code ici: https://Gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc

0
Shimon Rura