Jouer avec sa webcam, effectv, vloopback et ssh

Un article de Bellinux.

Jump to: navigation, search

Mais quel est le but de cette page??

un mur d'écran interactif à pas cher!!!


Matériel : 
- 10 ordis dont un un peu plus puissant
- 1 webcam
- 1 clef usb
- 1 téléphone qui a l'option "télécommande bluetooth"
Softs : 
- ssh
- vloopback
- effectv
- bluetooth
- synergy

un mur d'écrans, une personne devant avec un telephone à la main, qui voit sa tète sur les écrans via la webcam qui pointe sur elle.

Mur de 3x3, pour imposer un peu...

Sur tous les écrans, des effets différents, sur sa propre image en temps réel. pour chaque écran, les 48 effects disponibles de effectv.

possibilité de se connecter au mur d'écran avec son téléphone. le téléphone maitrise une souris (grosse et flashy de préférence, pour pas la louper) qui peut basculer d'un écran à l'autre avec le panel central du téléphone. le téléphone les touches flèche haut, flèche bas du clavier, touches qui correspondent au changement d'effect sous effectv, avec les touches 2 et 5 du téléphone

De quoi faire délirer les gens...! de quoi délirer à le faire ...!


- ordinateurs en réseau - openssh-server sur tous les ordis - effectv et vloopback sur l'ordinateur qui a la webcam


1 Sur l'ordinateur équipé de la webcam :

- installer effectv
  > apt-get install effectv
- tester effectv en le lançant via un terminal
> là, on ne peut lancer que 1 effectv à la fois...
- installer vloopback 
 > il faut le télécharger et le compiler. cf. [[1]]
 > installer le module avec insmod vloopback.ko
- utiliser le script 'resize' fourni dans le dossier 'example' afin de doublonner le flux de webcam. 
cela permettra de lancer x fois effectv
> resize /dev/video0 /dev/video2 320x240 320x240 yuv420p
> réponse "Starting video stream"

cette comande ne fais pas grand chose, par contre, maintenant, on peut lancer X fois effectv sur le meme device (virtuel) vidéo. (/dev/video2)

- là, on peut lancer X fois effectv (afin d'essayer X effets en meme temps) dans autant de terminaux que l'on veut
> term 1 : effectv -device /dev/video2
> term 2 : effectv -device /dev/video2 AgingTV
> term 3 : effectv -device /dev/video2 FireTV

>> là, si on en lance 9, ça nous fait un superbe carré de 3x3 avec l'image de la cam et des effets bizzzzares... comment afficher ça sur un mur d'écran de 3X3???


2 sur un autre ordi du réseau :

- lancer effectv via ssh et utilisation du X11 forwarding.
> ordi01 : ssh -X IP_ordiaveclacam effectv /dev/video2 
> ordi02 : ssh -X IP_ordiaveclacam effectv -fullscreen /dev/video2 FireTV

- inconvenient : il faut passer sur les X ordis ou l'on veut l'affichage... long!

> solution, centraliser les manips sur un seul ordi (idéalement celui ou il y a la cam!)

-  ouvrir autant de session ssh que d'ordis d'affichage
> ordiaveclacam : ssh ip_ordi01 (sans le X forward!!!)
> ordiaveclacam : ssh ip_ordi02 (sans le X forward!!!)
> ...
- à ce moment, on a, sur l'ordi avec la cam, 9 terminaux logués sur chacuns des ordis du mur d'écran, 
> term1_ordiaveclacam : ordi1 : 
> term2_ordiaveclacam : ordi2 : 
> term3_ordiaveclacam : ordi3 : 
...

si on veut, on peut lancer depuis ces terminaux, une requete ssh pour faire activer effectv de manière distante, cependant, il ne s'affiche pas sur l'écran distant, mais sur l'ordi d'ou on veut tout gérer; nul!

-  authoriser un xhost : 
> term1_ordiaveclacam : ordi1 : xhost +IP_ordiaveclacam
- définir la variable display
> term1_ordiaveclacam : ordi1 : export DISPLAY=":0.0"

- relancer effectv sur le pc d'affichage via la console en ssh : 
> term1_ordiaveclacam : ordi1 : ssh -X IP_ordiaveclacam effectv /dev/video2 AgingTV
- ajouter l'option fullscreen et hop, le tour est joué, l'affichage est déporté sur un écran du mur!
- on recommence la manip sur tous les terminaux loggué sur les ordis du mur d'écran : 
> term1_ordiaveclacam : ordi1 : ssh -X IP_ordiaveclacam effectv -fullscreen /dev/video2 AgingTV
> term2_ordiaveclacam : ordi2 : ssh -X IP_ordiaveclacam effectv -fullscreen /dev/video2 FireTV
> term3_ordiaveclacam : ordi3 : ssh -X IP_ordiaveclacam effectv -fullscreen /dev/video2 PsychedelikTV
...


voila notre mur d'écran qui nous montre 9 fois notre belle gueule, toute dans une ambiance différente.

là, si on a les 9 claviers sous la main, on peut s'amuser à changer tel ou tel effet de tel ou tel écran quand on arrive à capter quel clavier controle quel ordi...

on pourrait s'arréter là, car au pire, on utilise l'option -autoplay 3000 pour faire un espèce de changement automatique d'effet sur les écrans.

ps : déjà essayé avec 6, ça fonctionne...! [[2]]

MAIS

on peut jouer un peu plus!

la couche supplémentaire : combinaison téléphone / télécommande bluetooth / synergy

synergy?

apt-cache search synergy : Share mouse, keyboard and clipboard over the network ! :D

synergy est en mode client - serveur Donc, le serveur sur l'écran du centre du mur d'écran, les clients sur les écrans du bord du mur. sur l'ordi du centre, il faut brancher la clé usb bluetooth et activer la gestion à distance. il faut lancer le serveur synergys avec un fichier de conf ~/synergy.conf comme ceci

section: screens
       ordicentremilieu:
       ordicentregauche:
       ordicentredroit:
       ordihautmilieu :
       ordihautgauche :
       ordihautdroit :
       ordibasmilieu :
       ordibasgauche :
       ordibasdroit :
end
section: links
       ordicentremilieu:
               top = ordihautmilieu
               right = ordicentedroit
               bottom = ordibasmilieu
               left = ordicentregauche
       ordicentregauche:
               top = ordihautgauche
               right = ordicentremilieu
               bottom = ordibasgauche
               left = ordicentredroit (on sort du mur, donc on rerentre de l'autre coté!)
       ordicentredroit:
               top = ordihautdroit
               right = ordicentregauche (on sort du mur, donc on rerentre de l'autre coté!)
               bottom = ordibasdroit
               left = ordicentremilieu
       ordihautmilieu:
               top = ordibasmilieu (on sort du mur, donc on rerentre de l'autre coté!)
               right = ordihautdroit
               bottom = ordicentremilieu
               left = ordihautgauche
       ordihautgauche:
               top = ordibasgauche (on sort du mur, donc on rerentre de l'autre coté!)
               right = ordihautmilieu
               bottom = ordicentregauche
               left = ordihautdroit (on sort du mur, donc on rerentre de l'autre coté!)
       ordihautdroit:
               top = ordibasdroit (on sort du mur, donc on rerentre de l'autre coté!)
               right = ordihautgauche (on sort du mur, donc on rerentre de l'autre coté!)
               bottom = ordicentredroit
               left = ordihautmilieu
       ordibasmilieu:
               top = ordicentremilieu
               right = ordibasdroit
               bottom = ordihautmilieu (on sort du mur, donc on rerentre de l'autre coté!)
               left = ordibasgauche
       ordibasgauche:
               top = ordicentregauche
               right = ordibasmilieu
               bottom = ordihautgauche (on sort du mur, donc on rerentre de l'autre coté!)
               left = ordibasdroit (on sort du mur, donc on rerentre de l'autre coté!)
       ordibasdroit:
               top = ordicentredroit
               right = ordibasgauche (on sort du mur, donc on rerentre de l'autre coté!)
               bottom = ordihautdroit (on sort du mur, donc on rerentre de l'autre coté!)
               left = ordibascentre
end


là, avec un clavier / souris, on peut maitriser les 9 ordis du mur d'écran!!!

maintenant, dernier problème : effectv passe en fullscreen sur les 9 ordis, donc on a plus la main avec la souris. donc on peut pas dire à synergy : passage de l'écran central à l'écran à la droite, car ça se fait avec la souris. il faut trouver la solution pour garder un affichage de la souris pendant le plein-écran de effectv!

...dernier _petit_ point bloquant permettant une telle installation. si près du but, on vas pas chipoter...