web-dev-qa-db-fra.com

La webcam intégrée cesse de fonctionner après quelques secondes [Ubuntu 16.04]

Au cours des dernières heures, j'ai essayé de faire fonctionner ma webcam intégrée (de mon ordinateur portable Dell E7470) pour des applications telles que Skype.

Le problème:

Après chaque démarrage, la caméra fonctionne bien, mais seulement pendant quelques secondes (~ 30 secondes) après le démarrage de l'application vidéo. Après cela, aucune application (y compris cheese) ne pourra trouver la caméra avant le redémarrage.

La pâte

Pastebin (désolé, pas assez de représentants pour avoir plusieurs liens)

Quand ça marche:

  • ls /dev/video0 montre que la caméra est là

  • v4l2-ctl --info donne le résultat suivant: Pastebin (première partie)

  • hwinfo | grep video donne le résultat suivant: Pastebin (deuxième partie)

Quand ça ne marche pas:

  • ls /dev/video0 donne: cannot access '/dev/video0': No such file or directory

  • v412-ctl --info donne Failed to open /dev/video0: No such file or directory

  • hwinfo | grep video donne le résultat suivant: Pastebin (troisième partie)

Ce que j'ai essayé:

  1. Vérifié si ma webcam est supportée par Ubuntu. Vérifié sur le site Web de Dell ainsi que le site Web UVC, et est venu à la conclusion que cela devrait fonctionner.
  2. Vérifié s'il y a une combinaison Fn + F_Key qui active/désactive ma webcam. Il semble être pas là.
  3. Installé les pilotes: Sudo apt-get install cheese build-essential linux-headers-uname -r
  4. Essayé: rmmod uvcvideo && modprobe uvcvideo
  5. Essayé la solution n ° 9 de ici , en changeant une ligne dans /etc/default/grub (également essayé de mettre iommu=soft après quiet splash)

Désolé pour la combinaison Pastebin, mais je n'ai pas assez de réputation pour poster plus de 2 liens. Toute aide sur la façon dont je pourrais potentiellement résoudre ce problème serait grandement appréciée!

Modifier 1:

De Après un certain temps, la webcam intégrée est déconnectée J'ai constaté que ce problème se produisait également il y a plus de quatre ans. Faire Sudo rmmod uvcvideo && Sudo modprobe uvcvideo semble le ramener vivant pendant quelques secondes (j'ai oublié d'exécuter cette commande avec Sudo, c'est pourquoi il n'a rien fait auparavant), mais il échoue à nouveau ... Quelqu'un a-t-il déjà résolu ce problème?

En passant, l'astuce rmmod/modprobe ne fonctionne que quelques fois. Après cela, cela ne fonctionne plus du tout jusqu'à ce que je redémarre.

Edit 2:

Voici le suivi des appels dans /var/log/kern.log au moment où la caméra tombe en panne:

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'

Edit 3:

Un autre suivi d’appel montre que la connexion USB peut être défectueuse:

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

Une chose étrange est que le idVendor (0bda) peut être trouvé (qui est Realtek Semiconductor Corp.), mais l'idProduct (5765) est introuvable ...

Edit 4:

Pour être clair, mon flux de travail est le suivant.

  1. Nouveau démarrage dans Ubuntu 16.04
  2. Lancer cheese
  3. Après une minute, il se bloque avec la sortie suivante de kern.log: https://Pastebin.com/XVwSEDBZ
  4. Redémarrez cheese. Semble bien fonctionner ...
  5. Après une minute, il se bloque à nouveau, mais maintenant avec la sortie suivante de kern.log: https://Pastebin.com/8qHpBcdR (l'erreur -71)
  6. Maintenant, cheese ne peut plus démarrer correctement (aucun périphérique détecté).
  7. Redémarrez et revenez à l'étape 1 ...
4
JimmyJumbo

Ok, donc la vraie solution au problème était que je travaille avec un noyau qui ne supporte pas la webcam. Je suis passé de 4.8.0-54-generic à 4.10.0-22-generic et la webcam est maintenant très stable. Quelques fois, il s'éteindra tout seul (comme sur Facebook Messenger, par exemple), mais le simple redémarrage de l'application résoudra le problème. Plus besoin de redémarrer.

1
JimmyJumbo

Lisez aussi l'édition ci-dessous!

Il semble donc qu'il y a beaucoup d'autres qui font face à (d) le problème error -71; non seulement avec les webcams, mais les périphériques USB en général. Le problème semble être "un bogue USB introduit avec les modules d'économie d'énergie [dans le noyau 2.6.27]" . Donc, pour économiser de l’énergie, la webcam s’est arrêtée au bout d’une minute environ.

Ce site a également ce qui semble être la solution de travail:

$ Sudo -s
$ echo -1> /sys/module/usbcore/parameters/autosuspend

Ceci est écrit pour être le "correctif", mais il semblait avoir résolu définitivement mon problème (après le redémarrage, la valeur est revenue à la valeur d'origine 2, mais il n'y a plus d'échec de la webcam :))

Juste pour être sûr, j'ai aussi fait le "correctif permanent":

  1. Créez un fichier dans /etc/modprobe.d appelé usbcore
  2. Remplissez le fichier avec le suivant options usbcore autosuspend=-1
  3. Sauvegarder le fichier
  4. Exécutez "mkinitrd" (si vous êtes certain qu'aucun module de périphérique USB n'est chargé via initrd, vous pouvez ignorer cette étape). J'ai sauté cette étape car cette commande est introuvable.
  5. Redémarrage

J'espère que cela aide quelqu'un!

Important Edit!

Par conséquent, la méthode susmentionnée de configuration de la suspension automatique n'est pas universelle et dépend de votre système d'exploitation. Veuillez trouver une réponse plus élaborée sur la façon de modifier votre paramètre autosuspend ici: https://unix.stackexchange.com/questions/91027/how-to-disable-usb-autosuspend-on-kernel-3-7 -10-ou-dessus

Je vais le mentionner ici juste pour être complet.

Pour Ubuntu 14.04 et 15.04:

Editez le fichier/etc/default/grub et modifiez la ligne GRUB_CMDLINE_LINUX_DEFAULT pour ajouter l'option usbcore.autosuspend = -1:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"

Notez que quitter splash étaient déjà des options. Alors gardez les autres options que vous avez aussi.

Après avoir sauvegardé le fichier, mettez à jour grub:

Sudo upgrade-grub
(pourrait aussi être Sudo update-grub2 (j'ai fait les deux))

Et redémarrez.

Maintenant, vérifiez la valeur autosuspend:

cat /sys/module/usbcore/parameters/autosuspend Et il devrait afficher -1

Ubuntu 15.10 et supérieur

La procédure est la même, mais le paramètre à modifier est autosuspend_delay_ms (au lieu de autosuspend).

Modifier 2

Fausse alarme ... Donc, ce qui précède n'a pas fonctionné après tout. J'obtiens toujours que le périphérique USB est en erreur sur error -71. Voici une trace complète de la pile de /var/log/kern.log au moment où la webcam s'est écrasée: https://Pastebin.com/8qHpBcdR . Une remarque cependant: la première fois que la webcam plante, je reçois ce type de sortie: https://Pastebin.com/XVwSEDBZ , Le error -71 ne se produit que lorsque j'essaie de lancer cheese encore (qui peut se lancer normalement). Quand il se bloque à nouveau, il ne peut plus fonctionner du tout (jusqu’à ce que je redémarre).

Si quelqu'un a une idée de ce que je peux faire, s'il vous plaît faites le moi savoir!

Modifier 3

J'ai donc mis à jour mon noyau de 4.8.0-54-generic à 4.10.0-22-generic et, jusqu'à présent, il semble être stable. Si cela se bloque à nouveau, je le signalerai.

3
JimmyJumbo