Як відключити інтегровану веб-камеру та все ще мати можливість використовувати зовнішню


13

Я шукаю спосіб відключити веб-камеру, інтегровану в мій ноутбук. Веб-камера використовує модуль uvcvideo, але я не хочу вносити його в чорний список, оскільки він також використовується зовнішньою веб-камерою.

Чи є спосіб відключити сам пристрій, не торкаючись списку модулів?

Ось так перераховуються веб-камери lsusb. Перший - інтегрований (Деякі додатки його ідентифікують як BisonCam NB Pro), другий - зовнішній Logitech C525:

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

Я вже перевірив BIOS - немає можливості відключити веб-камеру звідти. Крім того, я хотів би дізнатися, як відключити пристрій за допомогою ідентифікатора в будь-якому випадку.

Спасибі!


Переклав це на LinuxQuestions. Що я в кінцевому підсумку зробив, це зламати модуль ядра uvc_driver.c, вимушуючи помилку, коли цей конкретний пристрій знайдений. Це насправді не рішення, а брудне рішення, але це працює для мене. Я описав це тут: linuxquestions
AtomHeartFather

Відповіді:


14

Це досить просто. Важка робота - це розробка шляху до 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ідентифікатори продавця та продукту для потрібного пристрою (як зазначено в lsusb).

Тепер ми знайшли це, відключити його просто:

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

Переконайтесь, що він працює за бажанням, переконайтеся, що він завантажує кожен запуск (наприклад, в /etc/rc.local.)


1
Блискучий чистий розчин. Дуже дякую за те, що поділилися цим!
AtomHeartFather

1
Ця техніка більше не працює в 14.10. Файлу "bConfigurationValue" не існує, і якщо намагається записати його як користувача чи root, дозвіл відмовляється.
lysdexia

Я не розумів, що означає "змінити 1-6 на порт вашого пристрою". Я не зміг знайти реж на ім'я 1-6
surajck

У Ubuntu 14.04, навіть якщо я займаюся echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValueіз судо, це не працює. Значення не залишається там, файл не містить нічого. Веб-камера все ще працює.
soham

Гаразд, це працює, коли я додаю echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValueрядок до /etc/rc.local.
soham

6

@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.

Тепер ви знайшли внутрішню веб-камеру.

Але, на жаль, лідедекс є правильним, і команда ехо не працює Permission denied.

Чи є інше рішення?


3
sudo -iі пізніше echo "0" > ....
сигі

Абоsudo echo "0" > sudo /sys/bus/usb/devices/...
soham

0

Якщо ви хочете ввімкнути лише зовнішній, коли він вкладений, але увімкнено внутрішній, якщо зовнішній не приєднаний, ось сценарій для цього. Він заснований на відповіді Wildneuro, але може з'ясувати шлях пристрою для вашої особи.

Я використовую його, оскільки деякі програми, від яких я залежу, не пропонують легко вибрати потрібну камеру. Ви можете легко налаштувати за допомогою власних ідентифікаторів камери (від lsusb).

Код тут: https://gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc


Оскільки вміст посилань може змінюватися, будь ласка, додайте сюди відповідний вміст пов’язаної сторінки.
Чай Т. Рекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.