Доступ к javax.smartcardio из Linux 64 бит

m пытается загрузить терминалы смарт-карт с помощью API javax.smartcardio с помощью следующего кода:

public CardTerminal getReadyCardTerminal() throws CardException {

    TerminalFactory factory = TerminalFactory.getDefault();
    CardTerminals terminals = factory.terminals();
    List 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;
}

... и я всегда получаю следующее исключение:

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

В Windows Vista / 7 все работает нормально, но я могузаставить его работать на Linux. Я'м с использованием Ubuntu 12.04 64 бит.

Я установил службу pcscd, используя следующую команду:

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

И команда pcsc_scan печатает это:

PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau 
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: 
  ...

Так что все выглядит хорошо, но Smartcardio просто нет работа. Я'Я пытаюсь с Oracle и OpenJDK 1.7.0_05, 32 и 64 бит.

Код работает нормально с OpenJDK (но не с Oracle JDK, нене знаю почему) в 32-битной среде Ubuntu. Так что я думаю, что это проблема 64-битного моста из Java в библиотеку PC / SC.

Есть идеи?

Благодарю.

Ответы на вопрос(7)

Ваш ответ на вопрос