Встроенная веб-камера перестает работать через несколько секунд [Ubuntu 16.04]
Последние пару часов я пытался заставить мою встроенную веб-камеру (моего ноутбука Dell E7470) работать для таких приложений, как Skype.
Эта проблема:
После каждой загрузки камера работает нормально, но только в течение пары секунд (~ 30 секунд) после запуска видео приложения. После этого камера не может быть найдена ни одним приложением (включая cheese
) до перезагрузки.
Пастин
pastebin (извините, недостаточно репов, чтобы иметь несколько ссылок)
Когда это работает:
ls /dev/video0
показывает, что камера тамv4l2-ctl --info
дает следующий вывод: pastebin (первая часть)hwinfo | grep video
дает следующий вывод: pastebin (вторая часть)
Когда это не работает:
ls /dev/video0
дает:cannot access '/dev/video0': No such file or directory
v412-ctl --info
даетFailed to open /dev/video0: No such file or directory
hwinfo | grep video
дает следующий вывод: pastebin (третья часть)
Что я пробовал:
- Проверено, поддерживается ли моя веб-камера Ubuntu. Проверил на сайте Dell, а также на сайте UVC, и пришел к выводу, что он должен работать.
- Проверено, есть ли комбинация Fn + F_Key, которая включает / отключает мою веб-камеру. Кажется, не там.
- Установлены драйверы:
sudo apt-get install cheese build-essential linux-headers-
uname -r
- Пытался:
rmmod uvcvideo && modprobe uvcvideo
- Попробовал решение № 9 отсюда, изменив строку в
/etc/default/grub
(тоже пробовал ставитьiommu=soft
послеquiet splash
)
Извините за объединенную пастбину, но у меня недостаточно репутации, чтобы опубликовать более 2 ссылок. Буду очень признателен за любую помощь в том, как я мог бы решить эту проблему!
Изменить 1:
Через некоторое время встроенная веб-камера отключилась, и я обнаружил, что эта проблема возникла также более четырех лет назад. дела sudo rmmod uvcvideo && sudo modprobe uvcvideo
кажется, возвращает его к жизни на несколько секунд (я забыл выполнить эту команду с помощью sudo, поэтому раньше он ничего не делал), но потом снова не удается... Кто-нибудь когда-нибудь решал эту проблему?
Кстати, трюк с rmmod / modprobe работает всего несколько раз. После этого он вообще не работает до перезагрузки.
Изменить 2:
Вот трассировка звонка в /var/log/kern.log во время отказа камеры:
Jun 5 10:54:21 me kernel: [ 219.778042] CPU: 0 PID: 2455 Comm: cheese Not tainted 4.8.0-53-generic #56~16.04.1-Ubuntu
Jun 5 10:54:21 me kernel: [ 219.778043] Hardware name: Dell Inc. Latitude E7470/0T6HHJ, BIOS 1.13.4 02/07/2017
Jun 5 10:54:21 me kernel: [ 219.778044] 0000000000000286 000000002daf03ef ffff8d9e4be93b98 ffffffff9082e7b3
Jun 5 10:54:21 me kernel: [ 219.778045] ffff8d9e4be93be8 0000000000000000 ffff8d9e4be93bd8 ffffffff9048314b
Jun 5 10:54:21 me kernel: [ 219.778047] 000000ed4be93bd8 0000000000000000 ffffffff912d06c0 ffff8d9e771d70c0
Jun 5 10:54:21 me kernel: [ 219.778049] Call Trace:
Jun 5 10:54:21 me kernel: [ 219.778051] [<ffffffff9082e7b3>] dump_stack+0x63/0x90
Jun 5 10:54:21 me kernel: [ 219.778054] [<ffffffff9048314b>] __warn+0xcb/0xf0
Jun 5 10:54:21 me kernel: [ 219.778055] [<ffffffff904831cf>] warn_slowpath_fmt+0x5f/0x80
Jun 5 10:54:21 me kernel: [ 219.778057] [<ffffffff906b78a8>] ? kernfs_find_and_get_ns+0x48/0x60
Jun 5 10:54:21 me kernel: [ 219.778058] [<ffffffff906bb56b>] sysfs_remove_group+0x8b/0x90
Jun 5 10:54:21 me kernel: [ 219.778060] [<ffffffff909a6297>] dpm_sysfs_remove+0x57/0x60
Jun 5 10:54:21 me kernel: [ 219.778062] [<ffffffff90998ab8>] device_del+0x58/0x270
Jun 5 10:54:21 me kernel: [ 219.778063] [<ffffffff90942c42>] ? kbd_disconnect+0x22/0x30
Jun 5 10:54:21 me kernel: [ 219.778065] [<ffffffff90ac6ea3>] evdev_disconnect+0x23/0x60
Jun 5 10:54:21 me kernel: [ 219.778066] [<ffffffff90ac1ef5>] __input_unregister_device+0xb5/0x160
Jun 5 10:54:21 me kernel: [ 219.778067] [<ffffffff90ac2cc7>] input_unregister_device+0x47/0x70
Jun 5 10:54:21 me kernel: [ 219.778071] [<ffffffffc0a14ba2>] uvc_status_cleanup+0x42/0x50 [uvcvideo]
Jun 5 10:54:21 me kernel: [ 219.778073] [<ffffffffc0a0a208>] uvc_delete+0x18/0x160 [uvcvideo]
Jun 5 10:54:21 me kernel: [ 219.778074] [<ffffffffc0a0a423>] uvc_release+0x23/0x30 [uvcvideo]
Jun 5 10:54:21 me kernel: [ 219.778078] [<ffffffffc098f946>] v4l2_device_release+0xe6/0x120 [videodev]
Jun 5 10:54:21 me kernel: [ 219.778079] [<ffffffff909982d2>] device_release+0x32/0x90
Jun 5 10:54:21 me kernel: [ 219.778081] [<ffffffff90830f7a>] kobject_release+0x6a/0x170
Jun 5 10:54:21 me kernel: [ 219.778082] [<ffffffff90830e37>] kobject_put+0x27/0x50
Jun 5 10:54:21 me kernel: [ 219.778083] [<ffffffff909985c7>] put_device+0x17/0x20
Jun 5 10:54:21 me kernel: [ 219.778086] [<ffffffffc098e490>] v4l2_release+0x50/0x80 [videodev]
Jun 5 10:54:21 me kernel: [ 219.778087] [<ffffffff906350f7>] __fput+0xe7/0x230
Jun 5 10:54:21 me kernel: [ 219.778088] [<ffffffff906352ae>] ____fput+0xe/0x10
Jun 5 10:54:21 me kernel: [ 219.778090] [<ffffffff904a230e>] task_work_run+0x7e/0xa0
Jun 5 10:54:21 me kernel: [ 219.778091] [<ffffffff904032d2>] exit_to_usermode_loop+0xc2/0xd0
Jun 5 10:54:21 me kernel: [ 219.778093] [<ffffffff90403b3e>] syscall_return_slowpath+0x4e/0x60
Jun 5 10:54:21 me kernel: [ 219.778094] [<ffffffff90c9a8fe>] entry_SYSCALL_64_fastpath+0xa6/0xa8
Jun 5 10:54:21 me kernel: [ 219.778095] ---[ end trace cd02296d8a08b517 ]---
Jun 5 10:54:21 me kernel: [ 219.802017] ------------[ cut here ]------------
Jun 5 10:54:21 me kernel: [ 219.802022] WARNING: CPU: 0 PID: 2455 at /build/linux-hwe-MohJvK/linux-hwe-4.8.0/fs/sysfs/group.c:237 sysfs_remove_group+0x8b/0x90
Jun 5 10:54:21 me kernel: [ 219.802023] sysfs group ffffffff912d06c0 not found for kobject 'input14'
Изменить 3:
Другая трассировка вызовов показывает, что USB-соединение может быть неисправно:
Jun 5 11:08:11 me kernel: [ 1049.717359] usb 1-2: new full-speed USB device number 8 using xhci_hcd
Jun 5 11:08:11 me kernel: [ 1049.841492] usb 1-2: device descriptor read/64, error -71
Jun 5 11:08:12 me kernel: [ 1050.069407] usb 1-2: device descriptor read/64, error -71
Jun 5 11:08:12 me kernel: [ 1050.297575] usb 1-2: new full-speed USB device number 9 using xhci_hcd
Jun 5 11:08:12 me kernel: [ 1050.417566] usb 1-2: device descriptor read/64, error -71
Jun 5 11:08:12 me kernel: [ 1050.645641] usb 1-2: device descriptor read/64, error -71
Jun 5 11:08:12 me kernel: [ 1050.873599] usb 1-2: new full-speed USB device number 10 using xhci_hcd
Jun 5 11:08:12 me kernel: [ 1050.873825] usb 1-2: Device not responding to setup address.
Jun 5 11:08:13 me kernel: [ 1051.081804] usb 1-2: Device not responding to setup address.
Jun 5 11:08:13 me kernel: [ 1051.289562] usb 1-2: device not accepting address 10, error -71
Jun 5 11:08:13 me kernel: [ 1051.409586] usb 1-2: new full-speed USB device number 11 using xhci_hcd
Jun 5 11:08:13 me kernel: [ 1051.409821] usb 1-2: Device not responding to setup address.
Jun 5 11:08:13 me kernel: [ 1051.617820] usb 1-2: Device not responding to setup address.
Jun 5 11:08:13 me kernel: [ 1051.825581] usb 1-2: device not accepting address 11, error -71
Jun 5 11:08:13 me kernel: [ 1051.825661] usb usb1-port2: unable to enumerate USB device
Странно то, что idVendor (0bda) можно найти (это Realtek Semiconductor Corp.), но idProduct (5765) нигде не найти...
Изменить 4:
Просто чтобы прояснить, мой рабочий процесс выглядит следующим образом.
- Свежая загрузка в Ubuntu 16.04
- запуск
cheese
- Через 1 минуту происходит сбой со следующим выводом kern.log: https://pastebin.com/XVwSEDBZ
- Запустить снова
cheese
, Кажется, работает нормально... - Через 1 минуту снова происходит сбой, но теперь со следующим выводом kern.log: https://pastebin.com/8qHpBcdR (ошибка -71)
- Сейчас
cheese
больше не может запускаться успешно (устройство не обнаружено). - Перезагрузитесь и вернитесь к шагу 1...
2 ответа
Итак, реальным решением проблемы была работа с неподдерживающим ядром для моей веб-камеры. Я обновился с 4.8.0-54-generic до 4.10.0-22-generic, и теперь веб-камера очень стабильна. Лишь несколько раз он сам выключится (как, например, в мессенджере Facebook), но перезапуск приложения это исправит. Больше не нужно перезагружаться.
Читайте редактирование ниже также!
Таким образом, кажется, что есть много других, кто сталкивается (г) error -71
проблема; не только с веб-камерами, но и с USB-устройствами в целом. Похоже, что проблема заключается в "ошибке USB, которая появилась в энергосберегающих модулях [в ядре 2.6.27]". Так что для экономии энергии, я думаю, веб-камера была закрыта через минуту или около того.
Этот веб-сайт также имеет то, что кажется рабочим решением:
$ sudo -s
$ echo -1> /sys/module/usbcore/parameters/autosuspend
Это записано как "исправление", но, похоже, оно навсегда решило мою проблему (после перезагрузки значение вернулось к исходному значению 2, но больше никаких сбоев веб-камеры:))
Просто чтобы быть уверенным, я также сделал "постоянное исправление":
- Создайте файл в /etc/modprobe.d с именем usbcore
- Заполните файл следующим
options usbcore autosuspend=-1
- Сохранить файл
- Запустите "mkinitrd" (если вы уверены, что через initrd не загружены модули USB-устройств, этот шаг можно пропустить). Я пропустил этот шаг, потому что не удалось найти эту команду.
- перезагружать
Надеюсь, это поможет кому-то!
Важно Редактировать!
Таким образом, вышеупомянутый способ установки автоответчика не универсален и зависит от вашей ОС. Более подробный ответ о том, как отредактировать параметр autosuspend, вы найдете здесь: https://unix.stackexchange.com/questions/91027/how-to-disable-usb-autosuspend-on-kernel-3-7-10-or-above
Я упомяну это здесь только для полноты.
Для Ubuntu 14.04 и 15.04:
Отредактируйте файл /etc/default/grub и измените строку GRUB_CMDLINE_LINUX_DEFAULT, добавив параметр usbcore.autosuspend=-1:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"
Обратите внимание, что для выхода из всплывающего окна уже присутствовали варианты. Так что оставьте другие варианты у вас тоже.
После сохранения файла обновите grub:
sudo upgrade-grub
(также может бытьsudo update-grub2
(Я сделал оба))
И перезагрузка.
Теперь проверьте значение автоподвески:
cat /sys/module/usbcore/parameters/autosuspend
И это должно отображать -1
Ubuntu 15.10 и выше
Процедура та же, но параметр для изменения - autosuspend_delay_ms (вместо autosuspend).
Редактировать 2
Ложная тревога... Так что вышеперечисленное не сработало. Я все еще получаю, что ошибки устройства USB на error -71
, Вот полная трассировка стека /var/log/kern.log
на данный момент веб-камера не работает: https://pastebin.com/8qHpBcdR. Одно замечание: в первый раз, когда веб-камера выходит из строя, я получаю такой вывод: https://pastebin.com/XVwSEDBZ, The error -71
происходит только после того, как я пытаюсь бежать cheese
снова (который может запускаться нормально). Когда он снова падает, он больше не может работать (до перезагрузки).
Если кто-нибудь знает, что я могу сделать, пожалуйста, дайте мне знать!
Редактировать 3
Поэтому я обновил ядро с 4.8.0-54-generic до 4.10.0-22-generic, и пока оно кажется стабильным. Если снова произойдет сбой, я сообщу об этом.