Édition de tag RFID MIFARE sous Linux avec le lecteur ACR122

Ayant récemment acquis un lecteur NFC ACR122, je m’attendais à trouver un logiciel me permettant de l’exploiter simplement sous Linux Mint.

Étonnamment, je n’en ai pas trouvé, et l’emploi du lecteur pour programmer des tags Mifare s’est avéré moins intuitif que je ne l’espérait.

Après quelques heures de galère, voilà un résumé de la procédure :

Installation

Installer libnfc et ses outils :

$ apt install libnfc-bin

Modifier le fichier /etc/modbprobe.d/blacklist-libnfc.conf pour inclure le driver pn533_usb. En effet, celui ci (ainsi que les autres déja inclus dans ce fichier ) interfèrent avec le bon fonctionnement du pilote utilisé par libnfc :

$ echo "blacklist pn533_usb" >> /etc/modprobe.d/blacklist-libnfc.conf

Redémarrer la machine ( cette fois ci le bon pilote sera chargé ).

Lister les tags visibles

Lister les tags visible s’effectue avec la commande nfc-list :

A vide (sans tag sur le lecteur )


$ nfc-list
nfc-list uses libnfc 1.7.1
NFC device: ACS / ACR122U PICC Interface opene

Avec un tag Mifare sur le lecteur ( UID = A4 0B 44 76 )

$ nfc-list 
nfc-list uses libnfc 1.7.1
NFC device: ACS / ACR122U PICC Interface opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 04
UID (NFCID1): a4 0b 44 76
SAK (SEL_RES): 08

L’option -v permet d’en savoir plus sur le tag détecté ( ici un tag différent de celui lu précédemment ) :

$ nfc-list -v
nfc-list uses libnfc 1.7.1
NFC device: ACS / ACR122U PICC Interface opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04  
* UID size: single
* bit frame anticollision supported
       UID (NFCID1): ec  11  9c  1e  
      SAK (SEL_RES): 08  
* Not compliant with ISO/IEC 14443-4
* Not compliant with ISO/IEC 18092

Fingerprinting based on MIFARE type Identification Procedure:
* MIFARE Classic 1K
* MIFARE Plus (4 Byte UID or 4 Byte RID) 2K, Security level 1
* SmartMX with MIFARE 1K emulation
Other possible matches based on ATQA & SAK values:

0 Felica (212 kbps) passive target(s) found.

0 Felica (424 kbps) passive target(s) found.

0 ISO14443B passive target(s) found.

0 ISO14443B' passive target(s) found.

0 ISO14443B-2 ST SRx passive target(s) found.

0 ISO14443B-2 ASK CTx passive target(s) found.

0 Jewel passive target(s) found.

Lecture / écriture

Les opérations de lecture / écriture sur un tag Mifare Classic s’effectuent avec la commande nfc-mfclassic. Les clés par défaut sont utilisées mais il est possible de spécifier sont propre fichier de clé ( cf man nfc-mfclassic)

Lecture du contenu du tag et enregistrement dans le fichier mifare.mfd

$ nfc-mfclassic r a mifare.mfd
NFC reader: ACS / ACR122U PICC Interface opened
Found MIFARE Classic card:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 04
UID (NFCID1): a4 0b 44 76
SAK (SEL_RES): 08
Guessing size: seems to be a 1024-byte card
Reading out 64 blocks |……………………………………………………….|
Done, 64 of 64 blocks read.
Writing data to file: mifare.mfd …Done.

Ecriture du tag depuis le fichier mifare.mfd

$ nfc-mfclassic w a mifare.mfd
NFC reader: ACS / ACR122U PICC Interface opened
Found MIFARE Classic card:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 04
UID (NFCID1): a4 0b 44 76
SAK (SEL_RES): 08
Guessing size: seems to be a 1024-byte card
Writing 64 blocks |………………………………………………………|
Done, 63 of 64 blocks written.

Edition du contenu

Pour l’édition, l’emploi d’un editeur hexadécimal est nécessaire. Je recommande bless. Pour faciliter la lecture du contenu, je préconise d’ajuster la taille de la fenêtre pour afficher 16 octets sur chaque ligne, ainsi chaque ligne contient 1 bloc du tag :


En rouge le bloc 0 contient l’UID de la carte

En jaune le bloc 4 contient les données que j’y ai écrit

Le premier bloc de chaque secteur contient les permissions d’accès. Par défaut l’accès en lecture / écriture est possible avec les clés d’origines. Le bloc 0 est en lecture seule. Attention de ne pas modifier la longueur du fichier ( utiliser le mode remplacement plutôt que le mode insertion avec la touche « insert » du clavier )

Les 16 caractères d’un bloc me suffisant pour mon application, et n’ayant pas de problématique de sécurité, cet article touche à ça fin. Peut être le compléterais-je plus tard si je venais à devoir stocker des données sur plusieurs blocs, ou à mettre en place différentes clés pour l’accès aux données. Ce second cas est cependant improbable, étant donné que les carte Mifare sont gravement défaillante d’un point de vue sécurité (cf les nombreux article sur le web concernant la récupération des clés, ainsi que la possibilité d’obtenir des cartes dont le bloc 0 est accessible en écriture )

Raspberry Pi : Du son en réseau avec Jack

Il y a déjà 5 mois, j’expérimentais la transmission de son en réseau avec PulseAudio.

Bien que concluant, le système péchait par sa latence (certes faible, mais toujours perceptible), et son manque de stabilité.

Je me suis depuis penché sur Jack. Il s’agit d’un serveur son pour Linux, axé productivité musicale.

Il est possible de le configurer pour transmettre du son sur le réseau, mais le manque de documentation rend la tâche ardue.

J’ai pu obtenir un système assez stable après de nombreux essais, permettant d’utiliser un Raspberry Pi comme sortie son distante, avec une latence quasiment imperceptible.

Le projet repose sur l’utilisation de NetJack2, la 2ème révision du protocol réseau de Jack, ainsi que l’utilisation de Jack_Autoconnect, et a pour objectif de rendre le fonctionnement aussi fiable que possible.

J’ai rendu l’ensemble disponible sur GitLab : https://gitlab.com/Pilatomic/networkedjack

Le résultat est très satisfaisant, mis a part un unique problème restant : le client ne doit pas être stoppé pendant que le serveur est en fonctionnement, sous peine de devoir redémarrer le serveur. Il est sans doute possible de le régler avec un petit script bash, qui ping continuellement le client, et arrête le serveur lorsque le client n’est pas joignable, mais cette situation n’étant pas pénalisante dans mon cas, je ne me suis pas penché sur le sujet.

L’ensemble est suffisamment fiable, je l’utilise pour de la transmission de son en temps réel en entreprise

Raspberry Pi : Du son en réseau avec PulseAudio

Cet article décrit comment utiliser le Raspberry Pi comme sortie son ( sink ) distante ( en réseau ), pour un ordinateur sous Linux.

Il exploite les capacités réseau de PulseAudio, tant coté Raspberry que sur l’ordinateur source.

2 méthodes de connexions sont proposées :

  • La découverte automatique du Raspberry par Pulseaudio, simple et pratique, mais pas toujours très fiable
  • La configuration manuelle du Raspberry comme sortie son « tunnel » sur l’ordinateur source

Lire la suite

Raspberry Pi : Commandes utiles pour réaliser un affichage dynamique en mode portrait

Cet article est un mémo contenant lqes commandes utiles pour la réalisation d’un affichage dynamique vertical avec un Raspberry Pi

Désactiver la mise en veille de l’écran

sudo nano /boot/cmdline.txt

ajouter sur la même ligne :

consoleblank=0

source : https://www.raspberrypi.org/documentation/configuration/screensaver.md

Affichage en mode portrait

sudo nano /boot/config.txt

ajouter sur une nouvelle ligne :

display_rotate=1

Fichiers temporaire en RAM (pour économiser des cycles d’écriture sur la carte SD)

sudo nano /etc/fstab

ajouter les lignes suivantes :

tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/log tmpfs defaults,noatime,size=64m 0 0

Système de fichier en lecture seul

sudo nano /etc/fstab

ajouter « ro » dans les attributs du système de fichier racine

Repasser le système de fichier en lecture / écriture à chaud

sudo mount -no remount,rw /

Point d’accès Wifi pour administration

https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/

Grbl Overseer : Une interface de contrôle touch-friendly pour CNC

Mon hackerspace local disposant depuis peu d’une fraiseuse à commande numérique pour la gravure de PCB, j’ai beaucoup joué avec.

La machine (low cost, mais robuste) est dotée d’un firmware libre dédié au contrôle de CNC par un hardware basé sur Arduino : Grbl

Plusieurs interfaces utilisateurs (pour PC) existent déjà pour Grbl. Cependant, aucune d’entre elles ne semble permettre la gestion automatisée de plusieurs tâches, ni n’offre d’interface optimisée pour un écran tactile. Ce sont là 2 des objectifs de ce projet.

Capture d’écran avec le panneau « Jobs » déployé

Ses principaux atouts sont :

  • Une interface utilisateur simple, optimisée pour un usage clavier / souris mais aussi sur écran tactile
  • Une prise en main facile
  • Une vue 3D des différentes tâches, ainsi que de la position actuel de l’outil
  • La planification de plusieurs tâches, avec des points d’origine différents
  • La vérification automatique de la validité du gcode, afin d’éviter de rencontrer des erreurs pendant la phase de production
  • Le support de Grbl à partir de sa version 1.1 (celle ci fige enfin l’interface de commande)
  • Commandes de déplacement manuelles exploitant d’interface de « jog » de Grbl 1.1
  • Une console série « futée », afin d’avoir un aperçu clair et détaillé des communications avec la machines
  • Une barre d’état « futée », affichant toujours l’état et la position de la machine, et permettant une lecture rapide même à distance de l’écran
  • Un éditeur de configuration pour les différents paramètres de Grbl
  • Multiplateforme : Windows, Linux, MacOs + Android (en cours de développement)

Le point le plus intéressant, et qui fut même le point d’origine de ce projet, réside dans sa compatibilité avec les plateforme Android.

En effet, les tablettes Android représentent, par leur faible consommation, leur faible encombrement, et leur utilisation intuitive, une plateforme idéale pour une interface utilisateur.

Le support Android, à l’état de preuve de concept, est toujours en développement. Si l’application démarre sur la grande majorité des périphérique, une version  d’Android >= 3.1 et compilée avec le support USB Host est nécessaire pour s’interfacer avec la fraiseuse à travers un convertisseur USB / UART.

Le code source de Grbl Overseer et les instructions de compilation pour Linux sont disponibles sur Gitlab : >> ICI <<

Une archive contenant l’exécutable pour MS Windows est disponible >> LA <<

De nombreux bug subsistent encore, notamment dans la gestion particulière de l’USB et du rendu Open GL ES propre à Android.

Sur PC en revanche, le logiciel devrait se montrer stable, n’hésitez pas à l’essayer, et à me faire remonter vos remarques !

Asus GTX780 ROG Poseidon : Réparation du système de refroidissement

Commercialisée par ASUS début 2014, la GTX780 ROG Poseidon est une carte graphique haut de gamme, dotée de 3 Go de VRAM, et d’un système de refroidissement hybride : celui-ci est en effet composé d’un large dissipateur, épaulé par 3 caloducs, et refroidit par 2 ventilateurs, mais intègre également un (court) circuit eau, permettant un refroidissement par watercooling.

Ce système de refroidissement est également muni d’un logo « Republic Of Gamer » rouge clignotant, jouant sans aucun doute un rôle extrêmement important dans le fonctionnement de la carte, tel que changer un PC en discothèque, ou pire encore …

l’ASUS GTX780 ROG POSEIDON (ventilateurs débranché)

Et c’est justement ce système de refroidissement qui m’a donnée du fil à retordre, puisqu’un beau jour, les ventilateurs ont tout bonnement cessé de fonctionner. Si cela ne pose aucun problème visible en utilisation bureautique de la carte (la fréquence ainsi que la tension d’alimentation du GPU étant fortement réduites dans ce type d’utilisation, la faible dissipation thermique qui en résulte permet de maintenir le GPU dans une plage de température acceptable, même sans aucun ventilateur en fonction), lors d’une utilisation pour du rendu 3D (principalement en jeu), c’est une toute autre histoire, la température du GPU augmentant rapidement de manière alarmante, jusqu’à son arrêt pur et simple, provoquant une perte de l’affichage jusqu’au redémarrage de la machine.

J’ai donc entrepris d’en réparer le système de refroidissement …

Lire la suite

Réparation d’une mini-chaine Dynabass DBT150

Cet article décrit la réparation d’une minichaine Dynabass DBT150, qui refusait obstinément de s’allumer.

La DBT150 est une minichaine sur pied, avec fonctions radio / CD / USB / AUX / Bluetooth… et celle-ci refuse de fonctionner !

On y découvre que le transformateur d’alimentation est endommagé au delà de toute possible réparation, et comment contourner le problème en remplaçant toute l’alimentation par des éléments courants.

Lire la suite

Un minitel comme terminal linux USB. Partie 3 : Et avec systemd ?

Il y a 2 ans déjà, je publiais 2 articles décrivant comme réutiliser un Minitel comme terminal linux USB :

Cependant, si le premier article est toujours aussi pertinent, avec la migration des distributions Linux vers systemd, le nouveau gestionnaire de démarrage, le second article ne permet plus de configurer les Linux moderne pour utiliser le Minitel comme terminal.

raspi-config Minitel

l’outil de configuration raspi-config sur Minitel

Cet article vise donc à décrire la procédure nécessaire pour réaliser cette opération avec systemd sur Raspberry Pi sous la distribution Raspbian, mais cette procédure devrait s’appliquer, éventuellement avec des modifications mineures, à tout autre matériel exécutant une distribution Linux dotée de systemd.

Lire la suite

Renault Clio 3 : Réparation du Klaxon

Cet article décrit la réparation de l’avertisseur sonore sur une Renault Clio 3. Le symptôme est des plus simple, pas de klaxon !

Testés séparément, le klaxon et le contacteur dans le volant fonctionnaient correctement.

En fait, il s’agissait d’un défaut de contact sur un connecteur à ressort, entre le contacteur tournant du volant, et le commodo droit, visible dans la photo suivante

Le contact incriminé

Les contacts incriminés cerclés en rouge. ils assurent la liaison entre le commodo droit et le contacteur tournant

Y accéder nécessite de déposer les caches de la colonne de direction, ainsi que le volant. La procédure est la suivante :

Lire la suite

Citroën ZX : Réparation de la fermeture centralisée

En tant que membre du garage associatif Cric & Co, j’ai été confronté samedi dernier à un défaut sur la fermeture centralisée des portes sur une Citroën ZX, sur laquelle plus aucune porte ne répondait. Cette article décrit l’accès au module de centralisation, et sa réparation.

Tout d’abord un bref aperçu du fonctionnement de la centralisation : chaque porte contient un verrou commandable électriquement. Les verrous des portes maitre (porte conducteur, et peut être aussi la porte passager mais je ne suis pas sur) contiennent également 2 contacts indiquant leur position (déverrouillé ou verrouillé). Lors du changement de position d’un des verrous maitre, l’information est remontée au module de centralisation, qui commande le même changement de position sur tous les autres verrous. Tous les verrous du véhicule semblent connectés en parallèle.

Lire la suite