Tuesday, April 23, 2019

Friday, April 19, 2019

Check os version in Linux command line

คำสั่งลองดู
lsb_release -a
hostnamectl
cat /etc/os-release
uname -r
cat /etc/os-release
 // แนะนำตัวนี้
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 17.10"
VERSION_ID="17.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=artful
UBUNTU_CODENAME=artful
Ref:

Add user to group Ubuntu 18.04

Ref
ตัวอย่าง
  • เราจะเพิ่ม alice เข้ากลุ่ม docker เพื่อตอนเรียกคำสั่งเกี่ยวกับ docker จะได้ไม่ต้องใช้ sudo
sudo usermod -aG docker alice

Thursday, April 18, 2019

How to enable service ssh on Ubuntu 18.04

  • ประเด็นคือ ยำ Ubuntu Mate ARM for Rasberry Pi 3 Model B+ ซะเน่าเลย ssh ไม่ทำงาน
  • พอทำงานได้ก็ไม่ auto run service ทำไงล่ะ
sudo systemctl stop ssh 
sudo systemctl start ssh 
sudo systemctl status ssh
sudo systemctl disable ssh 
sudo systemctl enable ssh // ตัวนี้แหละเปิดให้มันทำงานตอนบูตระบบด้วย
Ref

Wednesday, April 17, 2019

Connection reset when trying to ssh remote

อาการ
  • ssh remote ไปเครื่องปลายทางไม่ได้ ping เจอ
ssh user@ip-ssh-server 
Connection reset by ip-ssh-server port 22
Solved
sudo rm /etc/ssh/ssh_host_* && sudo dpkg-reconfigure openssh-server
Env
  • Ubuntu Mate 18.04 ARM for Rasberry Pi 3 Model B+
Ref

Auto launch java on Ubuntu Mate for Rasberry Pi 3 Model B+

  • เราไมต้องพึ่ง ~/.bashrc หรือ /etc/rc.local 
  • บน Ubuntu - Mate 18.04 เค้ามี Startup Applications เราจะไปใช้ script ให้มันยุ่งยากทำไมกัน
  • มันจะซ่อนอยู่เมนูใน Preferences
Exam
  • อยากให้โปรแกรมที่เขียนด้วย Java (.jar) แบบ console รันขึ้นมาตอน บูตเข้าระบบ (ตั้งค่า Auto login ไว้แล้ว)
  • และให้เปิดหน้าต่าง terminal ค้างไว้ด้วยจะได้เห็นการทำงานของโปรแกรมเรา
Step
  • สร้างไฟล์ .sh ในนั้นก็ประกอบด้วยคำสั่งประมาณนี้ ตัวอย่างนี้สร้างไฟล์ชื่อ run_mybash.sh
rm -rf /var/lock/LCK..ttyUSB0
java -jar /home/user/smarthw.jar
  • จากนั้นเพิ่ม โดยกดปุ่ม Add มันจะขึ้นหน้าต่างให้กรอกข้อมูล App เรา ประมาณนี้
Name: AppName
Command: mate-terminal -e /home/user/run_mybash.sh --full-screen --hide-menubar
Comment: ไม่ใส่ก็ได้
  • ตอนรันระบบขึ้นใหม่ เราตั้ง auto login ไว้ เราจะได้ terminal รันเต็มจอ โดยไม่มีเมนูบาร์ และ ทำงานตามคำสั่งใน run_mybash.sh ของเรา ด้วยสิทธิ์ sudo ของ user นั้นๆ
Env
  • Ubuntu Mate 18.04 ARM for Rasberry Pi 3 Model B+
Related




Thursday, April 11, 2019

Create shortcut desktop and add auto startup when user login

  • สร้างไฟล์ shortcut ชื่อ app.desktop ไปวางที่
/home/user/.config/autostart/app.desktop
  • ในไฟล์ตัวอย่างจะให้ terminal ของ Rasbian เรียกใช้ไฟล์ .jar เพือรันโปรแกรมที่เราเขียนด้วย Java
  • และให้แสดง terminal window ด้วย
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=myappname
Comment=
Exec=lxterminal -e java -jar /home/pi/myapp.jar
StartupNotify=false
Terminal=true
Hidden=false
NoDisplay=false
Ref

ค้นหาไฟล์บน Linux

find /usr -name libpcsclite.so.1 //ค้นหาภายใต้ /usr
find / -name libpcsclite.so.1 // ค้นหาภายใต้ /

Library for Java use SmartCard Reader on Rasberry Pi 3 Model B+

  • 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

Install Java with RXTX and MySQL on Ubuntu Mate for Rasberry Pi 3 Model B+

  • ได้ลองเล่น Rasberry Pi 3 Model B+ เค้าลง Rasbian มาให้ ก็ลองแล้วโอเค เร็วดี
  • แต่อยากลอง Ubuntu พยายามหาอยู่ Ubuntu Mate ลงง่ายสุดแล้ว สำหรับ Ubuntu
  • จะพัฒนาโปรแกรมอ่านค่าจาก SmartCard Reader แบบ USB เสียบเอา ด้วย Java
  • และมีการติดต่อ COMPORT ด้วย 
  • ลองใช้ java -version อยู่ไม่พบอะไรที่บ่งบอกว่าลงแล้ว
  • โพสนี้ขอเขียนบันทึกเกี่ยวกับลง .jar และ .so ของ library เสริมก่อน
Step
  • RXTX library สำหรับ อ่านและเขียนผ่าน comport ของ java เค้า
  • MySQL library ก็สำหรับเชื่อมต่อ java กับ MySQL ไง
  • ก่อนอื่นเลยต่อเน็ตให้ Ras เราก่อนจากนั้นก็
sudo apt-get update
  • ลองใช้ "sudo apt-get install openjdk-" แล้วกด Tab ดูเพื่อให้แสดง list ที่ repo เรามีให้ใช้ (repository default)
  • ลองลง openjdk-11-jdk ใช้แล้วไม่เวิร์คอ่ะ 
  • เพราะพาธมันไม่มี  .../jre/lib/ext/ ไว้สำหรับวางไฟล์ .jar หรือ .so เช่น RXTXcomm.jar , mysql-connector.jar , librxtxSerial.so เป็นต้น ซึ่งมันจำเป็นต้องใช้สำหรับติดต่อ commport
  • สรุป สำหรับโปรเจคที่ว่านี้คือ จะใช้ SmartCard Reader และ อ่านเขียนค่าผ่าน COMPORT ด้วยจึงจำเป็นต้องใช้
sudo apt-get install openjdk-8-jdk
  • จากนั้นก็ลง lib java ที่จำเป็นต้องใช้
sudo apt-get install librxtx-java libmysql-java
  • เราจะได้ไฟล์ ที่จำเป็น อยู่ที่พาธ /usr/share/java/
RXTXcomm-2.2pre2.jar (RXTXcomm.jar - shortcut )
mysql-connector-java-5.1.42.jar (mysql-connector-java.jar - shortcut)
  • shortcut ทั้ง 2 จะชี้ไปไฟล์ต้นฉบับพร้อมพาธเต็ม /usr/share/java/...
  • ให้เราคัดลอกไฟล์ตัวจริง และ shortcut  ไปวางไว้ที่ 
/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/ext/ 
  • จากนั้น คัดลอก .so  ตามนี้ไปวางที่เดียวกับที่ว่าง .jar เมื่อกี้ (พาธอยู่ที่ /usr/lib/jni/librxtx....so )
librxtxSerial.so (shortcut ไปยังไฟล์ ...2.2pre1.so นั่นและ), librxtxSerial.so-2.2pre1.so
librxtxParallel.so (shortcut), librxtxParallel.so-2.2pre1.so
  • ไฟล์พวกนี้ตอนใช้งานโปรแกรมที่ใช้ Java Runtime จะไปหา extension และ library พิเศษของเราในนี้แหละ
  • เพียงเท่านี้ Java บนเครื่องเราก็สามารถอ่านเขียนผ่าน COMPORT และ เชื่อมต่อ MySQL ได้
Add
  • การใช้งาน COMPORT บน Rasbian ไม่ต้องใช้ sudo ก็ได้
  • แต่บน Ubuntu Mate ต้อง sudo หรือสิทธิ์ root ถึงจะใช้ COMPORT ได้
  • add path และ รันโดยเรียกใช้ jar ด้วย
java -Djava.library.path=/usr/lib/jni -cp /usr/share/java/RXTXcomm.jar -jar BMSApp.jar

  • หรือ ใช้ compile โดยเรียกใช้ jar ด้วย

 javac -cp .:/path/file.jar File.java
Ref

How to forget saved wifi network on a Rasberry Pi 3 Model b+

  • OS Rasbian 
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WIFI1"
psk="passwordwifi1"
}
network={
ssid="WIFI2"
psk="passwordwifi2"
}
  • ตามนี้ลบ SSID ใหนที่ไม่ต้องการจัดเลย
Ref
  • https://medium.com/@spobwoode/how-to-forget-a-saved-wifi-network-on-a-rasberry-pi-4cbbcf53b128