Cara menonaktifkan webcam terintegrasi dan masih bisa menggunakan yang eksternal

13

Saya mencari cara untuk menonaktifkan webcam yang terintegrasi ke laptop saya. Kamera web menggunakan modul uvcvideo tetapi saya tidak ingin memasukkannya ke dalam daftar hitam karena ia juga digunakan oleh kamera web eksternal yang saya miliki.

Apakah ada cara untuk menonaktifkan perangkat itu sendiri tanpa menyentuh daftar modul?

Ini adalah bagaimana webcam terdaftar oleh lsusb. Yang pertama adalah yang terintegrasi (Diidentifikasi oleh beberapa aplikasi sebagai BisonCam NB Pro), yang kedua adalah Logitech C525 eksternal:

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

Saya telah memeriksa BIOS - tidak ada cara untuk menonaktifkan webcam dari sana. Selain itu saya ingin belajar cara menonaktifkan perangkat dengan ID.

Terima kasih!

AtomHeartFather
sumber
Crossposted ini pada LinuxQuestions. Apa yang akhirnya saya lakukan adalah meretas modul kernel uvc_driver.c dengan memaksa kesalahan ketika perangkat khusus ini ditemukan. Ini sebenarnya bukan solusi tetapi solusi kotor, tetapi ini bekerja untuk saya. Saya jelaskan di sini: linuxquestions
AtomHeartFather

Jawaban:

14

Sederhana saja. Kerja kerasnya adalah menentukan jalan menuju perangkat USB. Kita perlu mulai dengan menemukan perangkat mana yang ingin kita nonaktifkan. Kita dapat melakukan ini dengan 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)

Ubah 1-6 ke port perangkat Anda yang akan dinonaktifkan. Port sering tidak logis (itu fisik) tetapi Anda bisa mendapatkan pemetaan port lsusb -t. Setelah Anda merasa memilikinya, Anda dapat mengujinya dengan:

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

Ini memberi saya 0402dan 5602, vendor dan ID produk untuk perangkat yang tepat (sebagaimana tercantum dalam lsusb).

Sekarang kami telah menemukannya, mematikannya sederhana:

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

Setelah memastikan itu berfungsi seperti yang diinginkan, buat itu memuat setiap startup (misalnya, dalam /etc/rc.local.)

Wildneuro
sumber
1
Brilian, solusi bersih. Terima kasih banyak untuk membagikannya!
AtomHeartFather
1
Teknik ini tampaknya tidak berfungsi lagi di 14.10. Tidak ada file "bConfigurationValue", dan jika seseorang mencoba untuk menulisnya baik sebagai pengguna atau root, izin ditolak.
lysdexia
Saya tidak mengerti apa artinya 'mengubah 1-6 ke port perangkat Anda'. Saya tidak dapat menemukan dir bernama 1-6
surajck
Di Ubuntu 14.04, bahkan jika saya lakukan echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValuedengan sudo, ini tidak berhasil. Nilai tidak tinggal di sana, file tidak mengandung apa pun. Kamera web masih berfungsi.
soham
Oke, ini berfungsi setelah saya menambahkan echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValuebaris ke /etc/rc.local.
soham
6

@ surjack: 1-6tergantung pada pemetaan port Anda. Jika Anda mengetik, lsusb -tAnda akan mendapatkannya lalu membandingkannya dengan output lsusb. Bagi saya, saya mendapatkan output berikut:

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. 

dan

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

Sekarang temukan Bus yang tepat 04dalam kasus saya karena Acer, Incini adalah kamera. Pemetaan port menunjukkan kamera berada di Bus 04.Port 1. Ini berarti daripada menggunakan 1-6saya harus menggunakan 4-1. Saya bukan ahli Linux / Ubuntu tetapi ini memberi saya kesan bahwa Anda harus menggunakan Bus-Portdan hanya menggunakan angka. Jika Anda ingin 100% yakin gunakan catperintah seperti yang dijelaskan:

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

dan bandingkan dengan lsusb.

Dalam kasus saya:

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

yang identik dengan output lsusb: 5986:0525.

Sekarang Anda menemukan webcam internal Anda.

Tetapi sayangnya lysdexia benar dan perintah echo tidak berfungsi karena Permission denied.

Apakah ada solusi lain yang tersedia?

DamBedEi
sumber
3
sudo -idan kemudian echo "0" > ....
sygi
Atausudo echo "0" > sudo /sys/bus/usb/devices/...
soham
0

Jika Anda hanya ingin mengaktifkan yang eksternal ketika terpasang, tetapi mengaktifkan yang internal jika yang eksternal tidak terpasang, inilah skrip untuk itu. Ini berdasarkan jawaban Wildneuro, tetapi bisa mengetahui jalur perangkat untuk Anda yang diberi ID.

Saya menggunakannya karena beberapa aplikasi yang saya andalkan tampaknya tidak menawarkan cara untuk dengan mudah memilih kamera pilihan Anda. Anda dapat dengan mudah menyesuaikan dengan ID kamera Anda sendiri (dari lsusb).

Kode di sini: https://gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc

Shimon Rura
sumber
Karena konten tautan dapat berubah, harap tambahkan konten yang relevan dari halaman tertaut di sini.
Chai T. Rex