ZENITY İLE KABUK PROGRAMLAMA MUCİZESİ

Tabii ki ben de dahil bütün penguenler ne zaman kullandıkları dağıtımla ilgili sorunlar çıksa hemen İnternet’teki online dostlarından yardım almak için yerli yabancı forumlar, bloglar karıştırarak çözüme ulaşırlar. Bunu öngörmek için Linux kullanmak yeterlidir ve bu kesinlikle çok zevklidir. Bugünlerde okulumla ilgili bir konuyu araştırken bu mesele birden bire bir numaralı araştırma konum oldu. Buna vesile olan sorun ise wpa_supplicant ve Gnome Network Manager arasındaki uyumsuzluk ve birçok bug‘a neden olan meseleleri araştırmaktı. Bu konuyu çesitli yönlerle anlatan ve çözümü sunduğum uzun bir döküman hazırladım. Ama insanların onu karışık bulacağından ve yazdığım çözümü uygulayarak Linux(Ubuntu)’dan kablosuz ağa bağlanacağından açıkçası emin değildim. Bunun başka bir çözümü olmalıydı. Bütün işlemleri görsel ve tek tıkla yapacak bir şeye ihtiyacım vardı. Bana göre aklımda iki mesele vardı. C ya da Java ile butün her şeyi kendi yapacak bir program yazmalıydım. Fakat sonradan kabuk programlama ile bu işin daha kolay olduğu önerisini aldım üstadlarımdan. Daha sonra değerli arkadaşım Koray ertesi gün bana Zenity ile bir bash mucizesi gösterdi ve işte o zaman yapboz tamamlanmış oldu ve çok şey öğrendim ve sizlerle paylaşmak istedim:) Bunun için kullandığım kaynağı en sonda referans belirttim. Yararlı olması dileğiyle…

(Linux’a yeni başlayanlara not: Bu konu ile ilgilenmeyi düşünenler ilk olarak temel unix komutları ve kabuk programlama konusunda temel bilgi düzeyine sahip olmalıdır. Çok zor değildir sakın çekinmeyin. Biraz bilgi için belgeler.org ve Dr. Halil Yurdugül hocanın yazırlamış olduğu pdf’i incelerseniz belirli bir seviyeye geleceğinizden kesinlikle eminim.)

Zenity Desktop Application Manual V2.0~2.28.0

1-Giriş

Zenity aşağıdaki temel uygulamaları oluşturmanıza olanak verir;

  • Takvim
  • Dosya Seçimi
  • Liste
  • Bildirim simgesi
  • İleti(Mesaj)

Hata, Bilgi, Soru, Uyarı

2-Kullanım

Yazdığınız scriptlerde kullanıcı ile daha verimli iletişimde bulunmak için Zenity’nin temel görsel öğelerini kullanabilirsiniz…

Şöyle ki;

Kullanıcı bilgi diyaloğu oluşturarak, örneğin takvim diyaloğu; kullanıcıya takvimden tarihi seçtirebilir veya dosya seçme diyaloğu ile dosyalarını seçmesini çok rahat hale getirebilirsiniz…Bir başka diyalog ekleyerek kullanıcının bilgilenmesini sağlayabilirsiniz.Örneğin, ilerleme çubuğu(progress dialog) ekleyerek kullanıcıya işlemin durumu hakkında bilgi verdirebilirsiniz veya uyarı iletisi ile kullanıcıyı durumdan haberdar edebilirsiniz. Eğer bu diyaloglar kullanıcı tarafından kapatılırsa, Zenity standart bir text hatası oluşturacaktır

Zenity komutlarını yazdığınızda hangi argümanların tırnak işareti ile belirlendiğine dikkat etmemiz gerekmektedir.

Örneğin;

zenity --calendar --title="Tatil Planı"

Bu şekilde kullanmayınız;

zenity --calendar --title=Tatil Planı

Eğer tırnak işareti kullanmazsanız bazı beklenmedik sonuçlarla karşılabilirsiniz…

2- a)Kısayol tuşları

Kısa yol tuşları çoğu zaman kullanıcıya klavye ve fareden daha fazla kullanışlı olur ve çoğumuz onlara alışmışızdır. Her kısa yol tuşu menu veya diyalog pencereleri üzerinde altı çizili olarak bulunurlar.Bazı Zenity diyalogları kısayol tuşlarını desteklerler. Bir kısa yol tuşu oluşturmak için aşağıdaki örneği inceleyelim ;

Bir isim seçin”.

2- b)Çıkış Kodları

Zenity aşağıdaki çıkış kodlarını döndürür.

Çıkış Kodu Tanım
0 Kullanıcı Tamam veya Kapat butonuna basmıştır.
1 Kullanıcı İptal veya pencere kapat butonuna tıklamıştır.
-1 Beklenmedik bir hata meydana gelmiştir.

2- c)Genel Seçenekler

Application Options:

zenity -- [arguman]
–calendar Takvim Diyaloğunu gösterir.
–entry Metin girdi diyaloğunu gösterir.
–error Hata diyaloğunu gösterir.
–info Bilgi Diyaloğunu gösterir.
–file-selection Dosya seçme diyaloğunu gösterir.
–list Liste diyaloğunu gösterir.
–notification Bildirimleri gösterir.
–progress Durum çubuğunu gösterir.
–question Soru diyaloğunu gösterir.
–warning Uyarı diyaloğunu gösterir.
–scale Ölçeklendir diyaloğunu gösterir.
–text-info Text bilgi diyaloğunu gösterir.
–display=DISPLAY X kulanımı

Bütün Zenity diyalogları aşağıdaki genel seçenekleri desteklerler:

--title=Baslik

Başlık diyaloğunu özelleştirir.

--window-icon=icon_yolu

Diyalog penceresi göründüğünde hangi icon’un görüneceğini bu şekilde düzenleyebilirsiniz. Zenity ‘bilgi’, ‘uyarı’, ‘soru’ ve ‘hata’ için 4 farklı icon(simge) barındırmaktadır.

--width=genislik

Diyalog penceresinin genişliğini düzenler..

--height=yukseklik

Diyalog penceresinin yüksekliğini düzenler…

2- d)Yardım Seçeneği

Zenity’in bir diyaloğu hakkında yardım almak için ;

#zenity --help --[arguman]

şeklinde komut verilebilir.

Zenity hakkında bilgi için ;

#zenity --about

Zenity versiyon bilgisi için ;

# zenity --version

komutları verilerek bilgi sahibi olunabilir.

(Not: Bu çalışmada anlatılanlar v2 ve 2.28.0 üzerinde denenenlerdir.)

2- e)GTK+ Seçeneği

Zenity standart GTK+ seçeneğini de destekler. Daha fazla GTK+ seçeneği hakkında bilgi edinmek için

#zenity -?

komutunu veriniz.

3-Calendar Dialog

–calendar seçeneğini kullanarak bir takvim oluşturabilirsiniz. Eğer komut satırında belirli bir tarih formatı belirtmezseniz Zenity hata verecektir.Eğer bir tarih seçilmezse Zenity şimdiki zamanı gösterir.

Takvim seçeneği aşağıdaki seçenekleri destekler.

--text=metin

Belirleyeceğiniz text takvim diyaloğunda görülecektir..

--day=gun

1-31 arasında seçeceğiniz takvim diyalog seçeneğidir.

--month=ay

1-12 arasında seçilebilen takvim ay seçeneğidir.

--year=yil

Takvim yıl seçeneği.

--date-format=format

Tarihi belirledikten sonra varsayılan olarak yerel ayarlarınıza göre tarih formatlanacaktır. Fakat tarih format strftime fonsiyonuna göre kabul edilebilir olmalı.Örneğin %A%d%m%y
Aşağıdaki script size nasıl bir takvim diyaloğu oluşturulması husunda yardımcı olacaktır;

#!/bin/sh

if zenity --calendar \

--title="Takvim" \

--text="Tarihi belirle." \

--day=9 --month=1 --year=2010

then echo $?

else echo "Tarih seçilmedi."

fi

Figür 1 Takvim Diyalog Örneği

4-Dosya Seçim Penceresi

–file-selection seçeneğini kullanarak dosya seçim penceresi oluşturabilirsiniz. Zenity’nin dosya seçim penceresi varsayılan olarak dosya seçimi sonrasında seçilen dosyayı açması için ayarlanmıştır.

Dosya seçim penceresi aşağıdaki özellikleri destekler;

--filename=Dosya_ismi

Bu seçenek dosya ve dizinlerin ,dosya seçim penceresinde ilk göstereceği dizin veya dosyayı belirlememizi sağlar.

--multiple

Dosya seçimi penceresinde birden fazla dosya seçmemize olanak sağlar.

--directory

Sadece seçili dizinin içerisindeki dosyaların görünmesini sağlar.

--save

Dosya seçim penceresini kayıt moduna ayarlar.

--separator=ayirac

Dosya isimlerini listelemede ayıraç olarak kullanılabilecek bir string’e olanak sağlar.

Aşağıdaki script size nasıl bir “Dosya Seçim Penceresi” oluşturulması husunda yardımcı olacaktır;

#!/bin/sh

FILE=`zenity --file-selection --title="Bir dosya seçiniz."`

case $? in

0)

echo "\"$FILE\" seçildi.";;

1)

echo "Hiçbir dosya seçilmedi.";;

-1)

echo "Hiçbir dosya seçilmedi.";;

esac

Figür 2 Dosya Seçim Penceresi Örneği

5-Bildirim Simgesi

--text=text

Bildirim menüsünde belirlenen bildirimi göstermek için kullanılır.

Aşağıdaki script size nasıl bir “Bildirim Simgesi” oluşturulması husunda yardımcı olacaktır;

#!/bin/sh

zenity --notification\

--window-icon="Bilgi" \

--text="Sistemin güncellenmesi gerekmektedir!"

Figür 3 Bildirim Diyalog Örneği

6-Liste Diyaloğu

–list seçeneğini kullanarak liste diyaloğu oluşturabilirsiniz. Zenity varsayılan olarak seçilen satırın sadece ilk sütununa girilen değeri döndürür.

--column=sutun

Sütun oluşturmak için kullanılır ve sütun bilgisi için –column seçeneği kullanılır.

--checklist

İlk sütundaki değerleri kontrol için kullanılır ve kontrol kutusu içerir.

--radiolist

Liste diyaloğunun ilk sutunu radyo kutusu ile listelenebilir.

--editable

Seçili verinin düzenlenmesine olanak sağlar.

--separator=ayirac

Şeçili girdileri ayırmak için kullanılan bir ayıraç belirtir.

--print-column=sutun

Hangi sutunun çıktı olarak görüntülenmesini belirlemek için kullanılır. Varsayılan sütun “1” . sütundur.

Aşağıdaki script size nasıl bir “Liste Diyaloğu” oluşturulması husunda yardımcı olacaktır;

#!/bin/sh

zenity --list \

--title="Liste Diyalog" \

--text="Lütfen amacınıza uygun bir kurulum yöntemi seçiniz." \

--column="YÖNTEM" --column="BOYUT" --column="Tanım" \

Normal 350MB "Sadece çok kullanılan bileşenler kurulacaktır." \

Özel Belirlenmedi "Kurulacak öğeleri kullanıcı belirleyecek." \

Tam 500MB "Bilgisayarınıza programın bütün bileşenleri kurulacaktır"

Figür 4 Liste Diyalog Örneği

7-İleti(Mesaj) Diyalogları

Zenity ile dört farklı ileti diyaloğu oluşturabilirsiniz.

Error(Hata), Information(Bilgi) , Question(Soru), Warning(Uyarı)

Dört ileti seçeneğinde de –text seçeneği ile görüntülenecek metini belirleyebiliriz.

7- a)Error Dialog

–error seçeneğini kullanarak hata iletisi oluşturabilirsiniz.

Aşağıdaki script örneği bunu daha iyi açıklayacaktır.

#!/bin/bash

zenity --error \

--title="Hata" \

--text="/etc/wpa_supplicant.conf dosyası bulunamadı!"

Figür 5 Hata Diyalog Örneği

7- b)Bilgi Diyaloğu

–info seçeneğini kullanarak bilgi diyaloğunu oluşturabilirsiniz.

Aşağıdaki script örneği bunu daha iyi açıklayacaktır.;

#!/bin/bash

zenity --info \

--title="Bilgi" \

--text="Kurulum tamamlandı."

Figür 6 Bilgi Diyalog Örneği

7- c)Soru Diyaloğu

–question seçeneğini kullanarak soru diyaloğu oluşturabilirsiniz.

Aşağıdaki script örneği bunu daha iyi açıklayacaktır.;

#!/bin/bash

zenity --question \

--title="Soru" \

--text="Çıkmak istediğinizden emin misiniz?"

Figür7 Soru Diyalog Örneği

7- d)Uyarı Diyaloğu

–warning seçeneğini kullanarak uyarı diyaloğu oluşturabilirsiniz.

Aşağıdaki script örneği bunu daha iyi açıklayacaktır.;

#!/bin/bash

zenity --warning \

--title="Uyarı" \

--text="Dosyayı kayıt etmediniz!"

Figür 8 Uyarı Diyalog Örneği

8-İlerleme Diyaloğu

–progress seçeneğini kullanarak ilerleme diyaloğu oluşturabilirsiniz. Zenity standart dosyadan verileri okurken satır satır okur ve “#” karakterini görünce o satırdaki veri ile durumu günceller. Eğer satır başında sayı da varsa bunu işlemin yüzdesi olarak algılar ve ona göre işlem yapar.

İlerleme diyaloğu aşağıdaki seçenekleri destekler.

--text=text

İlerleme diyaloğunun text kısmına ne yazmamız gerektiğine olanak verir.

--percentage=yuzde

İşlem yüzdesinin nereden başlaması gerektiğini ayarlamamıza yardımcı olur.

--auto-close

İşlem %100 olduğunda işlemi kapatır.

Aşağıdaki script örneği bunu daha iyi açıklayacaktır.;

#!/bin/sh

(

echo "10" ; sleep 1

echo "# Sistem kuruluma hazırlanıyor..." ; sleep 1

echo "20" ; sleep 1

echo "# Dosyalar kopyalanıyor..." ; sleep 1

echo "50" ; sleep 1

echo "Bu satır okunmayacak!" ; sleep 1

echo "75" ; sleep 1

echo "# Sistem yeniden başlatılıyor..." ; sleep 1

echo "100" ; sleep 1

) |

zenity --progress \

--title="Kurulum" \

--text="XYZ programı kuruluyor..." \

--percentage=0

if [ "$?" = -1 ] ; then

zenity --error \

--text="Kurulum İptal Edildi."

fi

Figür 9 İlerleme Diyaloğu Örneği

9-Metin Giriş Diyaloğu

–entry seçeneğini kullanarak metin giriş diyaloğu oluşturabilirsiniz.

Metin girişi diyaloğu aşağıdaki seçenekleri destekler;

--text=metin

text kısmına ne yazmamız gerektiğine olanak verir.

--entry-text=text

Varsayılan olarak metin kurusunun içeisinde ne olması gerektiğini belirtir.

--hide-text

Girilen metinin gizlenmesini sağlar bu özellik parola girişi sırasında kullanılabilir.

Aşağıdaki script örneği bunu daha iyi açıklayacaktır.;

#!/bin/sh

if zenity --entry \

--title="Parola" \

--text="Parola Gir:" \

--entry-text "" \

--hide-text

then echo $?

else echo "Parola girilmedi."

fi

Figür 10 Metin Girişi Diyaloğu Örneği

#!/bin/bash

zenity --entry \

--title="Kullanıcı Adı" \

--text="Kullanıcı Adınızı Giriniz:"

Figür 11 Metin Girişi Diyaloğu Örneği

10-Metin Bilgi Diyaloğu

–text-info seçeneğini kullanarak metin bilgi diyaloğu oluşturabilirsiniz.

Metin Bilgi Diyaloğu aşağıdaki seçenekleri destekler;

--filename=dosya_adi

Metin bilgilendirmesi için kullanılacak dosyanın adını belirlemek için kullanılır..

--editable

Metin Bilgi Diyaloğundaki bilginin düzenlenmesini sağlar.

Aşağıdaki script örneği bunu daha iyi açıklayacaktır.;

#!/bin/sh

FILE=`zenity --file-selection \

--title="Bir dosya seçiniz."`

case $? in

0)

zenity --text-info \

--title=$FILE \

--filename=$FILE \

--editable 2>/tmp/tmp.txt;;

1)

echo "Dosya seçilmedi.";;

-1)

echo "Dosya seçilmedi.";;

esac

Figür 12 Metin Bilgi Diyaloğu Örneği

Evet Zenity’nin kabuk programlama açısından ne kadar önemli bir gui ortamı sunduğunu anlamış olduk. Yararlandığım kaynağı Türkçe’ye çevirirken elbette birçok hata yapmışımdır ama pek çok şeyi deneyerek ve yeni yöntemleri ekyerek yazdığımdan emin olabilirsiniz. Hatta edindiğim yeni bilgileri de mutlaka ekleyeceğimden emin olunuz. Bu konuyu daha derinlemesine anlatacak arkadaşlara başlangıç seviyesinde bir Zenity rehberi hazırlayabildiysem ne mutlu bana. Kaynağı oluşturma aşamasında oluşturduğum dosyalarıda yazının sonuna ekledim inceleyebilirsiniz.

Saygılarımla…

Linux! Özgürlük! Bilgi! Bilim!

Yücel KILIÇ

Referanslar:

http://library.gnome.org/users/zenity/stable/index-info.html.en

Çalışma dosyaları için buraya tıklayınız.

Bu yazının PDF formatını kaşıdan yüklemek için tıklayınız.

Aşağıdaki PDF alıntıdır.Orası da ilk referansın PDF şeklidir.

Click to download the manual in English (PDF)