web-dev-qa-db-ja.com

統合されたWebカメラを無効にし、外部Webカメラを使用できるようにする方法

私はラップトップに統合されているウェブカメラを無効にする方法を探しています。ウェブカメラはuvcvideoモジュールを使用していますが、私が持っている外部ウェブカメラでも使用されているため、ブラックリストに登録したくありません。

モジュールリストに触れずにデバイス自体を無効にする方法はありますか?

これは、lsusbによってウェブカメラがリストされる方法です。最初のものは統合されたものです(一部のアプリではBisonCam NB Proとして識別されます)、2つ目は外部Logitech C525です。

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

私はすでにBIOSをチェックしました-ウェブカメラをそこから無効にする方法はありません。それに加えて、とにかくIDでデバイスを無効にする方法を学びたいです。

ありがとう!

13
AtomHeartFather

とても簡単です。大変な作業は、USBデバイスへのパスを特定することです。無効にするデバイスを見つけることから始める必要があります。 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)

無効にするデバイスポートを1〜6に変更します。多くの場合、ポートは論理的ではありません(物理的です)が、lsusb -tを使用してポートマッピングを取得できます。あなたがそれを持っていると思うと、あなたはそれをテストすることができます:

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

これにより、0402および5602、適切なデバイスのベンダーIDおよび製品ID(lsusbにリストされている)が得られます。

これで見つかったので、オフにするのは簡単です。

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

希望どおりに動作することを確認した後、すべてのスタートアップをロードするようにします(たとえば、/etc/rc.localで)。

14
Wildneuro

@surjack:1-6はポートマッピングに依存します。 lsusb -tと入力すると、それが取得され、lsusbの出力と比較されます。私にとっては、次の出力が得られます。

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. 

そして

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

04はカメラであるため、私の場合はAcer, Incである適切なバスを見つけてください。ポートマッピングは、カメラがBus 04.Port 1にあることを示しています。これは、1-6を使用する代わりに、4-1を使用する必要があることを意味します。私はLinux/Ubuntuの専門家ではありませんが、Bus-Portを使用し、単純に数字を使用する必要があるという印象を与えます。 100%にしたい場合は、説明どおりcatコマンドを使用してください。

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

そして、それをlsusbと比較してください。

私の場合:

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

これはlsusbの出力と同じです:5986:0525

これで、内部Webカメラが見つかりました。

しかし、残念ながらlysdexiaは正しく、Permission deniedであるためechoコマンドは機能しません。

他に利用可能なソリューションはありますか?

6
DamBedEi

接続されている場合は外部のもののみを有効にし、外部のものが接続されていない場合は内部のものを有効にしたい場合は、次のスクリプトを使用します。 Wildneuroの答えに基づいていますが、IDを指定すると、デバイスパスを把握できます。

私が依存しているアプリの中には、お好みのカメラを簡単に選ぶ方法を提供していないものがあるため、私はそれを使用しています。 lsusbから)独自のカメラIDで簡単にカスタマイズできます。

ここにコード: https://Gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc

0
Shimon Rura