[Gelistirici] XAUTHLOCALHOSTNAME

Fatih Aşıcı fatih at pardus.org.tr
24 Oca 2009 Cmt 20:15:07 EET


Selamlar,

Normalde X oturumu açık olduğu sırada hostname değişirse mevcut cookie önceki 
hostname için üretildiğinden uygulamalar X'e bağlanamıyor. Biz de (SUSE'den 
aldığımız bir çözüm) bu sorunu aşmak için $SUBJECT'de yer alan çevre 
değişkenini kullanıyoruz. X ve KDE paketlerinde bu iş için yaptığımız yamalar 
var. Bu değişken X açıldığında cookie'lerin oluşturulduğu hostname'i tutuyor. 
Herhangi bir uygulama X'e bağlantı kurmak istediğinde önce bu çevre 
değişkenine bakıyoruz ve izin vermesini sağlıyoruz. hostname değişse bile bu 
değişken değişmeyecek nasıl olsa.

Kullandığımız yöntem birçok paketin yamalanmasını gerektiriyor. Üstelik 
upstream'in de kabul edeceği bir yöntem değil. Yamaların backport edilmesi 
ayrı bir iş yükü. Üstelik yetkilendirme gibi önemli bir konuda dikkatli olmak 
da gerekiyor.

Diğer dağıtımlar bu işi nasıl yapıyor diye öncelikle Fedora'dan incelemeye 
başladım. Fedora bu sorunu her X oturumu açıldığında aşağıdaki komutu vererek 
çözmüş:

[ -x /usr/bin/xhost ] && [ -x /usr/bin/id ] &&
    xhost +si:localuser:`id -un` >& /dev/null

Bu komut verildiğinde access control listesi aşağıdaki gibi oluyor:

fatih at inspiron ~ $ xhost
access control enabled, only authorized clients can connect
SI:localuser:fatih

Buradaki SI, Server Interpreted anlamına geliyor. fatih ise efektif kullanıcı 
adı. Ayrıntılar için xhost ve Xsecurity man sayfalarına bakılabilir. Kısacası 
bu entry fatih adlı yerel kullanıcısının her halükarda oturum açtığı X'e 
bağlanmasını sağlıyor. Mevcut cookie'ye bakılmıyor bu durumda. Şu şekilde test 
edebiliriz:

$ xhost
access control enabled, only authorized clients can connect
$ XAUTHORITY= xclock
No protocol specified
Error: Can't open display: :0.0
$ xhost +SI:localuser:fatih
localuser:fatih being added to access control list
$ XAUTHORITY= xclock
(xclock çalışır)

Burada XAUTHORITY'yi boş bırakma amacım cookie'lerin kullanılmasını 
engellemek. Görüldüğü gibi eklediğimiz bu entry hostname'den bağımsız olarak 
X'e bağlanabilmeyi sağlıyor. Geriye kalan bir sorun daha var. hostname bağımlı 
bir çevre değişkenimizi var: SESSION_MANAGER

$ echo $SESSION_MANAGER
local/inspiron:@/tmp/.ICE-unix/2191,unix/inspiron:/tmp/.ICE-unix/2191

(inspiron hostname burada)

Uygulamalar bu çevre değişkenini oturum yöneticisine bağlanmak için kullanıyor 
(XSMP protokolü gereği). Eğer hostname değişirse uygulamalar başlarken 
aşağıdaki gibi bir uyarı veriyor:

_IceTransSocketUNIXConnect: Cannot connect to non-local host inspiron
_IceTransSocketUNIXConnect: Cannot connect to non-local host inspiron
Warning: Tried to connect to session manager, Could not open network socket

Fedora bu sorunu SESSION_MANAGER çevre değişkeninde hostname yerine unix 
kullanarak çözmüş. Yani:

local/unix:@/tmp/.ICE-unix/2191,unix/unix:/tmp/.ICE-unix/2191

gibi. Bunu nasıl değiştiririz henüz bakmadım. ksmserver koduna falan bakmak 
lazım.

Eğer Fedora'nın yöntemini kullanırsak söz konusu yamalardan kurtulmuş, üstelik 
şu an yaşamakta olduğumuz bazı X'e bağlantı sorunlarını da çözmüş olacağız 
(phoronix-test-suite'de ve başka bir java uygulamasında karşılaştığım X'e 
bağlanamama sorunu, sudo ile X'e bağlanamama gibi sorunlar).

2009'da bu yönteme geçmek ve XAUTHLOCALHOSTNAME'i kaldırmak istiyorum. 
Görüşler, öneriler?

-------------- sonraki bölüm --------------
A non-text attachment was scrubbed...
Name: kullanılamıyor
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://liste.pardus.org.tr/gelistirici/attachments/20090124/4f7e8586/attachment-0002.pgp>


Gelistirici mesaj listesiyle ilgili daha fazla bilgi