Selasa, 31 Januari 2017

Membuat Suara Notifikasi pada USB Device


SOUND NOTIFIKASI USB DEVICE

  1. Membuat file systemd service dan file bash script
  1. Membuat file systemd service di dalam direktori /etc/systemd/system/ dengan extensi file .service. Pada laporan ini saya membuat file systemd service dengan nama file usb.service. Berikut adalah source code di dalam file tersebut:
Keterangan :
  • [Unit] dan [Service] merupakan bagian-bagian dalam systemd service. Pada file systemd service umumnya terdapat 3 bagian yaitu [Unit], [Service] dan [Install].
  • Description=Sound USB. Merupakan deskripsi tentang service yang dijalankan. Deskripsi ini dapat di isi bebas sesuai keinginan. Deskripsi ini akan terlihat pada log ketika service dijalankan. Berikut adalah contoh output pada file syslog.
Command : tail –f /var/log/syslog
Terlihat jika systemd menjalankan service dengan deskripsi sesuai dengan yang telah di buat.
  • Type=oneshot. Ada beberapa type untuk service pada systemd meliputi simple, forking, oneshot, dbus, notify, dan idle. Untuk type oneshot sendiri digunakan agar setelah service yang kita buat dijalankan, maka service default (bawaan dari Ubuntu) yang digunakan untuk menghandle usb device tidak di eksekusi. Service bawaan Ubuntu ketika ada usb device yang ditancapkan akan langsung melakukan mounting, tetapi karena service baru yang dibuat menggunakan type oneshot, maka flashdisk yang ditancapkan tidak akan di mount, tetapi hanya akan memunculkan notifikasi sesuai dengan yang telah didefinisikan pada bash script.
  • RemainAfterExit=true. Agar systemd tetap menganggap service active setelah service selesai dijalankan.
  • User=fr19 dan Environment=DISPLAY=:0. Kedua baris script ini dibutuhkan karena service yang dibuat membutuhkan sebuah display untuk memunculkan notifikasi dan membunyikan sebuah sound. Apabila service yang dibuat tidak membutuhkan display maka kedua baris ini dapat dihilangkan.
  • ExecStart=/home/fr19/masuk.sh. Ketika service dijalankan maka akan mengeksekusi file bash script masuk.sh yang terletak di dalam direktori /home/fr19/.
  • ExecStop=/home/fr19/keluar.sh. Ketika service dijalankan maka akan mengeksekusi file bash script keluar.sh yang terletak di dalam direktori /home/fr19/.

Setelah selesai membuat file service, maka harus mengeksekusi command dibawah ini agar systemd dapat mengenali service baru yang telah dibuat.
Command : systemctl daemon-reload

NB: Command di atas juga harus di eksekusi ketika selesai mengedit file service, agar systemd mengetahui perubahan-perubahan yang terjadi.

  1. Membuat file bash script masuk.sh dan keluar.sh di dalam direktori sesuai dengan yang telah di definisikan pada file service yang telah dibuat.
Berikut adalah source code untuk bash script masuk.sh:

Berikut adalah source code untuk bash script keluar.sh:
Keterangan source code:
  • #!/bin/bash. Merupakan signature/penanda jika file tersebut merupakan file bash script.
  • notify-send “Device Masuk”. Digunakan untuk menampilkan pesan notifikasi dengan isi pesan “Device Masuk”.
  • canberra-gtk-play –f /usr/share/sounds/ubuntu/stereo/desktop-login.ogg. Digunakan agar file sound desktop-login.ogg yang berada di dalam direktori /usr/share/sounds/ubuntu/stereo/ dijalankan menggunakan aplikasi canberra-gtk-play.

Setelah kedua file tersebut dibuat, selanjutnya adalah memberi hak akses execute pada kedua file tersebut menggunakan command chmod.

  1. Mencoba melakukan start dan stop service yang telah dibuat secara manual menggunakan systemctl
  1. Start Service
Terlihat ketika usb.service di start pesan notifikasi telah muncul dan sound telah dibunyikan.



  1. Stop Service
Terlihat pula ketika usb.service di stop pesan notifikasi muncul sesuai dengan pesan yang telah di tuliskan dalam bash script keluar.sh.

Pada tahap ini dapat disimpulkan jika service dan script bash yang telah dibuat dapat berjalan dengan benar.

  1. Membuat rules udev agar service yang dibuat dijalankan secara otomatis ketika udev mendeteksi adanya usb yang masuk (plugged) maupun usb yang keluar (unplugged). File harus di buat di dalam direktori /etc/udev/rules.d/ dengan extensi file .rules. Pada laporan ini saya membuat rules dengan nama file usb.rules.
Keterangan:
  1. KERNEL, SUBSYSTEMS, dan ACTION merupakan parameter dimana apabila nilai dari parameter-parameter tersebut sesuai dengan yang di definisikan pada rules, maka akan mengeksekusi perintah pada RUN.
  2. KERNEL==”sd[a-z][0-9]”. Rules akan melakukan filtering pada parameter KERNEL dimana nilai yang harus dipenuhi adalah sda0-sdz9 (ketika ada device storage yang masuk pasti akan dibaca oleh system dengan nama awalan sd diikuti huruf sesuai urutan abjad dan angka yang menandakan partisi ke berapa dari device tersebut).
  3. SUBSYSTEMS==”usb”. Melakukan filtering untuk nilai dari parameter SUBSYSTEMS dengan nilai (value) yang harus terpenuhi adalah usb.
  4. ACTION==”add”. Secara default, ketika ada device masuk (plugged) maka udev akan membacanya dan memberikan nilai pada parameter ACTION dengan value “add”. Sedangkan ketika device keluar (unplugged) maka parameter ACTION akan diberi value “remove”. Oleh karena itu, saya melakukan filtering dengan parameter ACTION dengan value sesuai dengan yang ada.
  5. RUN+=”/bin/systemctl start usb.service”. Ketika value parameter-parameter yang didefinisikan sesuai, maka command di dalam RUN inilah yang akan di eksekusi.

Parameter-parameter di atas dapat dilihat dengan cara berikut:
  1. Eksekusi command udevadm monitor --property
  2. Tancapkan/cabut flashdisk, lihat pada terminal akan muncul beberapa output seperti berikut:
Contoh ketika flashdisk di cabut.
Setelah selesai membuat file rules, maka perlu mengeksekusi command berikut ini agar rules yang dibuat dikenali oleh udev.
udevadm control --reload

NB: Command tersebut juga harus di eksekusi setelah melakukan editing rules, sehingga udev dapat mengenali perubahan yang dilakukan.


  1. Melakukan pengujian
  1. Device USB (Flashdisk) di tancapkan

  1. Device USB (Flashdisk) di cabut
 

NB : Thanks to Fakhrur Razi <3
Makasih udah jadi mentor terbaik ku selama kuliah
I love you ^.^v
 

Tidak ada komentar:

Posting Komentar