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
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"
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ı!"
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ı."
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?"
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!"
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.