#1 Le 18/04/2020, à 11:45
- Rengoku
[Résolu] Script root qui se lance au démarrage et webcam
Bonjour !
Il y a quelques jours, j'avais un problème de webcam non reconnue par ubuntu: https://forum.ubuntu-fr.org/viewtopic.php?id=2050942
J'ai réussi à la faire fonctionner en créant ce script:
sudo chmod 666 /sys/bus/usb/drivers/usbfs/unbind
sudo chmod 666 /sys/bus/usb/drivers/uvcvideo/bind
echo "1-6:1.0" > /sys/bus/usb/drivers/usbfs/unbind
echo "1-6:1.1" > /sys/bus/usb/drivers/usbfs/unbind
echo "1-6:1.0" > /sys/bus/usb/drivers/uvcvideo/bind
echo "1-6:1.1" > /sys/bus/usb/drivers/uvcvideo/bind
Le problème était que ma webcam utilisait le driver "usbfs" alors qu'elle devrait utiliser "uvcvideo".
Maintenant, j'aimerais que ce script soit exécuté à chaque démarrage de ma machine (car le dossier /sys est régénéré à chaque fois...). Je l'ai ajouté aux programmes au démarrage de linux mais il ne fonctionne pas car il nécessite des droits sudo.
Comment puis-je faire pour le lancer automatiquement à chaque démarrage d'ubuntu ?
Ma deuxième question est plus difficile: Je sais que ma méthode est un peu "bourrin" car je force un binding différent de ce que linux fait à chaque démarrage. Si vous connaissez une méthode plus "propre" pour que linux assigne dès le départ le module uvcvideo à ma webcam, ce serait top !
Merci
Dernière modification par Rengoku (Le 19/04/2020, à 18:26)
Hors ligne
#2 Le 18/04/2020, à 21:47
- Nuliel
Re : [Résolu] Script root qui se lance au démarrage et webcam
Est ce que le blacklist du module usbfs est trop brutal? Il serait alors pas chargé au démarrage automatiquement mais resterait possible à charger manuellement.
Normalement les chmod 666 sont pas utiles vu que tu utilises sudo après
Dernière modification par Nuliel (Le 18/04/2020, à 21:48)
Hors ligne
#3 Le 19/04/2020, à 09:59
- Rengoku
Re : [Résolu] Script root qui se lance au démarrage et webcam
ça me paraissait étrange aussi mais les chmod sont bien indispensables ici:
laurent@laurent-X751LX:~$ sudo echo "1-6:1.0" > /sys/bus/usb/drivers/usbfs/unbind
bash: /sys/bus/usb/drivers/usbfs/unbind: Permission non accordée
laurent@laurent-X751LX:~$ sudo chmod 666 /sys/bus/usb/drivers/usbfs/unbind
[sudo] Mot de passe de laurent :
laurent@laurent-X751LX:~$ echo "1-6:1.0" > /sys/bus/usb/drivers/usbfs/unbind
laurent@laurent-X751LX:~$
On remarque qu'il ne me demande même pas mon mot de passe lors du premier sudo.
J'avais essayé le blacklist usbfs, cela n'a pas fonctionné. En même temps, je n'arrive pas à savoir s'il s'agit vraiment d'un module ou non. Voir la différence de traitement entre usbfs et uvcvideo:
laurent@laurent-X751LX:~$ modprobe usbfs
modprobe: FATAL: Module usbfs not found in directory /lib/modules/4.15.0-96-generic
laurent@laurent-X751LX:~$ lsmod | grep usbfs
laurent@laurent-X751LX:~$ modprobe uvcvideo
laurent@laurent-X751LX:~$ lsmod | grep uvcvideo
uvcvideo 94208 0
videobuf2_vmalloc 16384 1 uvcvideo
videobuf2_v4l2 24576 1 uvcvideo
videobuf2_common 57344 2 videobuf2_v4l2,uvcvideo
videodev 221184 3 videobuf2_v4l2,uvcvideo,videobuf2_common
mc 49152 4 videodev,videobuf2_v4l2,uvcvideo,videobuf2_common
Hors ligne
#4 Le 19/04/2020, à 10:06
- Nuliel
Re : [Résolu] Script root qui se lance au démarrage et webcam
Effectivement, je pensais que c'était un module, mais ce n'en est pas un.
Du coup on peut faire un service systemd qui s'exécute au démarrage:
Pour cela, tu peux faire
sudo nano /usr/local/webcam.sh
et tu colles le contenu suivant
#!/bin/bash
sudo chmod 666 /sys/bus/usb/drivers/usbfs/unbind
sudo chmod 666 /sys/bus/usb/drivers/uvcvideo/bind
echo "1-6:1.0" > /sys/bus/usb/drivers/usbfs/unbind
echo "1-6:1.1" > /sys/bus/usb/drivers/usbfs/unbind
echo "1-6:1.0" > /sys/bus/usb/drivers/uvcvideo/bind
echo "1-6:1.1" > /sys/bus/usb/drivers/uvcvideo/bind
puis ctrl+x puis o pour enregistrer et quitter. Ensuite on crée le service systemd:
sudo nano /etc/systemd/system/webcam.service
[Unit]
Description=use uvcvideo instead of usbfs for webcam
After=network.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/local/webcam.sh
[Install]
WantedBy=multi-user.target
puis tu enregistres et quittes avec ctrl+x puis o
Ensuite on relance la recherche de services systemd:
systemctl daemon-reload
puis on le lance automatiquement:
systemctl enable webcam.service
puis un redémarrage et on pourra voir si cela fonctionne
Edit: sudo n'est peut être pas utile dans le service
Dernière modification par Nuliel (Le 19/04/2020, à 10:08)
Hors ligne
#5 Le 19/04/2020, à 10:19
- kamaris
Re : [Résolu] Script root qui se lance au démarrage et webcam
ça me paraissait étrange aussi mais les chmod sont bien indispensables ici:
laurent@laurent-X751LX:~$ sudo echo "1-6:1.0" > /sys/bus/usb/drivers/usbfs/unbind bash: /sys/bus/usb/drivers/usbfs/unbind: Permission non accordée laurent@laurent-X751LX:~$ sudo chmod 666 /sys/bus/usb/drivers/usbfs/unbind [sudo] Mot de passe de laurent : laurent@laurent-X751LX:~$ echo "1-6:1.0" > /sys/bus/usb/drivers/usbfs/unbind laurent@laurent-X751LX:~$
On remarque qu'il ne me demande même pas mon mot de passe lors du premier sudo.
Non, les chmod ne sont pas indispensables (et sont même à proscrire) : le problème est que là, sudo ne s'applique qu'à echo, pas à la redirection vers /sys/bus/usb/drivers/usbfs/unbind (les redirections font partie de la ligne de commande traitée par bash, pas de la commande passée à sudo).
Pour écrire avec sudo dans un fichier système, tu peux faire
echo 'texte' | sudo tee fichier-système
ou bien
sudo sh -c 'echo "texte" >fichier-système'
Concernant le mot de passe sudo, c'est parce que tu l'avais déjà rentré avant et qu'il reste quelques temps en mémoire, pour ne pas avoir à le rentrer sans arrêt.
Dernière modification par kamaris (Le 19/04/2020, à 10:21)
Hors ligne
#6 Le 19/04/2020, à 11:15
- Rengoku
Re : [Résolu] Script root qui se lance au démarrage et webcam
Concernant le mot de passe sudo, c'est parce que tu l'avais déjà rentré avant et qu'il reste quelques temps en mémoire, pour ne pas avoir à le rentrer sans arrêt.
Non je ne pense pas, la commande "sudo echo "1-6:1.0" > /sys/bus/usb/drivers/usbfs/unbind" ne me demande jamais mon mot de passe, même dans un nouveau terminal. Quand je fais un autre sudo juste après, là mon mot de passe est demandé. Cela ne change rien au problème, mais je le signale quand même pour me permettre de mieux comprendre le fonctionnement de linux
Non, les chmod ne sont pas indispensables (et sont même à proscrire) : le problème est que là, sudo ne s'applique qu'à echo, pas à la redirection vers /sys/bus/usb/drivers/usbfs/unbind (les redirections font partie de la ligne de commande traitée par bash, pas de la commande passée à sudo).
Pour écrire avec sudo dans un fichier système, tu peux faireecho 'texte' | sudo tee fichier-système
ou bien
sudo sh -c 'echo "texte" >fichier-système'
Merci, c'est déjà plus propre comme ça effectivement !
@Naziel: J'ai essayé ta technique mais elle ne fonctionne pas. Pour ça, j'ai ajouté une ligne de création d'un fichier "testscript" pour vérifier si le script se lançait bien au démarrage. Au redémarrage de mon ordinateur, le fichier n'est pas créé. Je pense que le script ne se lance pas bien au démarrage donc...
Voici un retour de commandes:
laurent@laurent-X751LX:~$ cat /usr/local/webcam.sh
#!/bin/bash
touch /home/laurent/Bureau/testscript
sudo sh -c 'echo "1-6:1.0" >/sys/bus/usb/drivers/usbfs/unbind'
sudo sh -c 'echo "1-6:1.1" >/sys/bus/usb/drivers/usbfs/unbind'
sudo sh -c 'echo "1-6:1.0" >/sys/bus/usb/drivers/uvcvideo/bind'
sudo sh -c 'echo "1-6:1.1" >/sys/bus/usb/drivers/uvcvideo/bind'
laurent@laurent-X751LX:~$ cat /etc/systemd/system/webcam.service
[Unit]
Description=use uvcvideo instead of usbfs for webcam
After=network.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/local/webcam.sh
[Install]
WantedBy=multi-user.target
Je précise que j'ai bien exécuté les commandes
systemctl daemon-reload
et
systemctl enable webcam.service
Dernière modification par Rengoku (Le 19/04/2020, à 11:17)
Hors ligne
#7 Le 19/04/2020, à 11:35
- kamaris
Re : [Résolu] Script root qui se lance au démarrage et webcam
Non je ne pense pas, la commande "sudo echo "1-6:1.0" > /sys/bus/usb/drivers/usbfs/unbind" ne me demande jamais mon mot de passe, même dans un nouveau terminal.
Ça n'est pas normal : fais voir le retour de
sudo cat /etc/sudoers
Hors ligne
#8 Le 19/04/2020, à 12:04
- Nuliel
Re : [Résolu] Script root qui se lance au démarrage et webcam
Tu peux faire
systemctl start webcam.service
suivi de
journalctl -u webcam
Dernière modification par Nuliel (Le 19/04/2020, à 12:05)
Hors ligne
#9 Le 19/04/2020, à 12:18
- Rengoku
Re : [Résolu] Script root qui se lance au démarrage et webcam
Ça n'est pas normal : fais voir le retour de
sudo cat /etc/sudoers
laurent@laurent-X751LX:~$ sudo cat /etc/sudoers
[sudo] Mot de passe de laurent :
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
@Naziel:
-- Logs begin at Wed 2020-01-22 09:04:18 CET, end at Sun 2020-04-19 13:15:24 CEST. --
avril 19 11:48:21 laurent-X751LX systemd[1]: Started use uvcvideo instead of usbfs for webcam.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Main process exited, code=exited, status=203/EXEC
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Failed with result 'exit-code'.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Service hold-off time over, scheduling restart.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Scheduled restart job, restart counter is at 1.
avril 19 11:48:21 laurent-X751LX systemd[1]: Stopped use uvcvideo instead of usbfs for webcam.
avril 19 11:48:21 laurent-X751LX systemd[1]: Started use uvcvideo instead of usbfs for webcam.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Main process exited, code=exited, status=203/EXEC
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Failed with result 'exit-code'.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Service hold-off time over, scheduling restart.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Scheduled restart job, restart counter is at 2.
avril 19 11:48:21 laurent-X751LX systemd[1]: Stopped use uvcvideo instead of usbfs for webcam.
avril 19 11:48:21 laurent-X751LX systemd[1]: Started use uvcvideo instead of usbfs for webcam.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Main process exited, code=exited, status=203/EXEC
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Failed with result 'exit-code'.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Service hold-off time over, scheduling restart.
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Scheduled restart job, restart counter is at 3.
avril 19 11:48:21 laurent-X751LX systemd[1]: Stopped use uvcvideo instead of usbfs for webcam.
avril 19 11:48:21 laurent-X751LX systemd[1]: Started use uvcvideo instead of usbfs for webcam.
avril 19 11:48:21 laurent-X751LX systemd[1807]: webcam.service: Failed to execute command: Permission denied
avril 19 11:48:21 laurent-X751LX systemd[1807]: webcam.service: Failed at step EXEC spawning /usr/local/webcam.sh: Permission denied
avril 19 11:48:21 laurent-X751LX systemd[1]: webcam.service: Main process exited, code=exited, status=203/EXEC
Hors ligne
#10 Le 19/04/2020, à 12:33
- kamaris
Re : [Résolu] Script root qui se lance au démarrage et webcam
Bizarre, il n'y a rien de spécial.
Fais voir aussi
sudo ls -al /etc/sudoers.d/
Hors ligne
#11 Le 19/04/2020, à 12:49
- Nuliel
Re : [Résolu] Script root qui se lance au démarrage et webcam
Oups, j'ai oublié de rendre le script exécutable...
sudo chmod +x /usr/local/webcam.sh
Hors ligne
#12 Le 19/04/2020, à 18:25
- Rengoku
Re : [Résolu] Script root qui se lance au démarrage et webcam
Bizarre, il n'y a rien de spécial.
Fais voir aussisudo ls -al /etc/sudoers.d/
laurent@laurent-X751LX:~$ sudo ls -al /etc/sudoers.d/
[sudo] Mot de passe de laurent :
total 20
drwxr-xr-x 2 root root 4096 févr. 13 13:10 .
drwxr-xr-x 176 root root 12288 avril 17 22:07 ..
-r--r----- 1 root root 958 mars 30 2016 README
Moi je pense que ça vient du fait que j'essaie d'écrire dans les fichiers "bind" et "unbind" qui sont des fichiers spéciaux...dont je ne comprends pas tout encore.
Oups, j'ai oublié de rendre le script exécutable...
sudo chmod +x /usr/local/webcam.sh
Yes ça marche !!! Même sans les sudo
Merci beaucoup !
Hors ligne
#13 Le 19/04/2020, à 18:37
- kamaris
Re : [Résolu] Script root qui se lance au démarrage et webcam
Non, comme je t'ai dit en #5, c'est sans lien avec les redirections.
Si vraiment tu peux faire sudo echo sans mot de passe, alors c'est que les droits t'en sont donnés quelque part, mais si ça n'est pas dans /etc/sudoers, alors je ne sais pas où.
Hors ligne