So deaktivieren Sie die integrierte Webcam und können dennoch eine externe verwenden

13

Ich suche nach einer Möglichkeit, die in meinem Laptop integrierte Webcam zu deaktivieren. Die Webcam verwendet das uvcvideo-Modul, aber ich möchte es nicht auf die schwarze Liste setzen, da es auch von einer externen Webcam verwendet wird, die ich besitze.

Gibt es eine Möglichkeit, das Gerät selbst zu deaktivieren, ohne die Modulliste zu berühren?

So werden die Webcams von lsusb aufgelistet. Das erste ist ein integriertes (es wird von einigen Apps als BisonCam NB Pro bezeichnet), das zweite ist das externe Logitech C525:

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

Ich habe das BIOS bereits überprüft - es gibt keine Möglichkeit, die Webcam von dort aus zu deaktivieren. Außerdem würde ich gerne lernen, wie man das Gerät per ID sowieso deaktiviert.

Vielen Dank!

AtomHeartFather
quelle
Crossposted dies auf LinuxQuestions. Schließlich habe ich das Kernelmodul uvc_driver.c gehackt, indem ich einen Fehler erzwungen habe, als dieses Gerät gefunden wurde. Dies ist keine wirkliche Lösung, sondern eine schmutzige Umgehung, aber es funktioniert für mich. Ich habe es hier beschrieben: linuxquestions
AtomHeartFather

Antworten:

14

Es ist ganz einfach. Die harte Arbeit besteht darin, den Pfad zum USB-Gerät zu ermitteln. Zunächst müssen wir herausfinden, welches Gerät deaktiviert werden soll. Das schaffen wir mitlsusb :

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)

Ändern Sie 1-6 in die zu deaktivierenden Geräteports. Der Port ist oft nicht logisch (es ist physisch), aber Sie können ein Port-Mapping mit bekommen lsusb -t. Sobald Sie glauben, dass Sie es haben, können Sie es testen mit:

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

Dies gibt mir 0402und 5602, Anbieter und Produkt-IDs für das richtige Gerät (wie in aufgeführt lsusb).

Jetzt haben wir es gefunden. Das Ausschalten ist ganz einfach:

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

Nachdem Sie sichergestellt haben, dass es wie gewünscht funktioniert, laden Sie es bei jedem Start (z. B. in /etc/rc.local.)

Wildneuro
quelle
1
Brillante, saubere Lösung. Vielen Dank für das Teilen!
AtomHeartFather
1
Diese Technik scheint in 14.10 nicht mehr zu funktionieren. Es ist keine Datei "bConfigurationValue" vorhanden, und wenn versucht wird, eine als Benutzer oder als Root zu schreiben, wird die Berechtigung verweigert.
Lysdexia
Ich habe nicht verstanden, was "Änderung von 1-6 an Ihrem Geräteport" bedeutet. Ich konnte kein
Verzeichnis mit dem
In Ubuntu 14.04 echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValuefunktioniert dies nicht , auch wenn ich mit sudo arbeite. Der Wert bleibt nicht dort, die Datei enthält nichts. Die Webcam funktioniert immer noch.
Soham
Okay, es funktioniert, nachdem ich eine echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValueZeile hinzugefügt habe /etc/rc.local.
Soham
6

@surjack: 1-6hängt von Ihrer Portzuordnung ab. Wenn Sie lsusb -tetwas eingeben, erhalten Sie es und vergleichen es mit der Ausgabe von lsusb. Für mich bekomme ich folgende Ausgaben:

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. 

und

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

Finden Sie jetzt einfach den richtigen Bus, der 04in meinem Fall ist, weil der Acer, Incdie Kamera ist. Die Anschlusszuordnung zeigt, dass sich die Kamera in befindet Bus 04.Port 1. Dies bedeutet, anstatt zu verwenden, muss 1-6ich verwenden 4-1. Ich bin kein Linux / Ubuntu-Experte, aber dies gibt mir den Eindruck, dass Sie Bus-Portdie Zahlen verwenden und einfach verwenden müssen. Wenn Sie 100% sicher sein möchten, verwenden Sie den catBefehl wie folgt:

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

und vergleiche es mit lsusb.

In meinem Fall:

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

das ist identisch mit dem lsusb Ausgang: 5986:0525.

Nun haben Sie Ihre interne Webcam gefunden.

Aber leider ist Lysdexia richtig und der Echobefehl funktioniert da nicht Permission denied.

Gibt es eine andere Lösung?

DamBedEi
quelle
3
sudo -iund später echo "0" > ....
Sygi
Orsudo echo "0" > sudo /sys/bus/usb/devices/...
soham
0

Wenn Sie nur das externe aktivieren möchten, wenn es angehängt ist, aber das interne aktivieren möchten, wenn das externe nicht angehängt ist, finden Sie hier ein Skript dafür. Es basiert auf der Antwort von Wildneuro, kann aber anhand der ID den Gerätepfad für Sie ermitteln.

Ich benutze es, weil einige Apps, auf die ich angewiesen bin, offenbar keine Möglichkeit bieten, Ihre bevorzugte Kamera einfach auszuwählen. Sie können ganz einfach mit Ihren eigenen Kamera - IDs (vonlsusb ) .

Code hier: https://gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc

Shimon Rura
quelle
Da sich der Inhalt von Links ändern kann, fügen Sie bitte hier den entsprechenden Inhalt der verlinkten Seite hinzu.
Chai T. Rex