Så installerar du libnfc på Ubuntu 18.04

NFC-läsaren ACR122U är en populär läsare som kan användas med programbiblioteket libnfc.

Programbiblioteket libnfc behövs för att kunna skriva till och läsa från bland annat ett Mifare-kort av typen som kallas för generation 1 (men kan göra mycket mer än så också). libnfc finns för alla vanligt förekommande operativsystem. Detta programbibliotek är möjligen det mest populära när man vill koppla en NFC-läsare till sin dator och använda den på olika sätt. Däremot var det länge sedan libnfc uppdaterades och de beskrivningar som finns av hur man installerar programbiblioteket börjar bli utdaterade. Det är inte helt självklart hur man faktiskt installerar den, och speciellt inte om man vill att den ska lira snällt med andra mjukvaror. I den här guiden kommer vi beskriva hur man installerar libnfc på Ubuntu 18.04 LTS på bästa möjliga sätt.

Vad du behöver

1. En dator med en Linux-distribution installerat (eller Windows med en virtuell maskin). I den här guiden använder vi Ubuntu 18.04.2 LTS.
2. En NFC-läsare, och vi rekommenderar ACR122U.

Ladda ned och installera libnfc

Man kan installera libnfc på flera olika sätt. Vi rekommenderar att man laddar ned den senaste utvecklingsversionen från GitHub och kompilerar koden själv. Vi följde instruktionerna för installation av libnfc som finns på denna sida, men det funkar inte att följa instruktionerna rakt av, så vi gjorde med några variationer som är beskrivet här nedan.

1. Ladda ned källkoden från GitHub.

2. Extrahera mappen från zipfilen.

3. Öppna terminalen och byt mapp till libnfc-mappen som du precis laddade ned och extraherade.

4. Se till att installera dh-autoreconf med

sudo apt-get install dh-autoreconf

5. Kör sedan autoreconf i den mappen där alla filer för libnfc finns med

autoreconf -v -i -s

Uppdatering 2020-07-11. Med nya versionen av autoreconf ska du använda:

autoreconf -fis

6. Nu ska du köra ./configure. Men det finns vissa saker att tänka på innan du gör det. För det första kommer configure kontrollera att du har diverse andra programbibliotek installerade innan den skapar makefilen. Vi saknade doxygen och libusb header-filen. För att installera doxygen använd: sudo apt-get install doxygen. Och för att installera libusb header-filen använd: sudo apt-get install libusb-dev.

Det andra man behöver tänka på är var man vill installera nfclib. Vi rekommenderar att man installerar enligt kommandot nedan då den binära filen bör hamna i en mapp som vanligtvis finns med i PATH-variabeln (då kan operativsystemet hitta det). Och konfigurationsfilerna hamnar i etc-mappen (vilket är standard). Om du är nöjd med detta kan du köra följande kommando

./configure --enable-doc --prefix=/usr --sysconfdir=/etc

Förhoppningsvis får du inga felmeddelanden. Om det kommer ett felmeddelande om att det saknas ett programbibliotek så kan du prova om du kan installera det med sudo apt-get install.

7. Kör kommandot make. Koden kommer nu att kompileras.

Testa om libnfc kan hitta läsaren och läsa ett kort
Innan vi forsätter installationen ska vi testa så att libnfc kan hitta läsaren och även läsa av ett kort. I mappen utils finns det verktyg för att testa dessa saker.

1. Sätt in din läsare i USB-porten och skriv i terminalen:

utils/nfc-scan-device -v

Uppdatering 2020-07-11. Man måste troligen använda sudo:

sudo utils/nfc-scan-device -v

Du kommer troligen få ett felmeddelande i stil med:

Unable to claim USB interface (Device or resource busy)

Felmeddelandet innebär att en modul håller USB-gränssnittet upptaget. Följ instruktionerna nedan för att lösa problemet.

2. För att se vilken modul som hållet gränssnittet upptaget skriv

lsmod | grep nfc

Du får en output i likhet med:

nfc 118784 1 pn533

För att ta bort denna modul (tillfälligt) skriv:

sudo rmmod pn533_usb pn533

3. Testa igen att skriva:

utils/nfc-scan-device -v

Uppdatering 2020-07-11. Använd sudo:

sudo utils/nfc-scan-device -v

Denna gång bör du få ett meddelande i stil med:

1 NFC device(s) found:
- ACS / ACR122U PICC Interface:
acr122_usb:002:004

4. Lägg nu ett Mifare-kort på läsaren. Vi ska testa om nfclib kan använda läsaren för att läsa av kortet. Skriv i terminalen:

utils/nfc-list

Uppdatering 2020-07-11. Använd sudo:

sudo utils/nfc-list

Du får grundläggande information om chippet i stil med:

NFC device: ACS / ACR122U PICC Interface opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 02
UID (NFCID1): 8e 37 b1 51
SAK (SEL_RES): 18

Du kanske även får felmeddelandet Command Code verification failed. Vi kunde inte någon lösning på detta felmeddelande och fortsatte installationen utan att ha löst problemet. Det verkar lösa sig efter att man genomfört det sista steget. Uppdatering 2020-07-11: Detta problem försvinner inte efter att sista steget genomförts. Man får den dock endast för kommando nfc-list. De andra kommandona ger inga felmeddelanden. Vi har i skrivande stund ingen enkel lösning på problemet.

Slutför installationen av libnfc

Nu kan du avsluta installationen av nfclib genom att skriva följande i terminalen:

sudo make install

Nu ska libnfc vara installerat. Du kan testa genom att lägga ett kort på läsaren och skriva

nfc-list

Uppdatering 2020-07-11. Du behöver troligen använda sudo:

sudo nfc-list

Den här gången behöver man inte skriva utils före efter som operativsystemet kommer leta efter verktyget i /usr mappen som du angav när du installerade programmet. Om du återigen får information om kortet så har installationen lyckats.

Det finns inget program/kommando som heter nfclib. libnfc består av en rad olika program/kommandon/verktyg och en lista på dessa finns här. Det finns bland annat verktyg att skriva och läsa från Mifare Classic- och Ultralight-kort. Vi kommer visa hur dessa verktyg fungerar i kommande inlägg.