Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/04/2020, à 12: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 smile

Dernière modification par Rengoku (Le 19/04/2020, à 19:26)

Hors ligne

#2 Le 18/04/2020, à 22: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, à 22:48)

Hors ligne

#3 Le 19/04/2020, à 10: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, à 11: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, à 11:08)

Hors ligne

#5 Le 19/04/2020, à 11:19

kamaris

Re : [Résolu] Script root qui se lance au démarrage et webcam

Rengoku a écrit :

ç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, à 11:21)

Hors ligne

#6 Le 19/04/2020, à 12:15

Rengoku

Re : [Résolu] Script root qui se lance au démarrage et webcam

kamaris a écrit :

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 smile

kamaris a écrit :

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'

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, à 12:17)

Hors ligne

#7 Le 19/04/2020, à 12:35

kamaris

Re : [Résolu] Script root qui se lance au démarrage et webcam

Rengoku a écrit :

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, à 13: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, à 13:05)

Hors ligne

#9 Le 19/04/2020, à 13:18

Rengoku

Re : [Résolu] Script root qui se lance au démarrage et webcam

kamaris a écrit :

Ç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, à 13: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, à 13: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, à 19:25

Rengoku

Re : [Résolu] Script root qui se lance au démarrage et webcam

kamaris a écrit :

Bizarre, il n'y a rien de spécial.
Fais voir aussi

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

Naziel a écrit :

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 big_smile

Merci beaucoup !

Hors ligne

#13 Le 19/04/2020, à 19: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