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

13

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 le mettre sur liste noire car il est également utilisé par une webcam externe que j'ai.

Existe-t-il un moyen 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 un intégré (il est identifié par certaines applications comme 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à. De plus, j'aimerais apprendre de toute façon comment désactiver l'appareil par ID.

Merci!

AtomHeartFather
la source
Crossposted ceci sur LinuxQuestions. Ce que j'ai finalement fait, c'est de pirater le module du noyau uvc_driver.c en forçant une erreur lorsque ce périphérique particulier est trouvé. Ce n'est pas vraiment une solution mais une solution de contournement sale, mais cela fonctionne pour moi. Je l'ai décrit ici: linuxquestions
AtomHeartFather

Réponses:

14

C'est assez simple. Le travail acharné consiste à déterminer le chemin vers le périphérique USB. Nous devons commencer par trouver quel appareil nous voulons désactiver. Nous pouvons le faire avec lsusb:

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)

Remplacez 1-6 par les ports de votre appareil à désactiver. 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 0402et 5602pour le bon dispositif (comme indiqué dans l' ID du fabricant et de produits lsusb).

Maintenant que nous l'avons trouvé, le désactiver est simple:

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

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

Wildneuro
la source
1
Solution brillante et propre. Merci beaucoup de partager ça!
AtomHeartFather
1
Cette technique ne semble plus fonctionner en 14.10. Aucun fichier "bConfigurationValue" n'existe et si l'on tente d'en écrire un en tant qu'utilisateur ou root, l'autorisation est refusée.
lysdexia
Je ne comprenais pas ce que signifie «changer 1-6 pour le port de votre appareil». Je n'ai pas trouvé de
répertoire
Dans Ubuntu 14.04, même si je fais echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValueavec sudo, cela ne fonctionne pas. La valeur ne reste pas là, le fichier ne contient rien. La webcam fonctionne toujours.
soham
D'accord, cela fonctionne après avoir ajouté une echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValueligne à /etc/rc.local.
soham
6

@surjack: 1-6dépend de la cartographie de votre port. Si vous tapez, lsusb -tvous l'obtiendrez, puis le comparerez avec la sortie de lsusb. Pour moi, j'obtiens 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, il suffit de trouver le bon bus qui est 04dans mon cas, car Acer, Incc'est la caméra. Le mappage de port montre que la caméra se trouve à Bus 04.Port 1. Cela signifie qu'au lieu d'utiliser, 1-6je dois utiliser 4-1. Je ne suis pas un expert Linux / Ubuntu mais cela me donne l'impression que vous devez utiliser Bus-Portet simplement utiliser les chiffres. Si vous voulez être sûr à 100%, utilisez la catcommande comme décrit:

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.

Vous avez maintenant 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?

DamBedEi
la source
3
sudo -iet plus tard echo "0" > ....
sygi
Ousudo echo "0" > sudo /sys/bus/usb/devices/...
soham
0

Si vous souhaitez activer uniquement celui externe lorsqu'il est connecté, mais que celui interne est activé si celui externe n'est pas connecté, voici un script pour cela. Il est basé sur la réponse de Wildneuro, mais peut déterminer le chemin de l'appareil pour vous en fonction de l'ID.

Je l'utilise car 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

Shimon Rura
la source
Étant donné que le contenu des liens peut changer, veuillez ajouter le contenu pertinent de la page liée ici.
Chai T. Rex du