ACR122U – Résoudre l’erreur « Unable to set alternate setting on USB interface »

Cet article fait partie de la série Expériences NFC / RFID (4 articles au total)

(ou comment je vous ai préparé la meilleure clé USB pour travailler sur les puces RFID)

Hello, aujourd’hui je poste un article qui n’intéressera pas tout le monde mais devrait bien aider les concernés. Si vous utilisez un lecteur NFC/RFID modèle ACR122U et que vous essayez de l’utiliser avec la suite LibNFC des NFC Tools, vous avez peut-être rencontré l’erreur suivante : Unable to set alternate setting on USB interface (Connection timed out).

J’ai au début pensé à un problème matériel, mais si vous essayez le lecteur avec d’autres applications, vous remarquerez qu’il fonctionne correctement. Le problème semble donc bien lié à libnfc. En tombant sur cette erreur il y a plusieurs mois, je me suis senti un peu seul et j’ai ouvert un ticket sur le forum de libnfc. Mais Internet étant un endroit rempli de personnes qui vous veulent du bien, voici une synthèse de ce que de brillants esprits ont trouvé, et un petit coup de pouce de ma part pour ceux qui se sentent un peu dépassés par tout ça :)

L’origine du problème

Seuls certains lecteurs RFID ACR122U-A9 semblent provoquer le problème. Cela serait dû à un petit composant électronique qui diffère d’un lot à l’autre. Est-ce que ce sont les plus récents ? Je ne pense pas car j’en ai reçu plusieurs dizaines directement  « sortis de l’usine » de la part du fabricant ACS et aucun n’a le souci. Les unités « à problème » venaient pour ma part d’un revendeur qui ne m’a pas été d’une grande aide quand j’ai été confronté à ce souci. Depuis cette nouvelle collaboration, je n’ai pas eu à déplorer un seul ACR122U affecté par l’erreur « Unable to set alternate setting on USB Interface » et je considérais ce souci comme appartenant au passé. Il y a eu un peu de mouvement sur le sujet ces dernières semaines, alors même si ça ne concerne pas les clients de la Boutique, je me suis dit que ce serait un juste « retour des choses » que d’apporter à mon tour une petite contribution à l’Internet ;)

La version courte

L’erreur Unable to set alternate setting on USB interface (Connection timed out) est provoquée par la librairie libnfc lorsqu’elle essaie d’invoquer une fonctionnalité matérielle du ACR122U qui n’est pas disponible sur toutes les unités. A quoi sert cette fonctionnalité ? Je l’ignore, mais ce que je sais c’est qu’elle n’est pas indispensable pour l’utilisation que j’en ai (l’analyse et la copie de puces RFID et NFC). Un développeur a proposé ces derniers jours une solution qui a l’air de tenir la route. Il est très probable que les responsables de libnfc adoptent ce correctif dans la librairie libnfc à l’avenir. Ce qui signifie qu’à moyen terme, libnfc ne provoquera plus l’erreur Unable to set alternate setting on USB interface (Connection timed out). Donc si tu n’es pas pressé, tu peux juste mettre en pause ton projet NFC/RFID et y revenir dans 6 mois / 1 an pour que cela fonctionne. Si par contre tu n’as pas envie d’attendre, tu devrais continuer la lecture de cet article.

Reconnaître les lecteurs NFC RFID ACR122U « à problème » ?

On commence par la base : tous les lecteurs n’ont pas le problème mais je n’ai pas su trouver de différence ni physique ni logicielle pour les distinguer à part exécuter la commande nfc-list et constater le problème …

En terme de numéro de série, je vois que les lecteurs « sains » sont immatriculés ACR122U-A9 RR171-4* et que ceux à problème sont identifiés ACR122U-A9 RR171-2*. Je ne sais pas si on peut réellement se baser dessus, si vous avez le soucis n’hésitez pas à nous donner vos numéros de série en commentaire !

Si votre lecteur est affecté par la faille que pouvez-vous faire (à part le remplacer évidemment) ? C’est tout le sujet de cet article

Les solutions si votre lecteur ACR122U souffre de l’erreur « Unable to set alternate setting on USB interface ».

Comme je vous le disais un peu plus haut, un développeur a proposé un patch pour le code source de libnfc pour ne plus rencontrer cette erreur. La bonne nouvelle, c’est que la solution est disponible pour tout le monde juste ici. La moins bonne nouvelle, c’est que pour en profiter il faut télécharger ce code source modifié, le recompiler et l’installer sur ton système pour pouvoir l’utiliser.

Alors je sais que ça fait beaucoup de mots clés barbares d’un coup, et que ça peut faire peur, mais vraiment, avec ce tuto et une bonne tasse de café, je suis sûr que tu peux le faire :) Afin de maximiser les chances de réussites de tout le monde, je suis parti d’une version récente de Kali sur laquelle il n’y a eu aucune modification préalable faite : la version 2019.3 “large”. Donc si tu pars de cette version et que tu suis le tuto ci-dessous, tout devrait bien se passer. Si tu ne t’en sors pas où que cela te paraît trop compliqué, j’ai une ultime solution pour toi au bas de l’article 🙂

Compiler libnfc avec le patch qui va bien pour se débarrasser de l’erreur Unable to set alternate setting on USB interface.

On part du principe que vous avez créé votre clé USB Kali comme expliqué dans ce tuto précédent.

Edit du 30/03/2020 : Si vous utilisez Kali dans une version 2020 ou supérieure, vous n’êtes plus identifiés automatiquement en super-utilisateur au démarrage de la clé. Avant de pouvoir suivre ce tutoriel, commencez par entrer la commande suivante

kali@kali:~$ sudo su

Etape 1 : Passer le clavier en français et désactiver les modules parasites

root@kali:~# setxkbmap fr
root@kali:~# nano /etc/modprobe.d/blacklist-libnfc.conf

Coller à l’intérieur les 3 lignes suivantes :

blacklist nfc
blacklist pn533
blacklist pn533_usb

Ctrl+O pour valider l’écriture, ctrl + X

Etape 2 : Se connecter à internet mettre à jour le système et installer les paquets nécessaires à la compilation

root@kali:~# apt-get update
root@kali:~# apt-get install git binutils make csh g++ sed gawk autoconf automake autotools-dev libglib2.0-dev libnfc-dev liblzma-dev libnfc-bin libtool 

Un message de confirmation vous demandera de valider l’installation de ces paquets additionnels. Acceptez en tapant Y puis entrée.

Etape 3 : Télécharger le code source de libnfc modifier et lancer la compilation

root@kali:~# git clone https://github.com/jpwidera/libnfc.git
root@kali:~# cd libnfc/
root@kali:~/libnfc# autoreconf -is
root@kali:~/libnfc# ./configure --prefix=/usr --sysconfdir=/etc
root@kali:~/libnfc# make 

Etape 4 : Installer les nouveaux binaires fraîchement compilés

root@kali:~/libnfc# make install
root@kali:~/libnfc# cd /usr/lib
root@kali:/usr/lib# cp -p libnfc.* x86_64-linux-gnu/ 

Voilà, à partir de ce moment, vous ne devriez plus rencontrer l’erreur Unable to set alternate setting on USB interface (Connection timed out) qui vous a amené ici ! Si vous utilisez une clé USB « Live », vous devrez recommencer la procédure à chaque fois, ce qui est plutôt fastidieux je vous l’accorde. Si par contre vous disposez d’une clé USB « avec persistance » (comme celles disponibles sur la Boutique), vous n’avez à faire cette manipulation qu’une fois en mode persistant et vous retrouverez votre version libnfc modifiée au prochain démarrage en mode persistant (et la version libnfc livrée d’origine avec Kali sera toujours disponible si vous démarrez en mode « Live »).

Je n’arrive pas à compiler libNFC, comment m’en sortir ?

J’aurais aussi pu intituler cette partie “comment avoir la meilleure suite d’outils NFC/RFID compatible avec tous les ACR122U du marché”.

Je te l’avais dis, j’ai une ultime solution pour toi ! J’ai profité du fait que les clés USB de la Boutique aient cette fameuse “persistance” pour les modifier et inclure :

  • une version modifiée de libnfc pour éviter l’erreur Unable to set alternate setting on USB interface (Connection timed out)
  • une version récente des NFC-Tools qui rend l’utilitaire nfc-mfclassic compatible avec les puces de génération 2 (celles habituellement réservées à la manipulation sur smartphone)
  • une version modifiée de mfoc pour inclure le mode “hardnested” pour venir à bout des badges les mieux protégés
  • un dictionnaire des clés les plus communes pour chiffrer les badges d’immeubles et autres badges/cartes communément répandu
  • et d’autres petites attentions :)

J’ai finalisé l’installation d’une petite série de clés USB qui est vente sur la boutique depuis quelques temps.

La clé Kali « custom » de l Atelier du Geek

Pour conclure cet article

Voilà, bien que je ne maîtrise pas encore 100% des détails liés à ce problème, j’espère que ce résumé t’aura éclairé et tiré du pétrin si tu rencontres cette fichue erreur Unable to set alternate setting on USB interface (Connection timed out). Pour ma part cela aura été l’occasion de peaufiner ma suite d’outils en matière de RFID/NFC pour gagner un temps de dingue ! Si j’ai du nouveau, je mettrai à jour cet article ! D’ici là n’hésitez pas à me dire en commentaire si cela a marché pour vous, et je vous dis à bientôt,  probablement pour vous parler d’un nouvel appareil avec lequel je m’amuse bien en ce moment !