La VR sur PC pour 30€ avec un Smartphone

Aujourd’hui on s’attaque à un gros morceau: La VR.

C’est annoncé, 800€ minimum pour un casque VR. A cela, ajouter 1000€ pour la config qui va bien. Ça fait cher, surtout pour le peu de jeux disponibles. En écumant les forums, j’ai fini par trouver une solution à prix réduit pour TESTER la VR (oui, en Caps lock et en gras, n’imaginez pas jouer des heures avec ça).

Ce qu’il nous faut:

  • Un Smartphone
  • L’app kinovr (A télécharger sur http://kinovr.kinoni.com – version premium 10€ )
  • Le client Windows Kinovr (Toujours trouvable sur http://kinovr.kinoni.com – Gratuit)
  • Ce “truc” trouvable ICI pour 20€ (Casque de VR basique)
  • Elite Dangerous (Trouvable sur steam, version Arena a 6,75€)

 

Note: il existe une autre solution réservée à Android: TrinusVR. Je n’ai malheureusement pas de smartphone Android sous la main, cet article couvre donc exclusivement la solution commune iPhone/Android.

Principe de fonctionnement:

Pour commencer, je rappelle le principe de la VR: Le joueur dispose d’un casque sur la tête dans lequel se trouve un écran. L’écran va diffuser deux images, une pour l’œil gauche et une pour l’œil droit. L’image affichée ressemble donc à cela:

2016-02-24 (1)

Deux lentilles sont placées entre l’écran et les yeux du joueur: elles vont permettre de projeter l’image sur l’œil, et ainsi offrir une sensation d’immersion (théoriquement) totale. Le casque est équipé de détecteurs de position afin d’assurer le head-tracking: reproduire dans le jeu les mouvements de tête du joueur (pour pouvoir regarder autour). Mais alors, comment fait-on ça pour 30€? (prix du smartphone non inclus)

Reprenons en détail la liste donnée au début de cet article:

  • Le smartphone:
    Il contient l’écran et les capteurs de mouvement dont on a besoin
  • L’app Kinovr et le client Windows Kinovr:
    Vont s’occuper de streamer l’image du PC vers le smartphone, et utiliser les capteurs présents dans le smartphone pour renvoyer au PC la position de la tête du joueur
  • Le casque VR a 20€:
    Il s’agit tout simplement du casque: un support pour smartphone se fixant sur la tête et incluant deux lentilles. Un Google Cardboard fera aussi bien l’affaire.
  • Elite Dangerous:
    Pour jouer en VR, il faut un jeu. Si vous ne possédez pas ce jeu, Elite Dangerous: Arena est disponible a 6,75€ sur steam.

Configuration:

Sur le PC, on lance KinoConsole. Ne vous souciez pas de la première fenêtre et sautez directement a l’onglet VR Settings. Assurez-vous que tout est configuré comme suit:

VRSettings

Petite explication: pour leurrer notre machine, Kinovr va binder les mouvements de tête aux mouvements de la souris. C’est parfait pour nous: dans Elite Dangerous, on utilise la souris pour tourner la tête. Par défaut, la sensibilité est à 20. Vous devrez l’augmenter ou la diminuer si, une fois en jeu, les mouvements sont trop ou trop peu amples. Dans mon cas, 20 semble être le bon réglage. Ne fermez pas la KinoConsole! Laissez la tourner en arrière-plan.

On lance maintenant l’App sur notre smartphone, et on voit s’y afficher la KinoConsole: C’est gagné, l’écran du PC est streamé vers le smartphone!

20160224_001204000_iOS
L’image est coupée en deux, c’est normal.

On lance maintenant Elite Dangerous, on va de suite dans les réglages graphiques, et on active le mode 3D “Side by Side”:

2016-02-24

L’écran affiche maintenant deux fois la même image (semblable à l’image d’exemple au début de cet article). On revient au jeu et on insère le smartphone dans le casque. Dernière petite manip: En regardant bien en face, on clique une fois sur la molette de la souris (clic central) pour libérer les mouvements de la tête. Bienvenue dans le monde de la VR!
Si en cours de jeu, le tracking se désynchronise (comprendre: la position réelle de votre tête et sa position dans le jeu ne correspondent plus), cliquez sur la molette, regardez face à vous, cliquez de nouveau sur la molette: votre tête est de nouveau synchro (ouf!).

Retours d’expérience

Après plus d’une heure de jeu, premières impressions. On commence avec les points positifs:

  • Le smartphone tient bien en place dans le casque, le casque bien en place sur la tête
  • L’écartement des lentilles est réglable
  • La latence n’empêche pas du tout l’immersion
  • Aucun motion sickness (nausées causées par la VR)

Maintenant le négatif:

  • La résolution de l’écran (dans mon cas, iPhone 6) n’est pas suffisante et les pixels sont encore visibles
  • La qualité du stream PC => smartphone est trop faible, le jeu pixelise et des artefacts sont visibles à l’écran. La perte est énorme et empêche souvent de bien voir dans l’espace (je ne me suis rendu compte de la présence d’un vaisseau que 2 secondes avant de le percuter…). Même en filaire, le problème persiste.
  • A l’approche d’une planète (en vue d’un atterrissage), le stream se fige. Je ne sais pas si le souci vient de mon PC trop peu performant ou de l’app kinovr

Conclusion

Malgré les points négatifs, je vous encourage vivement à tester. Faire un premier pas dans le monde de la VR pour à peine 30€ est une excellente expérience. Je prévois de tester un peu plus, peut-être cette fois-ci avec des apps smartphone dédiées à la VR. Attention cependant: une fois le smartphone dans le casque, impossible de cliquer sur l’écran. Je vous incite donc à vous tourner vers une télécommande de ce type, voir à commander un casque fourni avec, tel que celui-ci.

Cyborg RAT 7/9 sous Linux

La Cyborg R.A.T.9, c’est ce mulot qui ressemble fort au résultat de l’accouplement d’Optimus Prime avec une souris classique:

20160223_163120238_iOS

Ceux d’entre vous qui ont tenté de booter une machine Linux à laquelle était connectée une Cyborg R.A.T 9 (ou 7, version filaire) ont passé un mauvais quart d’heure: interface qui cesse de répondre, boutons non-cliquables, freeze général du système… Pire encore: le problème persiste tant que la souris reste branchée (même en branchant une seconde souris pour l’utiliser à la place de la Cyborg).
rat9meme

De ce que j’ai compris, la R.A.T envoie à l’UI des commandes exotiques non comprises par le système et causant ces dysfonctionnements. Pour régler cela, on va tout simplement créer un fichier de config xorg, qui va permettre à l’UI de communiquer convenablement avec notre souris. J’ai testé sous Fedora, mais ça devrait fonctionner de même sous Ubuntu et les autres distros populaires.
On crée le fichier /etc/X11/xorg.conf.d/20-cyborgrat9.conf

Section “InputClass”
Identifier “R.A.T.”
MatchProduct “R.A.T.7|R.A.T.9”
MatchDevicePath “/dev/input/event*”
Option “Buttons” “17”
Option “ButtonMapping” “1 2 3 4 5 0 0 8 9 7 6 12 0 0 0 16 17”
Option “AutoReleaseButtons” “13 14 15”
Option “ZAxisMapping” “4 5 6 7”
EndSection

Et voilà! Un reboot et plus de problème.

Bienvenue sur mon blog! (2eme Edition)

Et voilà, on rouvre!
Ce blog est une nouvelle version de mon vieux blog d’étudiant. Après plusieurs années sans y toucher, me revoici. Plus que pour partager des trucs, je me servais de mon blog comme notes personnelles, pour me rappeler des-dits trucs. Deux évènements notables depuis sa création:

  • Mon post sur PacketTracer sous Mac OS X, qui reçoit encore aujourd’hui plusieurs visites quotidiennes
  • Ce jour où,  bloqué sur un problème technique, j’ai utilisé Google pour finir par arriver sur mon propre blog… où se trouvait la réponse (quand je vous dis que je m’en sers pour me souvenir de trucs…).

 

Début 2016, j’ai passé la certification RedHat RHCSA (Red Hat Certified System Administrator). Ca m’a pris 3 mois de boulot, j’ai principalement utilisé ce bouquin, super bien écrit et que je recommande:

Cover Linux Bible
Linux Bible, de Christopher Negus, pensez bien à prendre la dernière édition disponible.

Et c’est pas fini: j’enchaine sur la RHCE (Red Hat Certified Engineer), une certification Python (à déterminer), puis la Cisco CCNA. Mes nouveaux compagnons:

Books Pic
Vaut mieux les avoir dans la tête que les prendre sur la gueule.

Je posterai au fur et à mesure les trucs intéressants sortis de ces bouquins.

Allez, au boulot!

PS: J’ai rajouté une rubrique Gaming, au cas où me prendrait l’envie de poster des trucs un peu plus futiles.

Migrer d’un HDD vers un SSD sans réinstaller Windows

Un petit billet rapide sur ce sujet.
Il y a quelques semaines, agacé par les temps de chargement, j’ai choisi de remplacer mon disque dur (HDD) 500Go par un SSD de même capacité. Etant par nature une grosse feignasse (je suis informaticien…), j’ai souhaité que cette migration se fasse sans nécessité de réinstaller l’OS.
J’ai choisi ce SSD, avant tout pour le prix. Pensez également à prendre une nappe SATA! (ça vous évitera de courir chez le revendeur du coin pour en trouver un…)
Etape 1: Installez le logiciel gratuit EaseUS Todo Backup Free.
Etape 2: Après avoir éteint et débranché le PC, installez le SSD à l’intérieur du PC, sans enlever le HDD (vérifiez de bien brancher le SSD sur un port SATA rapide, consultez au besoin le manuel de votre carte mère pour connaitre les débits respectifs des ports).
Etape 3: Allumez le PC, lancez EaseUS, allez dans Clonage, puis Clonage de Disque. Vous devriez alors voir votre disque dur plein, et le SSD (vide).
Si vous ne voyez pas le SSD, pas de panique: Redémarrez simplement votre PC (pour une obscure raison, Windows 8 ne s’est rendu compte de la présence de ce SSD qu’au second démarrage).
Sélectionnez en haut votre HDD, en bas votre SSD, cochez bien la case “Optimiser pour SSD”
Attention: L’espace occupé sur votre HDD ne doit pas dépasser la capacité de votre SSD (logique…).
Vous devez avoir votre SSD vide en bas (ce qui n’est pas le cas ici…)
Etape 4: Lancez le clonage, et allez prendre un café (ou plusieurs…). A titre d’info, pour 500Go, ça m’a pris environ 1h30.
Etape 5: Eteignez votre PC, débranchez le du secteur, débranchez le HDD (SATA + Alim) et rallumez le PC.
Et voilà, notre PC boot sur le SSD, et ne se rend même pas compte de la différence! (Pour vous par contre, elle saute aux yeux…)
Pensez à installer le logiciel accompagnant votre SSD. Samsung fournit par exemple un outil permettant en un clic d’activer les paramètres de Windows spécifiques aux SSD.
L’utilitaire disponible sur le site de Samsung
Complément:
La fiabilité des SSD étant ce qu’elle est (une grande inconnue), j’ai conservé mon HDD dans la tour. L’idée est de mettre en place un clonage entre le SSD et le HDD, afin d’avoir un backup en cas de crash. Je pense mettre ça en place via le logiciel EaseUS Backup utilisé plus tôt dans ce tuto.
Je n’ai pas encore eu le temps (de toute façon, toutes mes données importantes sont répliquées sur un NAS et dans le Cloud). Je mettrai à jour ce tuto.
Pour réaliser cette migration, je me suis aidé de ce tuto.

Clé USB Linux Bootable sous Mac OS

Pour commencer, vous avez besoin de l’iso du système d’exploitation que vous voulez mettre sur votre clé (j’ai fait l’essai avec Kali).

Créer la clé bootable

1. Brancher la clé sur le Mac

2. Taper dans un terminal diskutil list. Le résultat devrait ressembler à ceci:
 MacBook-Pro:~ user$ diskutil list
/dev/disk0
 #: TYPE NAME                         SIZE                             IDENTIFIER   
0:   GUID_partition_scheme           *115.0 GB                   disk0   
1:    EFI                                         209.7 MB                    disk0s1   
2:    Apple_HFS Macintosh HD     114.2 GB                     disk0s2   
3:    Apple_Boot Recovery HD      650.0 MB                    disk0s3
/dev/disk1   
#: TYPE NAME                          SIZE                             IDENTIFIER   
0: FDisk_partition_scheme          *8.0 GB                         disk1   
1: DOS_FAT_32 NO NAME      8.0 GB                         disk1s1

Dans mon cas, la clé usb est /dev/disk1.

On tape à présent la commande diskutil unmountDisk /dev/disk1
Pensez à remplacer /dev/disk1 par le numéro de votre clé USB!

3. On va à présent “graver” l’iso sur la clé. Pour cela, placer l’iso à graver dans le répertoire dans lequel vous vous trouvez (tapez pwd si vous ne le savez pas).

Tapez la commande:
sudo dd if=monImageBootable.iso of=/dev/disk1 bs=1m
Pensez à remplacer le nom de l’image et le numéro de votre clé USB !

Le mot de passe root va être demandé, puis la gravure commence (vous pouvez aller vous chercher un café… ou plusieurs en fonction de la taille de l’iso).

Booter sur la clé

1. Téléchargez rEFIT trouvable ici.

2. Une fois l’image dmg récupérée, ouvrez la et lancez rEFIT.mpkg.

3. Redémarrer votre Mac DEUX FOIS pour que rEFIT apparaisse au démarrage, choisissez “Linux”.

Votre OS démarre!

Sources:
http://www.flexitpro.com/2010/03/22/cle-usb-bootable-comment-faire-depuis-un-mac/
http://refit.sourceforge.net/

 

Installer Kali/Backtrack dans une VM Parallel’s Desktop 7

J’ai pas mal galéré pour me créer une VM Kali (le nouveau nom de backtrack) sous Parallel’s Desktop 7. En effet, à la fin de l’installation, la machine virtuelle redémarre et reste bloquée sur cet écran:

La solution est plus que surprenante: il suffit de configurer la VM et de décocher “Voir la batterie dans Linux”:

Et voilà! Le genre de trucs qu’il faut savoir…

Source: http://forums.kali.org/showthread.php?71-Parallels-Desktop-7-Installation-(BUG-Soft-Lockup)

Annuaire LDAP sous Debian / Ubuntu

Sujet TP:

Nouvellement nommé DSi de mon entreprise (EADS), je dois déployer un projet d’annuaire.
Mon entreprise est répartie sur 10 sites: Toulouse (Siège), Paris, Bordeaux, Nice, Nantes, Londres, Berlin, Bonn, Rome et Bruxelles.
Cet annuaire devra gérer le personnel de l’entreprise, le matériel (PC, serveurs, Téléphones et routeurs). La DRH, située à Paris, a la charge de la gestion du personnel. Cet annuaire devra servir à authentifier le personnel.

Modélisation de l’annuaire:

.com dc=com
|
|-EADS dc=eads
|
|-organization dndName=organization
|-Toulouse
|-Paris
|-Users dndName=users
|-Bordeaux
|-Nice
|-Nantes
|-Londres
|-Berlin
|-Bonn
|-Rome
|-Bruxelles
|-Matériel dndName=devices
|-Computers
|-Phones
|-Servers
|-Routers

Quelques détails:
Les utilisateurs sont à Paris car on délègue leur gestion à ce site. Ils seront localisés (site d’appartenance) par un attribut.
On crée un container “organization” afin de simplifier par la suite l’administration de l’annuaire.
On sépare les différents sites car souvent, leur organisation interne diffère (Prod à Nice, compta à Bordeaux, etc…).
Les sites seront des containers de type dndName.

Installation de l’annuaire LDAP

On commence par installer le daemon serveur slapd et ldap-utils:

sudo apt-get install slapd ldap-utils

On charge ensuite les données de schéma par défaut (moi aussi je ne comprend pas ce que ça veut dire):

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

On redémarre le service LDAP:

sudo /etc/init.d/slapd restart

Installation de Apache Directory Studio

Télécharger Apache Directory Stydio puis l’extraire:
http://directory.apache.org/studio/

Chargement Backen/Frontend

Charger les fichiers Backend et Frontend tel qu’indiqué sur la doc Ubuntu:
http://www.doc.ubuntu-fr.org/openldap-server

Affichage de l’annuaire dans Apache Directory Studio

Se connecter en configurant la connexion de cette façon:

 

Ressources:
http://www.doc.ubuntu-fr.org/openldap-server
http://wiki.dolibarr.org/index.php/Installer_et_configurer_OpenLDAP

Exemple de modélisation d’annuaire LDAP

Administrateur du ministère de la défense, je dois gérer les 3 armées, les matériels, les logiciels. Seuls les serveurs sont communs à tout le monde. Les personnels sont gérés par chaque armée, sauf au ministère.

.fr c=fr
|-.gouv o=gouv
      |-Ministère ou=ministere
            |-Air
                  |-Utilisateurs
                  |-Logiciels
                  |-Matériel
                        |-Computers
                        |-Phones
                        |-Routers
            |-Terre

                  |-Utilisateurs
                  |-Logiciels
                  |-Matériel
                        |-Computers
                        |-Phones
                        |-Routers

            |-Marine

                  |-Utilisateurs
                  |-Logiciels
                  |-Matériel
                        |-Computers
                        |-Phones
                        |-Routers

      |-Serveurs
      |-Utilisateurs

NAT / PAT Sur routeur Cisco

 

Préalable:

On a configuré un switch avec deux Vlans, un lien trunk entre le switch et le routeur. Les deux PC se trouvent chacun dans un réseau différent (192.168.1.0 et 192.168.2.0) et dans un Vlan différent. Le routeur dispose de deux ports virtuels sur son interface trunk: 192.168.1.1 (vlan2) et 192.168.2.1 (vlan3).

L’adresse publique de notre routeur est 10.2.18.97. Tous les masques sont en /24.

Identification des interfaces (A faire en premier, quel que soit le type de NAT)

Avant tout, il faut identifier les interfaces publiques et privées.
conf t
interface fastEthernet 0/1

                  ip nat outside → Si l‘interface est publique
                  ex
         interface fastEthernet 0/0.20
                  ip nat inside → Si l‘interface est privée
                  ex

Inside Static NAT :

On va créer manuellement une translation :
conf t         ip nat inside source static <local IP> <global IP>

On visualise la table des translations :
show ip nat translations

Pour le désactiver :
conf t         no ip nat inside source static <local IP> <global IP>  
         (Répondre « yes » si le routeur demande si les routes doivent-être supprimées)

Inside Static NAT+PAT :

Avant tout, désactiver toute translation statique déjà en place (no ip nat inside…). Si le routeur refuse de le faire, nous disposons d’une commande “clear ip nat…” permettant de vider la table de translation.

On recrée maintenant une translation statique, mais en précisant les numéros de port:
ip nat inside source static tcp 192.168.2.2 80 10.2.18.97 200

Tout paquet envoyé à l’adresse 10.2.18.24 sur le port 200 sera maintenant redirigé vers l’adresse 192.168.1.2 sur le port 80.

Attention : A ce stade, le ping ne peut plus passer (ping utilise ICMP). On peut afficher la table des translations avec cette commande:

Router#show ip nat translations

Pro Inside global          Inside local       Outside local       Outside global
tcp 10.2.18.97:200     192.168.2.2:80            —                              —

On peut tenter d’établir une connexion pour vérifier le bon fonctionnement. Depuis une machine extérieure, taper:
telnet 10.2.18.97 200

La connexion sera refusée, aucun service telnet n’étant installé sur notre machine 192.168.1.2.
En affichant de nouveau la table des translations, on constate que notre tentative de connexion telnet a ouvert une entrée dans la table:

Table affichée:

Pro Inside global Inside local Outside local Outside global tcp 10.2.18.97:200 192.168.2.2:80 10.2.12.4:3696 10.2.12.4.3696 

Inside Dynamic NAT :

On va créer une access-list listant les machines autorisée à être NATées. Dans mon cas :
conf t

         access-list 12 permit 192.168.0.0 0.0.255.255

Vérifiable par :
show access-lists

On créer maintenant un pool d’adresses utilisables.
ip nat pool coucou 10.2.18.97 10.2.18.99 prefix-length 24 → masque en notation CIDR (= /24)


On active maintenant le NAT :
ip nat inside source list 12 pool coucou → Les adresses de l’ACL 12 seront natées derrière les adresses du pool « coucou »

OU
Lorsque l’on désire nater plusieurs adresses derrière l’adresse externe du routeur (ce qui est le cas sur les box opérateur des particuliers) :
ip nat inside source list 12 fastEthernet0/0 overload → Les adresses de l’ACL 12 seront natées derrière l’adresse de l’interface Fa0/0.


Inside Dynamic NAT + PAT :

On va créer une access-list listant les machines autorisée à être NATées. Dans mon cas :
conf t

         access-list 12 permit 192.168.0.0 0.0.255.255

Vérifiable par :
show access-lists

On créer maintenant un pool d’adresses utilisables (une seule adresse ici) :
ip nat pool coucou 10.2.18.97 10.2.18.97 prefix-length 24 → masque en notation CIDR (= /24)


On active maintenant le NAT :
ip nat inside source list 12 pool coucou overload → Les adresses de l’ACL 12 seront natées derrière les adresses du pool « coucou ». L’adresse pourra être utilisée simultanément par plusieurs machines (« overload » = PAT).


On constate que les adresses sont bien natées derrière une seule IP :

Router(config)#do sho ip nat transPro Inside global Inside local Outside local Outside global icmp 10.2.18.97:50950 192.168.2.2:50950 10.2.18.1:50950 10.2.18.1:50950 icmp 10.2.18.97:38918 192.168.3.2:38918 10.2.18.1:38918 10.2.18.1:38918 

Outside Static NAT (Principe uniquement):

On crée une ACL listant les adresses IP externes.
On crée un pool d’adresses qui seront utilisées pour nater.

La ligne finale sera de la forme :
ip nat outside source list 12 pool coucou overload