“KDE Dialogs” ile Kabuk Programlama Mucizesi -1

Sunuş

Bu çalışma ile KDE kullanıcıları için kabuk programlama, daha ilgi çekici ve renkli  hale gelecektir diye düşünüyorum. Daha önce Gnome Masaüstü ortamında “Zenity” ile neler yapılabileceğini ayrıntılı olarak anlatmıştık. Bu çalışma elbette buranın çevirisi niteliğinde fakat tüm örnekler bizatihi denenerek anlatılacaktır. Neden bu çalışma peki? Doğrusunu söylemek gerekirse Ulusal İşletim Sistemimiz Pardusu daha ileriye götürebilmek adına bir şeyler yapabilmek. Hepimize yararlı olacağını umuyorum. Çeviri esnasında elbette hatalar yapmışımdır. Orijinal metinden örnekler geliştirilerek yazılmıştır. Fakat çalışmanın bütünlüğü açısından sözel kısımların küçük bir bölümü çıkarılmış veya tekrar düzenlenmiştir.

Giriş ve Kapsam

Ortalıkta KDE’nin sadece grafiksel bir ortam sağladığı husunda yanlış bir kanı var. Fakat gerçek olan şu ki KDE dikkatleri üzerine çeken inanılmaz bir masaüstü ortamı. Unix’in mirası komut satırı ve kabuk programlama(scripting daha doğru) KDE tarafından oldukça iyi desteklenmektedir. Belirli KDE uygulamaları komut satırı tarafından kontrol edilir ve kabuk programları, KDE bileşenlerinin ayarlarını düzenler.

Bu kılavuzu kullanmak için bazı temel unix/linux komutlarını bilmeniz ve ne yaptığınızı biliyor olmanız gerekmektedir. -Çok zor değildir çok rahat bir şekilde öğrenebilirsiniz. Aksi taktirde direk kabuk>çekirdek ile muhatap olduğunuz için işletim sisteminize ve verilerinize ciddi zararlar verebilirsiniz.(Y.K)- Diğer programlama dillerinde olduğu gibi, etkili kabuk programlama da sağlam bilgi gerektirir. Ancak, verilen örnekleri gerekli önemi vererek incelediğiniz taktirde anlamamanız için hiçbir neden yok. Fakat eğer kabuk programlama konusunda bilginiz var ise çoğu açıklama size lüzumsuz gelecektir.:)

Bu kılavuz GNU bash kabuğunu ve benzer türevlerini kullandığınız farz edilerek hazırlanmıştır. Diğer kabuk kullanıcıları (özellikle csh ve türevleri) verilen örnekleri değiştirmek durumunda kalabilirler.

Kabuk programlama teknikleri ve kullanım çeşidi pek çoktur. Bazen bir betik sadece sistem tarafından çalıştırıldığında bir şey ifade eder.(cron job gibi) Bazen ise betikler, uygulamalar olarak kullanıcılar tarafından çalıştırılır. KDE bazı içeriklerini kabuk betikleri ile kullanmanıza izin verir. Bu bazı uygulamaların içerisine entegre edilerek güvenli çalışma ve ferah bir ortam sunmanıza olanak tanır.

Örnek verecek olursak, parola diyaloğunu göz önüne alalım. Eğer kullanıcının betiğinizde parola girmesi gerekiyorsa, kolayca aşağıdaki diyaloğu oluşturabilirsiniz. ;

Figür 1 Parola Diyaloğu

“kdialog” Kullanımı

Örnek 1: Parola Diyaloğu

Kabuk betikleri içerisinde KDE diyaloğu araçlarını kullanmamızı sağlayan anahtarlar ve kodlar kdialog olarak adlandırılırlar. Parola diyaloğu oluşturmak için aşağıdaki komutları komut satırında kullanabilirsiniz.;

$ kdialog --password "Lütfen sunucu erişim kodunu giriniz:"

Verilen koda biraz daha detaylı bakalım. Kullanılan parametreler kdialog kutusunun yapısını belirliyor. Örneğin –password argumanını kullanarak kdialog’u özelleştiriyoruz. Devam eden parametre ise diyaloğun içerisindeki metinin ne olacağını belirliyor.

Örnek 2: Kabuk Betiğinin Döndürdüğü Değerler

Kdialog’u çalıştırdığınız zaman tıpkı diğer uygulamar gibi komutun sonucu bir değer döndürür. Bu sonuç bazen beklenilen bazen de umulmadık şekilde olur. Geriye dönen değere şu şekilde ulaşabilirsiniz.

$ kdialog --password "Buraya şifre girilecek"

parolacokgizli

$ echo $?

0

  • Not – $? değişkeni verilen her komut sontasında güncellenir. Bu değişkenin o anki sakladığı değere sonra erişebilmek için kaydetmeniz gerekir.

Bu örnekte, geriye dönen değer “0” dır. Eğer “Cancel” veya “OK” butonuna basılırsa bu değer de değişecektir. “Cancel” butonuna tıklandığında dönen değer “1” olacaktır.

  • Not- Bu bileşenler farklı bir yaklaşımla oluşturulmuştur. Eğer Qt bileşenlerine aşina iseniz bu yöntem ve kullanış sizin için biraz tuhaf olabilir. Fakat burada önemli olan  “standart kabuk programlama(shell scripting)” yaklaşımıdır.

Örnek 3: Kabuk Betiğinde Dönen Hatalar

Bu durum sonucunda dönen değer negatiftir, fakat kabuk dönen negatif sayıyı 256 ile toplar. Şöyleki eğer gereken özel bir argümanın eksikliği durumunda sistem -2 değerini döndürür fakat “$?” değişkeninin döndereceği değer 254 olacaktır.

$ kdialog --password "<text>" bulunamadı.

kdialog: Komut satırı seçeneklerine ulaşmak için –help kullanın.

$ echo $?
254

Örnek 4: Parola diyaloğunda Kontrol Değeri Döndürmek

Bu komut betiği ile dönecek değeri kontrol etme imkanınız olacaktır.

Yapacağınız işlem sırası şu şekilde olacaktır;

$ nano kdialogs.sh

/ /Buradan sonra gelecek editöre aşağıdaki betiği yazınız.

#!/bin/bash
kdialog --password "Bu bir deneme betiğidir!"
if [ $? = 0 ]; then
   echo " Tamam butonuna tıkladınız."
else
   echo " İptal butonuna tıkladınız."
fi

Terminalde ;

$ chmod +x kdialogs.sh
$ ./kdialogs.sh
cokgizliparola

Tamam butonuna tıkladınız.

Dikkat ettiğiniz üzere “Tamam” butonuna tıkladığıma “cokgizliparola” da göründü. Çünkü kdialog parola diyaloğuna o değeri girmiştim. Görüldüğü üzere dönen değerler bir şekilde kullanılabilir.

Örnek 5: Parola Diyaloğuna Değeri Yönlendirme

Aslında bu örnekte anlatılan için girilen değerleri bir bir dosyaya çıktı olarak gönderme olarak genellebilir. Şöyleki “>” karakteri ile girilen değeri standar bir çıktı olarak kaydedebiliriz. Örneğe dönecek olursak;

$ kdialog --password "Parola Gir" > parola.dosya
$ cat parola.dosya

Görüldüğü üzere çıktı olarak terminalde cevap almadık. “parola.dosya” içerisine parolamızı göndermiş olduk ve “cat” komutu ile dosyanın içini görüntüledik veee parolamız orada!:)

Örnek 6: Kabuk Değişkeni Kullanarak Parola Diyaloğu

Aslında burada anlatılanlar tamamen kabuk programlama ile alakalı kdialogs sadece arayüz sonuçlarını kullanacağımız bir ortam sağlamaktadır. Yukarıda $? değişkeninden bahsetmiştik ve ileride kullanacağımız zaman kaydetmemiz gerektiğinden bahsetmiştik fakat kabuk değişkenleri kullanarak değerleri betik çalıştığı sürece koruyabilirsiniz.

$ parola=$(kdialog --password "Parola Gir")
$ echo $parola

Komut satırında komutları sıra ile vermektense betik yazacak olursak;

#!/bin/bash
parola=$(kdialog --password "Parola Gir")
echo $parola

Çıktı ;

cokgizliparola

Örnek 7: Parola Diyaloğu Başlık Oluşturmak

Buraya kadar yapmış olduğumuz örneklerin hiçbirinde başlık derdinde olmadık. Fakat –title seçeneği ile diyalog kutusuna başlık ekleyebiliriz. Örneğin;

$ kdialog --title "Bakın Burası Başlık:D" --password "Parola Gir"

Kdialog Diyalog Tipleri

Parola diyaloğu kdialog’u anlayabilmemiz için sunulmuş bir örnekti. Bu bölümde diğer kdialog tipleri argümanları ile birlikte incelenecektir.

Temel Mesaj Kutusu

Temel mesaj kutusu işlev sırasında durum hakkında bilgi vermek için kullanılır. Çeşitli durumlarda, durumun önemine göre (bilgi, uyarı, hata) şeklinde formlar halinde kullanıcıyı yönlendiren önemli temel iletişim diyaloglarıdır. Aşağıdaki örnekler bunu daha iyi açıklayacaktır;

Örnek 8: Bilgi Diyaloğu

$ kdialog --msgbox "Dosya kaydedildi.\n Çalışmanızdan güvenle çıkabilirsiniz."

Figür 2 Bilgi Mesajı Diyaloğu

Örnek 9: Üzgünüm Diyaloğu

$ kdialog --sorry "Parola Hatalı.\n Sunucuya bağlanılamadı."

Figür 3 Üzgünüm Diyaloğu

Örnek 10: Hata Mesajı Diyaloğu

kdialog -error "Sunucuya bağlanılamadı."

Figür 4 Hata Mesajı Diyaloğu

Dönen değerin “0” olma durumudur diyedebiliriz. Bu diyaloğa diğer kdialog tiplerinde olduğu gibi hatanın türüne göre başlık eklemek için –title parametresini de kullanabilirsiniz.

Bunun yanı sıra tutaç(attach) diyaloğunu da kullanabilirsiniz. Bu çalışılan pencerenin en üstüne diyalog bilgisi göndermenize olanak sağlayacaktır. Şöyle ki;

$ kdialog ${WINDOWID:+--attach $WINDOWID} --msgbox "Ben en üst pencerenin de üstündeyim."

Figür 5 Tutaç Diyaloğu

Non-Interrupting Bildirimler

Kdialog pencere olmadan bildirimsel popup diyaloğları kullanılmasını da destekler. Bu özelliğe etkisiz popup(passive popup) denilir.

–pasivepopup belirli bir zaman sürecinde ekranda bir metin kutusu gösterir. Otomatik olarak gösterilen bu bildirim. Belirtilen süre dolduğunda veya kullanıcı üzerine tıkladığında kaybolur.

Örnek 11: –passivepopup diyalog kutusu

$ kdialog --title "passivepopup örneği" --passivepopup "Bu bildirim 10 saniye gösterilecek." 10 

Figür 6 passive popup Diyaloğu

Daha Fazla Mesaj Diyalogları

Bazen temel mesaj diyaloğlarından daha fazlasına ihtiyaç duyarsınız. Belki potansiyel tehlike arzeden bir durum söz konusudur ve kullanıcıya ikinci bir şans vermeniz gerekebilir. Ya da belki onay komutundan daha fazla bilgiye ihtiyacınız olabilir. Kdialog bu tarzda ihtiyacınız olan bir takım araçlar sunar.

–yesno diyaloğu aşağıda görüldüğü gibi muhtemelen bahsettiklerimiz içerisinde en basit olanıdır, tıpkı daha önce bahsedilen basit mesaj diyaloğu gibi. –yesno diyaloğu sadece amaca göre bir metin gerektirir. Şöyleki;

Örnek:12: –yesno Mesaj Diyaloğu

$ kdialog --title "EvetHayır Diyaloğu Örneği" --yesno "Ağa şu an bağlanılamadı.\n Tekrar denemek ister misiniz?"

Figür 7 EvetHayır Diyaloğu

Bu diyaloğun bir diğer varyasyonu ise –warningyesno diyaloğudur ve biraz değiştirilmiş versiyonudur.

Örnek 13: –warningyesno(Uyarı EvetHayır) Mesaj Diyaloğu

$ kdialog --title "Uyarı EvetHayır Diyaloğu Örneği" --warningyesno "Bütün çalışmayı silmek istediğinizden emin misiniz?"

Figür 8 –warningyesno Diyaloğu

Bir başka varyasyonu ise –warningcontinuecancel diyaloğu. Bu diyaloğu da aynı şekilde kullabilirsiniz. Fakat farklılığı şudur ki; kullanım yeri farklı durumlar için daha iyi olabilir.  Şöyle ki;

Örnek 14:  –warningcontinuecancel Mesaj Diyaloğu

$ kdialog --title "Örnek Devam et İptal Diyaloğu" --warningcontinuecancel "Bu işlem çok uzun sürebilir devam etmek istiyor musunuz?"

Figür 9 –warningcontinuecancel diyaloğu

–yesno diyaloğunun bir diğer çeşidi ise butonlara üçüncü seçeneğin eklenmesi ile oluşturulmuş –yesnocancel diyaloğu.

Örnek 15: –yesnocancel Mesaj Diyaloğu

$ kdialog --title "Örnek EvetHayırİptal Diyaloğu" --yesnocancel "Çıkış yapıyorsunuz. \n Öncelikle çalışmanızı kaydetmek ister misiniz?"

Figür 10 –yesnocancel Diyaloğu

Bir de –warningyesnocancel diyaloğunu inceleyelim;

Örnek 16: –warningyesnocancel

$ kdialog --title "Örnek UyarıEvetHayırİptal Diyaloğu" --warningyesnocancel "Çıkış yapıyorsunuz. \n Öncelikle çalışmanızı kaydetmek ister misiniz?"

Figür 11 –warningyesnocancel Mesaj Diyaloğu

Bütün diyaloglarda “$?” değişkeninden dönen değerler şu şekildedir. “Evet”, “Tamam” , “Devam et” istemlerinden dönen değer “0” dır. “Hayır” istemi “1” değerini döndürür. “İptal” istemi “2” değerini döndürür.

Diyalogların Tekrarlanmaması

Bazen diyalogların sürekli bir döngü içerisinde gösterilmesi gerekebilir. Yani diyaloğun tekrar etmesi gerekebilir. Örneğin uygulama her çalıştığında uyarı vermek isteyebilirsiniz. Veya birtakım dosyaların listesini kullanıcıya vermek isteyebilirsiniz. Fakat her dosya için yetki sınırlandırması ile karşılaşabilrsiniz. Yani sürekli tekrar eden bir hata diyaloğu dizisi… Bu kullanıcı için çok kötü bir deneyimdir. Çünkü hata sürekli tekrar edecektir.

KDE’nin normal düzeni ise tekrar eden diyaloğu ileride tekrar gösterip göstermemek için kullanıcı ile anlaşma imkanı sunar. Bunu kontol kutucuğu ve –dontagain seçeneği ile yapar. Bu seçenek bir dosya ismi ve girdi ismi alır ve eğer kullanıcı kontrol kutucuğunu işaretlerse, girdi ve ismi bir dosyaya yazılır.

Bir örnekle ifade edecek olursak; gerekli bir dosyanın bulunaması durumunu varsayalım. Bu durumu Bilgi Diyaloğu Mesajı ile gösterelim.

Örnek 17: –dontagain ile Bilgi Diyaloğu Mesajı

$ kdialog --dontagain myscript:nofilemsg --msgbox "Dosya Bulunamadı."

Figür 12 –dontagain Diyaloğu

Şunu not edin ki, kullanıcı kontol kutucuğunu işaretlediğinde bu bilgi bir dosyaya yazılır. Örneğin;

Örnek 18: –dontagain dosya listeleme

cat ~/.kde4/share/config/myscript
[Notification Messages]
nofilemsg=false

nofilemsg=false ibaresi artık o diyaloğun gösterilmeyeceğini ifade etmekdedir. Gerçekten de ben kontrol kutucuğunu işaretlediğimde komutu tekrar vermeme rağmen ileti gösterilmedi.(YK)

Yukarıda verilen örnekte myscript:nofilemsg ibaresi kullanıldı ve diyalog tekrar gösterilmedi. Bu bütün KDE uygulamalarını etkileyebilir. Bu yüzden dosya ismi verilirken çok dikkatli olunmalıdır..

Kullanıcı Input Diyaloğu

Kullanıcı input diyaloğunun iki temel tipi vardır. Bunlardan biri –inputbox tipi diğeri ise daha önce görmüştük –password tipi. Bakınız “Örnek 1: Parola Diyaloğu”.

–inputbox diyaloğu en az bir parametreye gereksinim duyar, metin diyalog kutusunda olduğu gibi. Örneğin;

Örnek 19: –inputbox diyaloğu

$ kdialog --title "Input Diyaloğu" --inputbox "Kullanıcı adınızı giriniz. "

Figür 13 –inputbox Diyalog Kutusu

Bazen –inputbox diyalog kutusunun varsayılan metinle beraber gelmesini isteyebilirsiniz. Bunun için ikinci bir parametreye ihtiyacınız olacak. Şöyle ki;

Örnek 20: varsayılan metin ile –inputbox diyalog kutusu

$ kdialog --title "Input Diyaloğu" --inputbox "Ne isim kullanmak isterseniz. " "Varsayılan isim "

Figür 14 –inputbox Diyalog Kutusu

Dönen değer “Tamam” seçildiğinde “0” , “İptal” seçildiğinde “1” dir.

Varsayılan olarak gelen bilgi değiştirilmezse standart çıktı olarak gönderilir. Fakat kullanıcı kendi bilgisini girerse, standat çıktı olarak o değer gönderilir. Eğer kullanıcı “İptal” i seçerse hiçbir çıktı gönderilmez. Sadece dönen değer “1” olur.

Yazının Devamı için

“KDE Dialogs” ile Kabuk Programlama Mucizesi -2 linkine tıklayınız.


cokgizliparola