rioastamal.net

Just things inside my head…

Archive for the ‘Shell Script’ Category

Tutorial: Membuat “Kata Bijak Hari Ini” Saat Start-up

Posted by rio On August - 15 - 2008

Kadang sebuah aplikasi menampilkan “Tip of The Day” saat ia dijalankan. Salah satu program yang melakukannya adalah program favorit saya yaitu GIMP. Pada tutorial kali ini kita akan membuat sebuah fitur yang hampir mirip “Tip of The Day” tapi berisi kata-kata bijak yang dalam bahasa kerennya wise word. “Kata-kata bijak hari ini” nantinya akan tampil saat anda memasuki GNOME.

Sama seperti sebelumnya kita tetap menggunakan shell script untuk membuat aplikasi mini ini. Kita juga memanfaatkan satu aplikasi kecil untuk keperluan ini yaitu zenity. zenity sudah include secara default pada distribusi GNOME di ubuntu.

Berikut ini adalah kodenya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
#
 
# buat array untuk daftar kata-kata bijak
kata[0]="Takut akan kegagalan seharusnya tidak menjadi alasan untuk tidak mencoba sesuatu.\n\nKepemimpinan adalah Anda sendiri dan apa yang Anda lakukan."
kata[1]="Kejujuran adalah batu penjuru dari segala kesuksesan, Pengakuan adalah motivasi terkuat.\n\nBahkan kritik dapat membangun rasa percaya diri saat \"disisipkan\" diantara pujian."
kata[2]="Jika Anda dapat memimpikannya, Anda dapat melakukannnya.\n\nIngatlah, semua ini diawali dengan seekor tikus, Tanpa inspirasi.... kita akan binasa."
kata[3]="Uang merupakan hamba yang sangat baik, tetapi tuan yang sangat buruk."
kata[4]="Sumber kekuatan baru bukanlah uang yang berada dalam genggaman tangan beberapa orang, namun informasi ditangan orang banyak."
kata[5]="Jenius adalah 1 % inspirasi dan 99 % keringat. Tidak ada yang dapat menggantikan kerja keras.\n\nKeberuntungan adalah sesuatu yang terjadi ketika kesempatan bertemu dengan kesiapan."
kata[6]="Ketika satu pintu tertutup, pintu lain terbuka, namun terkadang kita melihat dan menyesali pintu tertutup tersebut terlalu lama hingga kita tidak melihat pintu lain yang telah terbuka."
 
lastword=
 
# cek apakah file tempat konfigurasi ada atau tidak
ls $HOME/.wiseword > /dev/null 2> /dev/null
if [ $? -ne 0 ]; then
   # jika tidak ada maka tulis 0 sebagai angka awal
   echo 0 > $HOME/.wiseword 
fi
 
lastword=`cat $HOME/.wiseword`
 
zenity --info --text="<b>Kata Bijak Hari Ini</b>\n\n<i>${kata[$lastword]}</i>" 
 
# hitung panjang array
num_kata=${#kata[@]}
 
if [ `expr $lastword + 1` -ge $num_kata ]; then
   echo 0 > $HOME/.wiseword
else
   echo `expr $lastword + 1` > $HOME/.wiseword
fi

File ini saya simpan di $HOME/autorun/katabijak.sh. Setelah selesai menyimpan jangan lupa untuk memberikan permission execute pada file katabijak.sh.

$ chmod +x katabijak.sh

Sekarang saatnya memasukkan script kita pada session start-up GNOME. Carannya klik System > Preferences > Sessions. Lihat gambar berikut untuk lebih jelas.

gnome sessions

Untuk mengetesnya silahkan log out dari GNOME lalu login kembali. Dibawah ini adalah salah satu contoh output dari “Kata Bijak Hari Ini”.

kata bijak hari ini

Lumayan memberikan spirit ketika kita membaca kata-kata bijak tersebut. Bagi anda yang mengelola lab komputer yang menggunakan Sisem Operasi Linux anda dapat menggunakan teknik ini. Itu yang saya lakukan :).

Sumber kata bijak:
http://www.geocities.com/s_tato/wiseword.html
http://simriv.blogspot.com/2007/11/kata-kata-bijak-dari-ceo-kelas-dunia.html

Share/Save/Bookmark

Bahasa pemrograman apa saja yang sudah pernah anda gunakan? C, C++, PHP, Perl, Java, VB, atau yang lain? Apa kesamaan bahasa-bahasa pemrograman tersebut? Tentu kesemua bahasa pemrogrman tersebut menggunakan syntax dalam bahasa Inggris. Pada artikel ini saya akan coba menunjukkan kepada anda bagaimana membuat bahasa pemrograman yang menggunakan syntax bahasa Indonesia, meski sebenarnya ini hanyalah teknik “goblok-goblokan” saja :).

Jadi nantinya kita dapat menuliskan 'jika [ kondisi true ] maka blablabla...' daripada 'if [ kondisi true ] then blablabla...'. Tertarik?

Bahasa pemrograman yang akan kita buat sebenarnya merupakan sebuah shell script. Pada shell script terdapat sebuah tool yang sangat berguna yaitu alias. Dengan program alias kita dapat memberikan nama lain untuk sebuah perintah. Dan tahukah anda bahwa perintah ls juga sebenarnya adalah alias dari perintah ls --color=auto.

Nah, karena shell script juga memiliki struktur percabangan dan perulangan maka kita dapat membuat sebuah program menggunakan shell script. Perintah alias kita gunakan untuk memberi nama lain pada syntax shell script yang berhubungan dengan pembuatan program seperti echo, if, then, dan lain-lain. Berikut ini adalah alias yang saya gunakan untuk meng-Indonesiakan shell.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
#
# file alias untuk meng-"indonesia"-kan shell script
#
 
alias jika='if'
alias maka='then'
alias seltu-jika='elif'
alias selain-itu-jika='elif'
alias selain-itu='else'
alias seltu='else'
alias kaji='fi'
alias akhir-jika='fi'
 
alias kasus='case'
alias dalam='in'  # in tidak dapat diganti :(
alias suska='esac'
alias akhir-kasus='esac'
 
alias lakukan='do'
alias selesai='done'
 
alias selama='while'
alias untuk='for'
 
alias fungsi='function'
 
alias cetak='echo'
alias baca='read'
 
alias kembalikan='return'
alias hentikan='break'
alias keluar='exit'

Dalam komputer saya file ini saya letakkan pada direktori $HOME/shellscript/indoalias.sh. Jadi setiap script yang ingin menggunakan bahasa Indonesia harus meng-include file tersebut. Berikut ini adalah sebuah shell script sederhana untuk mengetes bahasa pemrograman baru kita :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# include alias
. $HOME/shellscript/indoalias.sh
 
# contoh percabangan sederhana
cetak "---- CONTOH PERCABANGAN -----"
username=""
password=""
 
cetak -n "Masukkan username: "
baca username
cetak -n "Masukkan password: "
baca -ers password
 
cetak ""
 
jika [ "$username" == "rio" -a "$password" == "astamal" ] ; maka
   cetak "LOGIN BERHASIL"
selain-itu
   cetak "LOGIN GAGAL"
kaji
 
# contoh looping sederhana
cetak -e "\n-------- CONTOH PERULANGAN ---------"
untuk (( i=1; i<=5; i++ ))
lakukan
   cetak -n "$i "
selesai
 
cetak ""
 
jawaban=0
jawaban_user=-1
selama [ $jawaban -ne $jawaban_user ]; lakukan
   angka1=$[ $RANDOM % 200 ]
   angka2=$[ $RANDOM % 500 ]
   jawaban=`expr $angka1 + $angka2`
 
   cetak -n "Hasil dari $angka1 + $angka2 adalah: "
   baca jawaban_user
 
   cetak ""
   jika [ $jawaban -ne $jawaban_user ]; maka
      cetak "Jawaban SALAH, yang benar adalah $jawaban"
   akhir-jika
selesai
 
cetak "Jawaban Benar..."

Dan berikut ini adalah outputnya:

astadev@astadev-laptop:/tmp$ sh tes.sh 
---- CONTOH PERCABANGAN -----
Masukkan username: rio
Masukkan password: 
LOGIN BERHASIL
 
-------- CONTOH PERULANGAN ---------
1 2 3 4 5 
Hasil dari 158 + 408 adalah: 444
 
Jawaban SALAH, yang benar adalah 566
Hasil dari 71 + 151 adalah: 121
 
Jawaban SALAH, yang benar adalah 222
Hasil dari 72 + 415 adalah: 45
 
Jawaban SALAH, yang benar adalah 487
Hasil dari 151 + 187 adalah: 338
 
Jawaban Benar...
astadev@astadev-laptop:/tmp$

Bagaimana lumayan keren kan?? saya gunakan ini untuk mengajari keponakan saya yang masih duduk di kelas 5 SD dia jadi suka sama komputer :). Selamat mencoba…

Share/Save/Bookmark

Tutorial: Mengambil Screenshot GDM

Posted by rio On July - 5 - 2008

Anda tentu sering mendengar kata screenshot, bagi yang belum mengetahui apa screenshot tersebut, pengertian screenshot adalah suatu gambar yang diambil dari apa yang terlihat di layar komputer kita baik itu seluruh layar, window tertentu, atau bagian tertentu (geometri) dari layar. Semua sistem operasi secara default menyediakan fungsi ini. Cara paling mudah dan sederhana untuk mengambil screenshot adalah dengan menekan tombol PrtSc SysRq pada keyboard laku paste ke program pengolah gambar seperti MS Paint(Windows) atau GIMP(Linux).

Pada tutorial kali ini saya akan membahas bagaimana mengambil screenshot pada sistem operasi Linux(Ubuntu 8.04) lebih tepatnya screen login Gnome (GDM). Jika kita ingin mengambil screenshot setelah kita login pada Gnome itu hal mudah, tinggal tekan tombol PrtSc SysRq lalu paste di GIMP, beres. Masalahnya baru muncul ketika kita ingin mengambil screenshot dari screen login itu sendiri, kita tidak bisa langsung menekan tombol lalu paste begitu saja, hal ini karena kita belum login jadi mana mungkin kita dapat membuka program semacam GIMP. Terus bagaimana caranya? dari hasil googling terdapat dua metode untuk meng-capture screen GDM, yaitu:

  1. Menggunakan program gdmthemetester
  2. Menggunakan shell script untuk otomatisasi pengambilan screenshot

Cara yang akan saya tunjukkan adalah cara yang kedua yaitu menggunakan shell script. Berikut adalah langkah-langkahnya:

  1. Buat sebuah file baru menggunakan teks editor misal, takeshot.sh
  2. Ketik kode dibawah ini:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh
#
# Simple shell script to take screenshot
# By Rio Astamal : 05-Jul-2008
#
 
executor=`whoami`
timestamp=`date +%s` # UNIX timestamp
defname="/tmp/scshot${timestamp}.png"
myuname="astadev"  # CHANGE this with your own username
delay=3  # delay before screenshot taken (in second)
if [ "$executor" != "root" ]; then
   echo 'You MUST run this script as root!.'
   exit 2
fi
 
function usage() {
   echo "Usage: $0 [file_name]"
   echo "Example: "
   echo "$0 /tmp/scshot.png"
   return
}
 
if [ $# -gt 0 ]; then
   if [ "$1" == "--help" ]; then
      usage ; exit 2
   else
      defname=$1
   fi
fi
 
ls $defname 1>/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
   # file is exists make a copy of it
   newfile=${defname}.bak.$timestamp
   cp $defname $newfile
   echo "Old file was copied to $newfile."
fi
 
chvt 7      # more info see man chvt
sleep $delay
XAUTHORITY=/var/lib/gdm/:0.Xauth DISPLAY=:0.0 import -window root $defname
 
if [ $? -eq 0 ]; then
   chown ${myuname}:${myuname} $defname 2>/dev/null
   echo "DONE: Screenshot saved to ${defname}."
else
   echo "ERROR: Make sure you have write permission on that directory."
fi
 
# EOF
  1. Log out dari session sekarang
  2. Ketika muncul screen login tekan kombinasi Ctrl-Alt-F2
  3. Login dengan username dan password anda
  4. Jalankan script dengan menggunakan perintah:
    • sudo sh takeshot.sh, atau
    • sudo sh takeshot.sh /tmp/myscreenshot.png

Dari script di atas baris yang paling penting adalah baris nomor 42. Pada baris tersebut terdapat perintah import -window root $defname, perintah inilah yang kita gunakan untuk mengcapture screen. Program import merupakan salah satu program yang ada pada paket ImageMagick.

Kebanyakan user yang mengambil screenshot dari GDM adalah para GDM theme creator. Nah karena saya bukan theme creator, saya mengambil screen GDM karena saya membuat halaman My Desktop pada blog ini yang menampilkan tampilan Desktop Ubuntu saya :). Ini contoh hasilnya:

My GDM

Referensi:
http://ubuntuforums.org/archive/index.php/t-239810.html
http://bbs.archlinux.org/viewtopic.php?pid=294833
http://forums.fedoraforum.org/showthread.php?t=122058

Share/Save/Bookmark