![](/img/trans.png)
[英]Issue detecting PCSCvia java program on linux, the card reader is connected
[英]PCSC does not return anything on linux, the card reader is connected
我正在嘗試這個,用PCSC框架閱讀卡片。 但它根本不會返回任何東西。
import java.util.List;
import javax.smartcardio.*;
public class Blog {
public static void main(String[] args) {
try {
// Display the list of terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
// Use the first terminal
CardTerminal terminal = terminals.get(0);
// Connect wit hthe card
Card card = terminal.connect("*");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();
// Send Select Applet command
byte[] aid = {(byte)0xA0, 0x00, 0x00, 0x00, 0x62, 0x03, 0x01, 0x0C, 0x06, 0x01};
ResponseAPDU answer = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid));
System.out.println("answer: " + answer.toString());
// Send test command
answer = channel.transmit(new CommandAPDU(0x00, 0x00, 0x00, 0x00));
System.out.println("answer: " + answer.toString());
byte r[] = answer.getData();
for (int i=0; i<r.length; i++)
System.out.print((char)r[i]);
System.out.println();
// Disconnect the card
card.disconnect(false);
} catch(Exception e) {
System.out.println("Ouch: " + e.toString());
}
}
}
輸出:
run-single:
Terminals: []
Ouch: java.lang.IndexOutOfBoundsException: Index: 0
BUILD SUCCESSFUL (total time: 4 seconds)
通過使用其他工具,它可以工作,但無法弄清楚為什么Java代碼沒有顯示?
root@sun-M14xR2:/var/tmp# ps -e | grep pcsc
16399 ? 00:00:00 pcscd
root@sun-M14xR2:/var/tmp# service pcscd status
* pcscd is running
root@sun-M14xR2:/var/tmp# service pcscd restart
* Restarting PCSC Lite resource manager pcscd [ OK ]
root@sun-M14xR2:/var/tmp# lsusb
Bus 003 Device 032: ID 076b:3021 OmniKey AG CardMan 3121
root@sun-M14xR2:/var/tmp# opensc-tool -l
# Detected readers (pcsc)
Nr. Card Features Name
0 No Generic CCID Reader 00 00
root@sun-M14xR2:/var/tmp# pcsc_scan
PC/SC device scanner
V 1.4.20 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC lite version: 1.8.3
Using reader plug'n play mechanism
Scanning present readers...
0: Generic CCID Reader 00 00
Fri Apr 19 05:30:22 2013
Reader 0: Generic CCID Reader 00 00
Card state: Card removed,
Fri Apr 19 05:30:59 2013
Reader 0: Generic CCID Reader 00 00
Card state: Card inserted, Unresponsive card,
Fri Apr 19 05:31:04 2013
Reader 0: Generic CCID Reader 00 00
Card state: Card removed,
Fri Apr 19 05:33:31 2013
Reader 0: Generic CCID Reader 00 00
Card state: Card inserted,
ATR: 3B 98 13 40 0A A5 03 01 01 01 AD 13 11
ATR: 3B 98 13 40 0A A5 03 01 01 01 AD 13 11
+ TS = 3B --> Direct Convention
+ T0 = 98, Y(1): 1001, K: 8 (historical bytes)
TA(1) = 13 --> Fi=372, Di=4, 93 cycles/ETU
43010 bits/s at 4 MHz, fMax for Fi = 5 MHz => 53763 bits/s
TD(1) = 40 --> Y(i+1) = 0100, Protocol T = 0
-----
TC(2) = 0A --> Work waiting time: 960 x 10 x (Fi/F)
+ Historical bytes: A5 03 01 01 01 AD 13 11
Category indicator byte: A5 (proprietary format)
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 98 13 40 0A A5 03 01 01 01 AD 13 11
Belgium Electronic ID card
我發現了另一種解決方法
我想我找到了一個解決方法,因為我遇到了類似的問題。 在來自ubuntu的bug報告中,它說javax.smartcardio庫在錯誤的目錄中搜索PC / SC庫。
所以使用下面的設置運行我的應用程序對我有用
-Dsun.security.smartcardio.library = / usr / lib中/ x86_64的-Linux的GNU / libpcsclite.so
這是因為Linux中的驅動程序問題。 請為此硬件安裝適當的驅動程序: https : //www.hidglobal.com/drivers/14919
然后我在終端中得到了至少代碼反饋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.