- OS:Rasbian for Rasberry Pi 3 Model B+
- ติดตั้ง library เพิ่มให้ Java เราใช้งาน SmartCard Reader บน Rasberry ได้
Step
sudo apt-get update
sudo apt-get install libusb-dev
sudo apt-get install pcscd // ตัวนี้สำคัญเพราะเป็น service ที่ใช้กับพวก Reader ต่างๆ
sudo apt-get install libpcsclite1
sudo apt-get install libpcsclite-dev
- เพิ่มเติมสำหรับตรวจสอบ Reader เรา
sudo apt-get install pcsc-tools
- ใช้คำสั่ง pcsc_scan เพื่อทดสอบว่า linux เราพบอุปกรณ์ SmartCard Reader หรือเปล่า
PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
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>
...
- สำหรับตรวจสอบ library ที่ pcsc_scan ใช้ คำสั่ง
ldd -r /usr/bin/pcsc_scan
- เราจะพบพาธ library ที่สำคัญ เพราะ Java เราต้องใช้ตัวนี้ด้วย libpcsclite.so.1 (ซึ่งตัวนี้จะเป็น shortcut ชี้ไปยัง libpcsclite.so.1.0.0 อีกทีอ้างอิงบน Rasbian)
- ให้เราเปิดไฟล์ /etc/rc.local (for all user) หรือ /home/user/.bashrc (for one user) พิมพ์คำสั่งตั้งพาธสำหรับ Java ซะหน่อยให้พบ library ตัวนี้
- ตัวอย่างจากอ้างอิง
export _JAVA_OPTIONS="-Dsun.security.smartcardio.library=/usr/lib64/libpcsclite.so.1"
export JAVA_OPTS="-Dsun.security.smartcardio.library=/usr/lib64/libpcsclite.so.1"
- ประยุกค์ใช้กับ Rasbian บน Rasberry เราจะได้เป็นแบบนี้ (ใช้อันใดอันหนึ่งพอ)
export _JAVA_OPTIONS="-Dsun.security.smartcardio.library=/usr/lib/arm-linux-gnueabihf/libpcsclite.so.1"
export JAVA_OPTS="-Dsun.security.smartcardio.library=/usr/lib/arm-linux-gnueabihf/libpcsclite.so.1"
- ผู้เขียนใช้แค่ export _JAVA_OPTIONS ใน .bashrc สำหรับ user เท่านั้น
- หรืออยากใช้แบบเฉพาะตอน รันขณะนั้น ก็ได้
java -Dsun.security.smartcardio.library=/usr/lib/arm-linux-gnueabihf/libpcsclite.so.1 File.java
- ถ้าเป็น Ubuntu Mate for Rasberry Pi 3 ไม่ต้อง export path java ไปที่ libpcsclite1.so นะมันคงเห็นพาธนี้แล้วตั้งแต่ลง Java แต่สำหรับ Rasbian ไม่ใช่ต้อง export แบบ global (/etc/rc.local) หรือ เฉพาะ user ก็ (/home/user/.bashrc)
- หรือจะเขียนโค้ด Load library ก่อนทุกครั้งก็ได้เช่นกัน javax.smartcardio library
try {
String comm[] = { "find", "/usr", "/lib", "-name",
"libpcsclite.so.1" };
Process p = Runtime.getRuntime().exec(comm);
BufferedReader reader = new BufferedReader(
new InputStreamReader(p.getInputStream()));
while ((line = reader.readLine()) != null && !line.equals("")) {
if (line.contains("libpcsclite.so.1")) {
System.setProperty("sun.security.smartcardio.library",line);
break;
}
}
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
Add
- สำหรับ Ubuntu Desktop ทดสอบบน 18.04 แต่ OpenJDK 10 ไม่พบ javax.smartio
- ต้องใช้ OpenJDK 11 หว่า สงสัย 10 ต้อง export path แน่ๆ เลย ลง libusb-de pcscd libpcsclite1 libpcsclite-dev แล้ว ไม่ต้อง set path libpcsclite.so.1 น่ะมันมองเห็นเลย
- และ Ubuntu - Mate for Rasberry ก็ไม่ต้อง export เหมือนกันนะ
- แต่ Rasbian ต้อง export path สำหรับ libpcsclite.so.1 นะ จำได้
Ref
No comments:
Post a Comment