私はラップトップに統合されているウェブカメラを無効にする方法を探しています。ウェブカメラは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でデバイスを無効にする方法を学びたいです。
ありがとう!
とても簡単です。大変な作業は、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
で)。
@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コマンドは機能しません。
他に利用可能なソリューションはありますか?
接続されている場合は外部のもののみを有効にし、外部のものが接続されていない場合は内部のものを有効にしたい場合は、次のスクリプトを使用します。 Wildneuroの答えに基づいていますが、IDを指定すると、デバイスパスを把握できます。
私が依存しているアプリの中には、お好みのカメラを簡単に選ぶ方法を提供していないものがあるため、私はそれを使用しています。 lsusb
から)独自のカメラIDで簡単にカスタマイズできます。
ここにコード: https://Gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc