9 Mart 2011 Çarşamba

Enlightenment'ın kapıları: Elsa


Hepimizin kullandığı, ama işlevini fazlasıyla hafife aldığımız bir parça var sistemlerimizde: Giriş yöneticileri. Hani şu kullanıcı adımızı ve parolamızı girdiğimiz, tek işlevi parolamızı sormaymış gibi gördüğümüz uygulamalar. Pardus KDE paketine dahil kdm yi kullanıyor, biz ÇoMaK ekibi olarak Bonobo imajında lxde projesinin lxdm giris yöneticisini kullanmıştık. İş Enlightenment ile çalışan bir versiyon hazırlamaya geldiğinde, aynı şekilde davranmanın pekte kolay olmayacağını en baştan anlamıştık. Enlightenment ekibi, diğer Enlightenment kullanan dağıtımlarda sıkça gördüğümüz giriş yöneticisi olan Entrance yazılımından tamamen vazgeçmiş ve kullanılmasını tavsiye etmiyor, buna karşılık yerine geliştirdikleri elsa ise çok yeni, neredeyse hiçbir dağıtım tarafından kullanılmamış (sadece "unity" de bir paketini görebildik). Cesurca bir kararla elsa'yla yolumuza devam etmeye karar verdik. İlk imajımızı hazırlayıp hata ayıklamaya başladığımızda polkit-gnome'un çalıştırılamadığını gördük. Önce polkit'in açık olan oturumu tespit etmek için ConsoleKit adında bir uygulamayı kullandığını ve bizim ConsoleKit'e göre oturum açmamış olduğumuzu gördük, ardındanda bu sorunun elsadan kaynaklandığını farkettik. Linux, her ne kadar bizler bu şekilde kullanmasak da, birden fazla kişinin aynı anda oturum açabildiği, çok kullanıcılı bir işletim sistemi çekirdeği. Peki sizin bu kişilerden hangisi olduğunuzu, yetkilerinizi vs. nerede nasıl tutuyor? ConsoleKit bu noktada araya giriyor, ConsoleKit, giriş yöneticileri aracılığıyla açılan oturumdan haberdar ediliyor, yine linux'ta çalışan bütün süreçler başka bir süreçten türediğinden, bunun takibi ile her çalıştırılan süreç otomatik olarak açılan oturuma bağlanmış oluyor. Ama elsa ConsoleKit destekli değil, yani ConsoleKit'e yeni bir oturumun başladığını iletmiyor. ConsoleKit incelenirse içerisinden üç çalıştırılabilir dosya çıktığı görülebilir:

ck-list-sessions
ck-launch-session
ck-history

ConsoleKit içerisinde, ConsoleKit oturumu başlatmak için gereken işlemleri yapan ck-launch-session komutuna sahip, ancak bu komut çalıştırıldığı ortamı değil, parametre olarak alıp çalıştırdığı uygulamayı oturum bilgisine bağlıyor. Az önce söylediğim gibi, linux her sürecin başka bir süreçten doğması şeklinde çalışıyor, bu durumda bizim işlemlerimiz nereden doğuyor olabilir? Tabii ki bütün işlemlerimizi üzerinde yaptığımız masaüstü ortamı, bu örnek için Enlightenment. Evet, bugün yayınladığımız imajlar, bu yöntemle ConsoleKit'e kayıt edilen oturumlar sayesinde polkit-gnome'u çalıştırıyor. Ancak Bu yöntemin bütün sorunların çözümü olmadığını tahmin edersiniz. ConsoleKit geliştiricileri, ssh gibi yöntemlerle, bilgisayara dışarıdan bağlanmış kişilerin ayırt edilebilmeleri için bazı yöntemler kullanmışlar. Bu sayede bu kimselerin yetki kısıtlamalarını aşamamaları hedeflenmiş. Tabi bu durumda bu kişilerin ck-launch-session kullanarak yerel kullanıcılar gibi oturum başlatmaları da istenmeyen bir durum olduğundan, bu oturumlar yerel olmayacak şekilde başlıyor. Bu sorunun çözümü için öncelikle ConsoleKit belgelendirmesine başvurduk, ancak gördük ki projenin belgelendirme yönü çok zayıf. Bu durumda diğer giriş yöneticileri neler yapmışlar bunu kontrol etmeye başladık. Gentoo için, xdm ye ConsoleKit desteği ekleyen bir yama hazırlanmış. Ayrıca lxdm için de subversion kayıtları aracılığıyla kullanılan yöntemleri bulabildik. Bu yöntemler uygulamanın diğer işlemlerini içine alacak şekilde yapıldığından aynı kod parçaları ile elsa'nın çalışmasını sağlamak mümkün değil ama en azından kullanılacak fonksiyonları ve parametrelerini öğrenmiş olduk. Bu foksiyonları, bir oturumu kayıt edecek şekilde başlatabilmek için elsa'da gerekli değişiklikleri yaptık, ConsoleKit için bir oturum açılmasını sağlamayı başardık, ancak açılan oturumun, elsa'nın başlattığı oturum için geçerli olmaması sorununu henüz çözemedik. ConsoleKit bizi yerel olarak kabul etmediğinden, yetkilerimizi bazı uygulamalar otomatik olarak alamıyor. Bunun bir yan etkisi olarak, ağ yöneticisi uygulaması, açılış sürecinde otomatik olarak başlatılamıyor. Şu anda bu sorunun çözümü için çalışıyoruz.

Hiç yorum yok:

Yorum Gönder