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.

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 :)

Je suis en train de finaliser l’installation d’une petite série de clés USB que je compte mettre en vente sur la Boutique ce mardi à 18h.

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 !

Tous les articles de la série Expériences NFC / RFID

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

12 commentaires

  1. Bonjour,
    je me retrouve malgré tout avec l’erreur « Unable to claim USB interface (device or resource busy) »
    Je suis sous Kali 2019.3 avec un lecteur ACR122U-A9 RR171-43****.

  2. Bonjour Lip,

    L’erreur « Unable to claim USB interface (device or resource busy) » vient du fait que le lecteur ACR122U est utilisé par un autre programme, ce qui barre l’accès à Libnfc.
    C’est notamment le cas sous Kali Linux des modules pn533* qui se lancent automatiquement au démarrage.

    Pour les désactiver, et se débarrasser de l’erreur, il suffit de taper dans un terminal les commandes suivantes :
    modprobe -r pn533_usb
    modprobe -r pn533

    Cela devrait éliminer cette erreur !

    Alexandre

  3. bonjour je voudrais savoir comment peux ton effacer des Badge RFID programmable MCT Android – UID modifiable avec mct

  4. HEllo,

    aurais-tu la possibilité d’expliquer pour MacOS ?
    J’ai essayé de suivre la démarche mais ça ne fonctionne pas malheureusement…

    Merci bien

  5. Hello Dzkman,
    Pouvez-vous nous donner l’erreur que vous rencontrez ? Il n’y a pas de raison que cela ne fonctionne pas chez vous :)
    Bien à vous,
    Alexandre

  6. Hello Eoras,
    Sur Mac il est possible d’utiliser Kali auquel cas rien ne change dans le tuto. Si tu veux réaliser la même manipulation sous MacOS, difficile pour moi de t’aider car je n’en ai pas à disposition…
    Bien à toi,
    Alexandre

  7. nfc-mfclassic ne fonctionne pas pour cloner un fichier dont la ‘Key B’ a été decodée via une clé B identifiée ‘mfoc -O carte_origine.mfd -k 415a54454b4d’
    j’ai essayé plusieurs options
    nfc-mfclassic W a u
    nfc-mfclassic W b u
    nfc-mfclassic W A B
    je n’arrive pas à faire copier les block qui sont codés avec la key B..; quand le clonage des 64 block est terminé, il n’y a que les valeurs codées avecf la Key A….
    Comment faire pour indiquer l’utilisation de la KEY B [415a54454b4d] ?
    Merci

  8. bonjour, j’ai suivi à la lettre les commandes et j’ai une erreur au niveau
    ./configure –prefix=/usr –sysconfdir=/etc
    en retour j’ai cette erreur apparemment il n’y a pas de répertoire ou fichier???
    bash: ./configure–prefix=/usr–sysconfdir=/etc: No such file or directory
    merci pour votre aide

  9. Bonjour
    Merci pour ce tuto qui m’a bien débloqué
    Juste au cas ou d’autre sont comme moi en 32 bit, pour la dernière ligne du tuto, il ne faut pas indiquer :
    – cp -p libnfc.* x86_64-linux-gnu/
    mais
    – cp -p libnfc.* i386-linux-gnu/

  10. bonjour j’ai suivi la procédure et à la derniere étape « cp -p libnfc.* x86-64linux-gnu/ »
    j’ai le message : cannot stat ‘libnfc.*’ : No such file or directory ..
    Une solution ?

    j’utilise Kali sur clé live

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *