Come disabilitare la webcam integrata e riuscire comunque a usarne una esterna


13

Sto cercando un modo per disabilitare la webcam integrata nel mio laptop. La webcam utilizza il modulo uvcvideo ma non voglio inserirla nella lista nera poiché è utilizzata anche da una webcam esterna che ho.

Esiste un modo per disabilitare il dispositivo stesso senza toccare l'elenco dei moduli?

Ecco come le webcam sono elencate da lsusb. Il primo è integrato (è identificato da alcune app come BisonCam NB Pro), il secondo è Logitech C525 esterno:

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

Ho già controllato il BIOS - non c'è modo di disabilitare la webcam da lì. Inoltre mi piacerebbe comunque imparare a disabilitare il dispositivo tramite ID.

Grazie!


Crossposted su LinuxQuestions. Quello che alla fine ho fatto è stato hackerare il modulo del kernel uvc_driver.c forzando un errore quando viene trovato questo particolare dispositivo. Questa non è davvero una soluzione ma una soluzione sporca, ma funziona per me. L'ho descritto qui: domande su Linux
AtomHeartFather il

Risposte:


14

È abbastanza semplice. Il duro lavoro è capire quale sia il percorso verso il dispositivo USB. Dobbiamo iniziare trovando quale dispositivo vogliamo disabilitare. Possiamo farlo con 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)

Passare 1-6 alle porte del dispositivo da disabilitare. La porta spesso non è logica (è fisica) ma è possibile ottenere un mapping delle porte con lsusb -t. Una volta che pensi di averlo, puoi provarlo con:

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

Questo mi dà 0402e 5602, ID fornitore e prodotto per il dispositivo giusto (come elencato in lsusb).

Ora l'abbiamo trovato, disattivarlo è semplice:

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

Dopo esserti assicurato che funzioni come desiderato, fai caricare ogni avvio (ad esempio, in /etc/rc.local.)


1
Soluzione brillante e pulita. Grazie mille per averlo condiviso!
AtomHeartFather il

1
Questa tecnica non sembra più funzionare nel 14.10. Non esiste alcun file "bConfigurationValue" e se si tenta di scriverne uno come utente o root, l'autorizzazione viene negata.
lysdexia,

Non ho capito cosa significa "modifica 1-6 nella porta del dispositivo". Non sono riuscito a trovare una
directory

In Ubuntu 14.04, anche se lo faccio echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValuecon sudo, questo non funziona. Il valore non rimane lì, il file non contiene nulla. La webcam funziona ancora.
Soham,

Va bene, funziona dopo aver aggiunto la echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValueriga a /etc/rc.local.
Soham,

6

@surjack: 1-6dipende dalla tua mappatura delle porte. Se digiti lsusb -t, lo otterrai e lo confronterai con l'output di lsusb. Per me ottengo i seguenti output:

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. 

e

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

Ora trova il bus giusto che è 04nel mio caso perché Acer, Incè la videocamera. La mappatura delle porte mostra la posizione della telecamera Bus 04.Port 1. Questo significa che invece di usare 1-6devo usare 4-1. Non sono un esperto di Linux / Ubuntu ma questo mi dà l'impressione che devi usare Bus-Porte semplicemente usare i numeri. Se vuoi essere sicuro al 100% usa il catcomando come descritto:

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

e confrontalo con lsusb.

Nel mio caso:

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

che è identico all'uscita lsusb: 5986:0525.

Ora hai trovato la tua webcam interna.

Ma purtroppo la lisdexia ha ragione e il comando echo non funziona perché Permission denied.

C'è un'altra soluzione disponibile?


3
sudo -ie più tardi echo "0" > ....
sygi,

Oppuresudo echo "0" > sudo /sys/bus/usb/devices/...
soham,

0

Se vuoi abilitare solo quello esterno quando è collegato, ma hai quello interno abilitato se quello esterno non è collegato, ecco uno script per quello. È basato sulla risposta di Wildneuro, ma può capire il percorso del dispositivo per te dato l'ID.

Lo uso perché alcune app da cui dipendo non sembrano offrire un modo per scegliere facilmente la tua fotocamera preferita. Puoi personalizzare facilmente con i tuoi ID videocamera (da lsusb).

Codice qui: https://gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc


Poiché il contenuto dei collegamenti può cambiare, si prega di aggiungere qui il contenuto pertinente della pagina collegata.
Chai T. Rex,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.