Faire reconnaître un lecteur de cartes comme un modèle Apple

Aujourd’hui, une petit bidouille « cosmétique ». Quand on fait « A propos de ce Mac », dans les informations systèmes, on voit une ligne « Lecteur de cartes ». Sauf que le seul lecteur de cartes qui va apparaître là, c’est celui intégré à votre ordinateur, s’il en a un. Sur mon MacBook Pro, il n’y en a pas mais j’ai un lecteur de cartes en format ExpressCard (un Sony) qui ne dépasse pas et fait très bien son boulot.

L’idée est donc de s’arranger pour que le lecteur de cartes soit reconnu comme un modèle Apple.

(comme j’ai une capture, c’est que ça a fonctionné)

C’est assez simple à faire, mais je conseille de sauvegarder les fichiers avant, on va modifier les pilotes et ce serait bête de faire une bêtise.

Etape 1 : Avoir un lecteur de cartes reconnu par le système, en USB. Il va falloir récupérer deux informations : l’identificateur constructeur et l’identification produit.

Il faut aller dans le Rapport Système, dans la section USB. Ce sont deux valeurs en hexadécimal, indiquée sous le nom « indentifiant du fournisseur » et « identifiant du produit ».

Pour mon lecteur, on a donc 0x054c pour le fournisseur (Sony) et 0x0281 pour le produit. Valeur qu’on va devoir convertir en décimal. Comme je pense que vous n’êtes pas tous familiers avec les conversions de l’hexadécimal au décimal, on va passer par la calculatrice de Mac OS X. Il faut passer en mode « Programmeur » dans les menus, cliquer sur la petite icône « 16 », entrer la valeur et ensuite cliquer sur le petit « 10 ». 0x0281 devient 641 et 0x054c devient 1356.

Etape 2 : on va modifier les fichiers. Il faut se rendre dans « /Système/Bibliothèque/Extensions » et copier le fichier AppleStorageDrivers.kext dans un endroit sûr (genre faire une copie de sauvegarde).

Ensuite, clic droit sur le fichier, « Afficher le contenu du paquet ».
Dans « Contents/Plugins », on devrait trouver AppleUSBCardReader.kext.
Clic droit sur le fichier, « Afficher le contenu du paquet ».
Dans « Contents », on devrait trouver Info.plist.

Maintenant, on va modifier le fichier. J’utilise HexFiend, mais n’importe quel éditeur qui ne va pas modifier le format (même xCode suffit) est utilisable. Il va peut-être falloir s’identifier.

Dans le fichier, il faut chercher <key>idProduct</key>
Juste en dessous, il faut remplacer la valeur par le numéro de produit de votre lecteur, <integer>641</integer> dans mon cas.
Ligne suivante, sous <key>idVendor</key>, on met la valeur identifiant le constructeur. <integer>1356</integer> dans le cas présent.

Une fois que c’est fait, on sauve le fichier et on remplace l’ancien fichier AppleUSBCardReader.kext par le modifié.

Pour qu’OS X reconnaisse bien les modifications, il faut que les autorisations soient correctes et il faut aussi reconstruire les caches. Le plus simple est de passer par un logiciel dédié, même s’il est parfaitement possible de le faire manuellement. Moi, j’utiliser Kext Utility mais il en existe d’autres. Le fonctionnement est simple : on lance le logiciel et il s’occupe de tout.

Une fois qu’on a terminé, il suffit de redémarrer et ça devrait fonctionner.

Attention à un petit bug cosmétique : comme Apple n’utilise que des lecteurs de cartes SD, l’icône par défaut sera une carte SD, même si votre lecteur accepte d’autres formats. Dans mon cas, le lecteur lit aussi les cartes Memory Stick mais elle s’affiche avec une icône de carte SD. Je n’ai pas trouvé comment changer l’icône en fonction de la carte, mais il est possible de forcer une icône en particulier.

Toujours dans le fichier Info.plist, il faut modifier la valeur sous <key>IOBundleResourceFile</key> (qui contient <string>SD.icns</string>) par une des valeurs suivantes, en fonction du type de cartes.

La liste : CompactFlash.icns, MemoryStick.icns, MemoryStickProDuo.icns, MiniSD.icns, SmartMedia.icns, TransFlash.icns, XD.icns.

Voilà, j’espère que cette bidouille (qui ne sert à rien) va servir à quelqu’un…