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 01/05/2017, à 21:18

Tyuio32

DS4 CUH-ZCT2U non fonctionnel

Bonjour !

Donc, je sais qu'il existe ds4drv sur Linux qui permet le fonctionnement d'une DualShock 4. Cela dit, il semble que l'application est assez ancienne comme elle ne prend en charge que la première génération de la DS4, ors, ma manette fait partie de la deuxième génération..... Comme rien n'est toujours simple, bha... ça fonctionne juste pas.

J'ai lu qu'il fallait aller modifier des lignes de commande du logiciel de root, mais de 1, ça semble un peu foutoir, de 2, je suis sur Ubuntu Mate et il ne me laisse aucun accès aux droits d'utilisateurs Root, même par Gksudo nautilus (qui fonctionne juste pas).

J'avoue être à cours d'idées.... Quelqu'un sait comment arranger le problème ? Je vous remercie en avance !

*PS : Pour couronner le tout, je n'ai aucune idée de comment installer ds4drv en dehors des lignes de commandes donné sur des forums. J'ai vu cela dit ce site qui possède soit disant l'application à jour : https://github.com/chrippa/ds4drv
Aucune idée comme je suis supposé utilisé ça non plus...
L'utilisation des plugins/application, etc, sous Linux me semble plus complexe que Windows, et je suis tout frais dans mon changement, je ne connais encore rien du tout sur Linux.

Dernière modification par Tyuio32 (Le 01/05/2017, à 21:21)

Hors ligne

#2 Le 04/06/2017, à 02:08

Vaderf

Re : DS4 CUH-ZCT2U non fonctionnel

Salut Tyuio32,

Nous voilà dans le même bateau : j'ai fait l'acquisition d'une DS4 (modèle identique) et, tout comme toi, la manette ne fonctionnait tout simplement pas à la première utilisation. Il y avait bien un appariement en bluetooth mais la manette se déconnectait juste après sa connexion. Cependant j'ai une bonne nouvelle : j'ai réussi à la faire fonctionner correctement après quelques heures de recherche et pas mal de tâtonnements. J'espère que ça te sera aussi utile (même si je viens un peu après la bataille).

Avant de donner la marche à suivre, deux petites réactions à ta dernière phrase:

Tyuio32 a écrit :

je suis tout frais dans mon changement, je ne connais encore rien du tout sur Linux.

Bienvenu dans un monde libre !! J'essayerai d'être le plus didactique possible. Il y aura pas mal de lignes de commande mais rien de bien méchant.

Tyuio32 a écrit :

L'utilisation des plugins/application, etc, sous Linux me semble plus complexe que Windows

C'est malheureusement vrai pour les plugins (ou plutôt pilotes) mais pas vraiment pour les applications (voir ici). Pour les pilotes, les entreprises font généralement l'impasse sur le développement de versions Linux surtout s'il s'agit de matériel pour particuliers qui sera connecté le plus souvent à un OS Windows. On doit donc attendre que la communauté s'en occupe ce qui peut aller vite comme prendre du temps (tout dépend si le matériel est répandu ou pas).
Pour ce qui est des applications, il est vrai que les toutes dernières versions ne sont généralement pas disponibles dans les dépôts. Ceci est tout simplement le coût de la stabilité du système d'exploitation. Durant le développement d'une version de GNU/Linux, les versions qui seront disponibles sont fixées puis le système d'exploitation est exhaustivement testé avec ces versions et optimisé pour s'assurer de sa stabilité. Par contre il est possible d'obtenir les dernières versions au besoin par l'ajout de ppa. Mais ceci est un autre sujet.

Passons maintenant à ce qui  nous intéresse, la connexion de notre manette favorite.


Ma configuration

Voici la configuration de mon système. Si tu as la même, ça devrait sans doute se passer sans problème. Si elle est différente, des ajustements pourraient être nécessaires. À chaque fois, la commande utilisé pour obtenir les infos est indiquée sur la première ligne. Tu pourras l'exécuter dans un terminal (en omettant le "$").

Mon OS:

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.2 LTS
Release:	16.04
Codename:	xenial

Mon noyau:

$ uname -a
Linux media-center 4.4.0-78-generic #99-Ubuntu SMP Thu Apr 27 15:29:09 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

La version de mon pilote bluetooth:

$ bluetoothctl -v
5.37

La solution au problème

Le problème de connexion semble se décomposer en deux problèmes distincts : un problème d'appariement bluetooth et un problème de pilote (le fameux ds4drv). Le problème d'appariement se manifeste comme décrit au début : l'appariement se fait puis la connexion se coupe. Le problème semble venir du fait que la connexion n'est pas considérée comme sûre (ou quelque chose du genre). J'ai trouvé une solution (en) sur github qui consiste a rendre la connexion sûre (trustable). Voici la marche à suivre.

Il faut d'abord s'assurer que le bluetooth est en service avec la commande suivante (le statut doit "active (running)" dans le retour de commande) :

$ sudo service bluetooth status

Ensuite, il faut ouvrir une console bluetooth avec la commande:

$ bluetoothctl

Puis exécuter les commandes suivantes (sans le "#"):

# scan on
# remove xx:xx:xx:xx:xx:xx
# trust xx:xx:xx:xx:xx:xx
# pair xx:xx:xx:xx:xx:xx
# scan off
# connect xx:xx:xx:xx:xx:xx

Après "scan on", il faut mettre la manette en mode appariement (PS+Share pendant quelques secondes, ce qui entraîne de brefs flashs de lumière). Au bout d'un certain temps (une dizaine de secondes), la manette devrait être visible sur la console bluetooth avec son adresse MAC (xx:xx:xx:xx:xx:xx fait de chiffres et lettres). C'est cette adresse MAC qu'il faudra ensuite utiliser tout du long.

Ces étapes m'ont permis d'avoir ma manette connectée de façon permanente.

La seconde partie du problème semble provenir du noyau (kernel) d'Ubuntu. D'après cette autre discussion (en) sur github, la manette possède un nouveau firmware qui change l'identifiant (hid) de la manette. Elle n'est donc pas correctement reconnue par les noyaux de version inférieure à 4.5 et ne fonctionne pas (malgré l'appariement). Comme tu peux le voir, la version de mon noyau est 4.4 ce qui fait qu'il n'est probablement pas apte à reconnaître la manette. Il se peut que le code correspondant à cette partie spécifique du noyau 4.5 ait été intégré (backport) à des versions de noyau plus anciennes (c'est une chose courante sous Linux pour améliorer les compatibilités matériels) mais je n'ai pas vérifié. La solution proposée dans la discussion est de patcher le noyau, ce qui est assez compliqué et nécessite d'être fait après toute mise à jour du noyau. J'ai donc cherché du côté du pilote ds4drv.

Tyuio32 a écrit :

je sais qu'il existe ds4drv sur Linux qui permet le fonctionnement d'une DualShock 4. Cela dit, il semble que l'application est assez ancienne comme elle ne prend en charge que la première génération de la DS4

C'est vrai et faux à la fois. La dernière version stable du pilote (0.5.1) est plutôt ancienne (avril 2016) et ne prend pas en compte les dernières générations de manette. Mais en regardant les commits, on peut voir que celui du 25 décembre 2016 correspond à une amélioration concernant les manettes de seconde génération (comme la nôtre). Par conséquent, je me suis dit qu'il serait bon d'installer la version en cours de développement du pilote. Pour ça, j'ai suivi les instructions (en) de la page github du projet. Voici la marche à suivre.

Il faut d'abord installer git, pour pouvoir cloner le dépôt, ainsi que les dépendances nécessaires au fonctionnement du pilote :

$ sudo apt-get install git python python-setuptools 

Ensuite, il faut exécuter les commandes suivantes:

 $ cd /tmp/
$ git clone https://github.com/chrippa/ds4drv.git
$ cd ds4drv
$ sudo python setup.py install

J'ai aussi ajouté les règles pour la création de la manette. Pour ça :

$ cd /etc/udev/rules.d/
$ sudo wget 'https://raw.githubusercontent.com/chrippa/ds4drv/master/udev/50-ds4drv.rules'
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger

Ensuite, j'ai fait un test en lançant le pilote manuellement :

$ sudo ds4drv --hidraw --emulate-xpad-wireless

Après cette procédure, la manette est reconnue (dans mon cas par RetroArch) et m'a permis de jouer à quelques jeux sans soucis après avoir paramétré les touches.

La seule petite contrainte qu'il me reste est de connecter ma manette avant de lancer RetroArch sinon elle n'est pas reconnue dans RetroArch. Mais ce problème n'est pas directement lié à la manette.


Démarrer ds4drv comme démon (bonus)

Pour ne pas démarrer le pilote manuellement à chaque redémarrage de l'OS, il est possible d'écrire un petit script utilisé par init qui s'occupera de lancer le pilote en tant que démon au démarrage du système.

Pour cela, un script est disponible sur github mais nécessite quelques modifications pour fonctionner correctement. Voici la marche à suivre :

$ cd /etc/init.d/
$ sudo wget 'https://gist.githubusercontent.com/mariosotil/ed4293660c600fbe24b0/raw/0ef8d5f75c06e266e8b34fefca98951ef6b115b5/ds4drv'
$ sudo chmod 755 ds4drv
$ sudo sed -i "s,PATH=.*,PATH=/sbin:/usr/sbin:/bin:/usr/bin:$(dirname $(which ds4drv))," ds4drv
$ sudo sed -i "s,DAEMON=.*,DAEMON=$(dirname $(which ds4drv))/\$NAME," ds4drv
$ sudo sed -i 's,DAEMON_ARGS=.*,DAEMON_ARGS="--hidraw --emulate-xpad-wireless --daemon --daemon-log /var/log/ds4drv.log --daemon-pid $PIDFILE --battery-flash",' ds4drv
$ sudo update-rc.d ds4drv defaults 97 03

Petits détails sur les commandes: wget télécharge le fichier ds4drv, chmod change les attributs du fichier (lecture/écriture/exécution), sed modifie les lignes du fichier qui ont besoin de l'être, update-rc.d ajoute le script au démarrage avec un priorité basse.

Lorsque ceci est fait, un premier test peut être conduit en tuant le pilote en cours et en démarrant le démon :

$ sudo pkill -9 ds4drv
$ sudo service ds4drv start
$ sudo service ds4drv status

Le statut devrait être "active (running)" (et non "(exited)" ou "(dead)"). La connexion de la manette devrait se faire sans problème. Le dernier test consiste à redémarrer le PC et à contrôler le statut à nouveau (ainsi qu'à connecter la manette).

Le pilote (en mode démon ou non) accepte un fichier de configuration pour personnaliser certains aspects de la manette (couleur de la LED, paramétrage des boutons, etc.). Je n'en ai personnellement pas besoin. Il y a un exemple ici. Si jamais un fichier de configuration est nécessaire (et localisé dans le dossier /etc/), il faudra modifier la ligne "DAEMON_ARGS" de /etc/init.d/ds4drv en ajoutant l'option :

--config /etc/ds4drv.conf

Voilà pour l'ensemble de la démarche. J'espère que ça a pu résoudre le problème. Il est fort probable que dans les futures versions d'Ubuntu, ce problème n'en soit plus un (et que l'installation de ds4drv ne soit plus nécessaire).

Si jamais tu as des questions, n'hésite pas.

A+


Asus UL80Vt
Ubuntu 11.10

Hors ligne