lf267, UNIXBasics: (X)dialog: Konuşan kabuklar
tarafından Katja and Guido Socher
Katja LinuxFocus'un Almanca kısmının editörüdür. Tux'dan, film ve fotoğraflardan ve denizden hoşlanır. Katya'nın kişisel sayfasına buradan ulaşabilirsiniz.
Guido uzun zamandır bir Linux hayranıdır çünkü dürüst insanlar tarafından tasarlandı ve herkese açık. Bu, açık kaynak dememizin nedenlerinden birisidir. Guido'nun görselyöre sayfasına linuxfocus.org/~guido.
Xdialog ve dialog nereden elde edilebilir?
(X)dialog: Konuşan kabuklar
Xdialog ve dialog, kabuk programlarınızı grafik arayüzler ile geliştiren klasikleşmiş iki araçtır.
Yazıyı anlayabilmek için biraz kabuk programlama bilgisine gereksiniminiz olacaktır. Kabuk programlamanın temmelleri hakkında biraz daha fazla öğrenmek için Kabuk Programla yazısını okuyabilirsiniz.
UNIX kabuk ortamı tek başına bile oldukça üretken bir ortamdır ve grafik arayüzler olmadan da çok güzel çalışmaktadır.
Ancak bazı durumlarda, kullanıcı ile iletişimde bulunmak için grafik arayüzler önem kazanmaktadır. Sözgelimi, bir programı yüklemek için kullanıcının, yüklenecek dizin, çeşitli seçeneklerden seçim yapması gibi bazı seçimler yapması gerekebilir ve bunlar için bir yükleme arayüzü kullanılabilir.
Xdialog ve dialog kullanarak, grafik arayüzlerinizi kısa kabuk programlar yazarak tasarlayabilirsiniz. Dialog, terminal (metin ortamı), Xdialog ise, X11 pencere sistemi tabanlı programdır.
Aşağıdaki satırları kobuk penceresi ortamına (xterm, konsole ...) veya bir kabuk programı dosyasına yazabilirsiniz:
Oluşan kutu, aşağıdaki gibi gözükecektir:
Xdialog yerine dialog kullanmak isterseniz, ikinci satırdaki X karakterini kaldırmanız yeterlidir. Buna göre xterm penceresinin içinde, başka bir pencere açmadan çalışan, curses tabanlı bir uygulama elde etmiş olursunuz. Bazı durumlarda kabuk programları için dialog kullanmak daha elverişli olabilir, çünkü kabuk programları terminal ortamında çalışmaktadır. Özellikle de, doğrudan IP yönlendirilmesi (routing) olmayan ve birkaç bilgisayar uzakta bulunan bir bilgisayarda programı çalıştırmak daha uygun olmaktadır. Bu durumda dialog ile yazılmış program çalışacaktır, ancak bir X11 uygulaması olan Xdialog programını çalılşmayacaktır.
Yukarıdaki dialog/Xdialog kullanan program oldukça kullanışsızdır, ancak çok basit bir grafik programın nasıl kolay bir şekilde yazılabileceğini göstermesi açısından güzel bir örnektir. Takvim, menü, dosya yöneticisi, gelişim çubuğu (progres bar), yazı girişi, mesaj, geçişsözcüğü vs. gibi çok ilginç dialog kutular vardır.
komutunu çalıştırarak, varolan dialog kutularının listesini elde edebilirsiniz. Xdialog'un dialog'a göre biraz daha fazla seçeneğe sahiptir.
Dialog kutuları komut satırından yapılandırılmaktadır.
Xdialog veya dialog yazdıktan sonra, kullanmak istediğiniz kutunun adını ve ardından ona uygun parametrelerini yazmanız gerekmektedir.
yesno kutusu 3 parametre almaktadır. <height> ve <width> parametrelerine sıfır verebilirsiniz. Bu durumda, kutunun geometrisi otomatik olarak, yazının büyüklüğüne göre ayarlanacaktır. Seçimden elde edilen sonuç çıkış değeri olarak verilmektedir ve kabuk içerişinden "$?" değişkeni aracılığı ile elde edilebilir. Seçilen isimler gibi birdan fazla geri gönderilmesi gereken değer varsa, geridönüş değerleri standart hata aygına yazılmaktadır. Standart hata aygıtına yazılanlar genellikle ekrana yazılmaktadır. Ancak, "2>" yönlendirilmesi kullanılabilir.
Çok basit ve bir o kadar da kullanışlı bir çözümdür.
Şimdi, Xdialog/dialog'un normal kabuk programlarına göre nasıl üstünlük sağladığını gösteren gerçek bir uygulama yazalım. Yazacağımız program, bir menüden çeşitli İsternet Servis Sağlayıcılarını seçen ve bağlantı sağlayan bir program olacaktır. Bu program Mart 2001'de yayınlanan İnternet erişiminiz için farklı ISS'lerin kullanımı yazısındaki ppp-on/ppp-off betiklerine gereksinim duymaktadır. Kabuk programının adı pppdialout dır ve bağlı olup olmamanıza göre farklı menüler görüntülemektedir.
Betik nasıl çalışmaktadır?
İlk olarak error ve help gibi bazı fonksiyonlar tanımlıyoruz. Daha sonra komut satırından verilen parametreler denetlenmekte ve geçici bir dosya (/tmp/pppdialout.$$) için isim tanımlanmaktadır. $$ çalışmakta olan sürecin (programın) süreç numarasıdır ve her bilgisayarda bu numara tekil olarak belirlenmektedir. Program anormal olarak kesildiğinde, sözgeşimi crtl-C tuşlarına basarak, trap ile belirtilen kısım çalıştırılmaktadır. Bizim örneğimizde geçici dosya burada silinmektedir. Daha sonra bağlı olup olmadığımızı denetlemekteyiz (/sbin/ifconfig | grep '^ppp'). Eğer, bağlı isek, yukarıda da gördüğünüz gibi bir yesno kutusu ekrana gelmektedir ve kullanıcıya bağlantıyı kesmek isteyip istemediği sorulmaktadır. Eğer, henüz bağlı değilsek, bir menü kutusu ekrana getirilmektedir. Varolan tüm İSS'cılarının isimlerini /etc/ppp/peers dosyasına bakarak elde etmekteyiz. Menü kutusunun yazılış biçimi:
dır. <height>, <width> ve <menu height> değerleri sıfır olarak verilmistir (Yani boyutlar otomatik olarak ayarlanmaktadır. Yukarıya bakınız.). Daha sonra programa (<tag1> <description>) çiftlerini yazmak gereklidir. Bizim program için açıklamaya (description) gerek yoktur, o yüzden herhangibir şey yazmak mümkündür (Biz == yazdık.) isplist değişkenindeki veri aşağıdaki gibi olacaktır:
Kullanıcının seçimi (X)dialog tarafından standart hata aygıtına yazılacaktır. "2> $tmpfile" komutu, bunu tmpfile dosyamıza yönlendirmiş olacaktır. Menü kutusu ayrıca cancel (iptal) tuşuna basma olasılığı sunmaktadır. Dolayısıyla, hangi tuşa basıldığını öğrenmek için $? (çıkış durum bilgisi) değerine bakmamız gerekmektedir.
Bu kadar teori yeter. İşte programın görünüşü
... Xdialog ile GTK GUI:
... terminalde curses tabanlı dialog ile:
Size bir uygulamamız daha var. Adı mktgz dir ve Xdialog'un checklist (seçim listesi) kutusunu kullanmaktadır. Terminalde çalışan dialog programının checklist yoktur. Dolayısıyla, program sadece Xdialog ile çalışmaktadır. mktgz programını tar.gz paketleri oluştrmak için kullanabilirisniz.
Bu komut bulunduğunuz (".") dizindeki tüm dosyları görüntülemektedir ve bunların arasından hangilerini yourpackage.tar.gz paketine almak istiyorsanız, onları seçmeniz mümkün. Programı buradan (mktgz.txt) elde etmeniz mümkündür. Programı satır satır anlatmayacağız, çünkü artık onu anlayacak kadar öğrenmiş olmalısınız.
Xdialog ve dialog programları "samples" adında örnek programların bulunduğu dizinle birlikte gelmektedir. Burada daha fazla örnek bulabilirsiniz (RedHat 7.3'te bu dizin /usr/share/doc/Xdialog-2.0.5/samples dır.). Ancak, bunları kullanırken dikkatli olun, çünkü bunların bazıları gerçekten birşeyler yapmaktadır ve sırf gösteriş (demo) uygulamaları değildir.
Xdialog ve dialog birçok farklı dialog kutuları sunmaktadır. Hertür kabuk betiğinde bunların hepsi kullanıma uygun değildir. Kabuğun kendisi zaten çok "güçlü" bir ortamdır. Yoltanımını tab'lar ile tamamlamak, GUI (Grafik Uygulama Arayüzü) den seçmekten daha hızlıdır. Özellikle kabuğun boru (pipe) özelliğini kullanarak, bir komutun çıktısını başka komutu girdisi olarak verebilme özelliği çok güçlü bir araçtır. Yani şöyle birşey:
(UNIX kabukları ile tecrübesi olmayanlar için açıklama: Bu komutlar file.txt dosyasındaki "somestring" i içeren tüm tekil satırları saymaktadır.
Bu şekilde borulama kullanabilmek, tüm komutların komut stırından verilen parametreler ile denetlenmesinden dolayı mümkün olmakatdır. Başka bir deyişle, bu komutlar durup, kullanıcıdan nasıl devam etmeleri gerektiğine ilişkin sorular sormamaktadır.
Ancak, grafik arayüzlü uygulamalarının daha fazla kullanışlı olduğu durumlar da vardır. Xdialog ve dialog'un kullanımı oldukça basittir, ancak bunlar gerçek grafik arayüzlü uygulamalar kadar güçlü değildir. Bunlar, sadece ASCII olan uygulamalar ile grafik arayüzlü uygulamalar arasındaki açığı kapatmaktadır.
Xdialog ve dialog programlarını bulmak için ilk bakacağınız yer, kullandığınız Linux dağıtımının CD'leri olmalıdır. Belkide sizteminizde yüklü bile olabilirler (Bilgisayarınıza sorun: rpm -qil Xdialog, dpkg -L Xdialog). Xdialog sanaldoku yöresi
dir. dialog'un sanaldoku yöresi
dir. Dolayısıyla dialog/Xdialog programlarını buralardan da elde edebilirisiniz.
Xdialog belgeleri: http://www.chez.com/godefroy/doc/index.html
Diğer LinuxFocus yazıları:
İnternet erişiminiz için farklı ISS'lerin kullanımı
2003-03-05, generated by lfparser version 2.31