Zugriff auf javax.smartcardio unter Linux 64-Bit

Ich versuche, die Smartcard-Terminals mithilfe der javax.smartcardio-API mit dem folgenden Code zu laden:

public CardTerminal getReadyCardTerminal() throws CardException {

    TerminalFactory factory = TerminalFactory.getDefault();
    CardTerminals terminals = factory.terminals();
    List<CardTerminal> list = terminals.list(State.CARD_PRESENT);

    while (list.isEmpty()) {
        terminals.waitForChange(1000);
        list = terminals.list(State.CARD_PRESENT);
    }
    CardTerminal cardTerminal = list.get(0);
    return cardTerminal;
}

... und ich bekomme immer die folgende Ausnahme:

java.lang.IllegalStateException: no terminals
at javax.smartcardio.TerminalFactory$NoneCardTerminals.waitForChange(TerminalFactory.java:145)

Unter Windows Vista / 7 funktioniert alles einwandfrei, aber unter Linux funktioniert es nicht. Ich benutze Ubuntu 12.04 64 Bit.

Ich habe den pcscd-Dienst mit dem folgenden Befehl installiert:

sudo apt-get install libccid pcscd libpcsclite-dev libpcsclite1
sudo service pcscd start

Und der Befehl pcsc_scan gibt Folgendes aus:

PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau <[email protected]>
Compiled with PC/SC lite version: 1.7.4
Using reader plug'n play mechanism
Scanning present readers...
0: OMNIKEY CardMan 3x21 00 00

Tue Sep 11 15:44:49 2012
Reader 0: OMNIKEY CardMan 3x21 00 00
  Card state: Card inserted, 
  ATR: <some hexa codes>
  ...

Es sieht also alles in Ordnung aus, aber das Smartcardio funktioniert einfach nicht. Ich versuche es mit Oracle und OpenJDK 1.7.0_05, 32 und 64 Bit.

Der Code läuft mit OpenJDK (aber nicht mit Oracle JDK, weiß nicht warum) in einer Ubuntu 32-Bit-Umgebung. Ich denke, es ist ein Problem mit der 64-Bit-Brücke von Java zur PC / SC-Bibliothek.

Irgendwelche Ideen?

Vielen Dank.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage