4 Eylül 2008 Perşembe

OpenVPN Kurulumu

VPN nedir?

İnternet üzerinden her hangi bir yere bağlandığımızda (web sayfası, dosya alış-verişi, sohbet vb.) aradaki veri akışı paketler halinde olur. Bu paketler ağ şeklinde düzenlenmiş İnternet alt yapısı üzerinde bir çok nokta üzerinden atlayarak gideceği yere varır. Bu noktaların her birinde paket içeriği görüntülenebilir ve hatta içeriği değiştirilebilir.

Bankacılık gibi parola girilmesi gereken 'hassas' sayfalarda bilgi güvenliğinin sağlanması amacı ile SSL (Secure Socket Layer - Güvenli Bağlantı Katmanı) adı verilen bir sistem kullanılır. Web tarayıcının adres çubuğunda kilit resminin göründüğü sayfalarda bu sistem uygulanıyor ve bilgi güvenliğiniz sağlanıyordur. SSL sistemi gidip gelen verilerin sadece gönderenin veya alanın açabileceği şekilde şifrelenmesini ve böylece ara noktalarda verinin erişilememesi ilkesine dayalı çalışır.

Yerel ağ birbirine yakın mesafedeki bilgisayarlar için kullanılan bir kavramdır. Daha doğru bir tanımla cihazlar arasında verilerin geçtiği bütün noktaların tüm erişim haklarının tek bir kişi/kurum tarafından yönetildiği ağlara yerel ağ diyebiliriz. Yani aynı yerel ağda bulunan iki cihaz arasında yapılan bilgi alış verişi (ağda bir sorun olmadığı sürece) yabancı kişiler tarafından görülemez. Burada şu açıklamayı yapmam gerekiyor: Aynı yerel ağda bulunan cihazlar İnternet üzerinden erişilebilecek sunucular üzerinden bağlantı kurabilirler. Örneğin bir çok sohbet programı bu mantık ile çalışır. Bu durumda bilgi ağ dışına çıktığı için görülebilir olmaktadır.

VPN kavramı Virtual Private Network yani Sanal Özel Ağ, kısaca İnternet üzerinden istediğiniz yerel ağa, şifreli ve güvenli olarak bağlanabilme kavramının adıdır. Yani VPN kullanıldığında İnternet'e bağlı her hangi bir noktadan, ayarları daha önce yapılmış olan, her hangi bir yerel ağa güvenli bir biçimde bağlanılabilir. Böylece veri güvenliği kaygıları yaşamadan yerel ağın kaynaklarına (Ağ yazıcısı, kurum içi web/dosya sunucusu, VoIP telefon sistemi v.b.) İnternet üzerinde her hangi bir yerden erişilebilir.

VPN ile bir noktaya şifreli olarak bağlandıktan sonra bütün İnternet bağlantılarınızı bağlandığınız cihaz üzerinden yapabilirsiniz. Özellikle açık kablosuz bağlantı noktalarında güvenliğinizin sağlanması için bu yöntemi seçebilirsiniz. Bu yöntemi kullandığınızda sizin bilgisayarınız ile bağlandığınız cihaz arasında bir tünel oluşturulacak ve İnternet'e sanki bu tünelin ucundan ulaşıyormuşsunuz gibi olacaktır. Yani bağlandığınız noktaya kadar bütün veriler şifreli gidecek, eğer bağlanılan sunucu, açılan sayfa şifreleme istemiyorsa, VPN ile bağlandığınız noktadan sonra şifresiz olacaktır.

VPN kurmak için kullanılan yöntemlerden sık kullanılan ikisi:

• IPSec (Internet Protokol Güvenliği)

• SSL/TLS

İkisi arasındaki temel fark şifrelemenin gerçekleştirildiği taşıma seviyesidir. Daha detaylı bilgi için [2] 'ye bakabilirsiniz. Şu anda söyleyebileceğim nadir de olsa IPSec paketlerinin bazı yönlendiriciler üzerinden geçerken sorun çıkarabildiğidir.

VPN teknolojileri neredeyse bütün işletim sistemleri için kullanılabilir durumdadır. Ubuntu için de bir çok alternatif vardır. Bu alternatiflerden biri olan openVPN'i biraz inceleyelim. openVPN Ubuntu'nun yanında neredeyse bütün işletim sistemlerinde çalışmaktadır.


Kurulum

openVPN Ubuntu'nun universe (katkı) depolarında bulunmaktadır. Bu depoyu kullanıyorsak uçbirimden;

$ apt-get install openvpn


komutunu vererek ya da apt://openvpn bağlantısına tıklayarak openvpn'i kurabiliriz.


openVPN Nasıl Çalışır?

Çok fazla kuramsal bilgiye girmeden kısaca açıklamaya çalışayım: openVPN'i kurduğunuz ve çalıştırdığınız zaman sisteminize tun0 adında bir ağ ara birimi daha eklendiğini görürsünüz. Bu sanal bir ağ ara birimidir. Bu ara birim üzerinden gönderilen paketler şifrelenerek kullanımda olan gerçek ağ ara birimlerine aktarılırlar.

OpenVPN iki farklı veri katmanında çalışır: Katman 2 ve katman 3. Biraz ileri düzeyde bilgi gerektiren bu kavramları kısaca açıklamaya çalışayım. Katman 2 bir birine 1. dereceden (anahtar ya da hub kullanarak) bağlı bilgisayarların bağlanma şeklidir. IP adresleri olmasına karşın iletişim cihazlarının MAC yani fiziksel adresleri kullanılarak yapılır. Katman 3 ise (bu uygulama özelinde) IP adreslerinin birbirine yönlendirilmesi ile kurulan bir iletişim biçimidir. Örneğin yönlendiriciler birbirleri ile bu katmanda haberleşirler. openVPN paketleri 2. ya da 3. katmandayken alıp şifreleyebilir. Ne yaptığınızı bilmiyorsanız 3. katmanı kullanmanız tavsiye edilir.

openVPN kurulumu sunucu - istemci ve noktadan noktaya (p2p) olmak üzere iki şekilde yapılabilir. noktadan noktaya yalnızca iki cihaz arasında güvenli bağlantı kurulmak isteniyorsa tercih edilebilir. TLS sertifikaları oluşturulmadan, yalnızca bir parola ayarlanıp, bağlantının iki ucuna da girilerek bağlantı kurulabilir. Sertifika kullanımından daha güvensizdir. Sunucu - istemci modeli ise adından da anlaşılabileceği üzere bir sunucu ve birden fazla istemciden oluşabilir. Böylece ikiden fazla cihazın birbirine güvenli yoldan bağlanabilmesi sağlanır. İstemci olan bütün cihazlar sunucuya bağlanırlar ve eğer izin verilirse aralarındaki iletişim sunucu üzerinden yapılır. Her istemci ve sunucu arasında bağlantı yapılırken sertifika kontrolü yapılır.


openVPN ayarları

openVPN ayarları bir dosyaya düz metin halinde kaydedilir ve program çalıştırılırken ayarları bu dosyadan alması söylenir. MS Windows üzerinde ayarlar .ovpn soyadlı dosyalara kaydedilir.

Parola Korumalı

İlk olarak daha kolay olan noktadan noktaya - p2p tünel oluşturmak için gerekli kısa ayarlara bakalım.

Öncelikle iki cihazın birbirini tanımasını sağlayacak parolayı (anahtarı) üretmemiz gerekiyor. Bunun için:

$ openvpn --genkey --secret parola.key

komutunu veriyoruz. Bağlantı için gerekli olan parola parola.key dosyası içerisinde oluşturuldu. parola.key dosyasını diğer bilgisayara güvenli bir şekilde ulaştırmamız gerekiyor. Eğer bu dosya başka birinin eline geçerse güvenli ağımıza dahil olabilecektir. Şimdi birbirine bağlanacak cihazlardan birini sunucu, diğerini ise istemci olarak atamamız gerekiyor. Aşağıdaki ayarları birer metin dosyasına yazıp, ilgili cihazlara ait parola.key dosyası ile aynı dizin içerisine koymamız gerekiyor.

Sunucu olacak cihaz için ayar dosyası (sunucu.conf):

dev tun

ifconfig 10.8.0.1 10.8.0.2

secret parola.key


istemci olacak cihaz için ayar dosyası (istemci.conf):


remote sunucu.adresi

dev tun

ifconfig 10.8.0.2 10.8.0.1

secret parola.key


sunucu.adresi 'ni sunucunun IP veya alan adı adresi ile değiştirmeniz gerekir. İstemci, sunucuya UDP 1194 portundan erişmeye çalışacaktır. Eğer sunucu bir NAT, firewall ya da ADSL modem arkasındaysa bu portun sunucuya yönlendirilmesi gerekmektedir. Her bir ayar dosyasındaki ifconfig satırlarının ilki cihazın ip adresi, ikincisi de karşıdaki cihazın ip adresi olarak atanacaktır. Sunucu üzerinde

$ openvpn sunucu.conf


komutunu, daha sonra istemci üzerinde

$ openvpn istemci.conf


komutunu verdiğiniz zaman iki cihazın birbirine bağlanması gerekir. İstemci üzerinden

$ ping 10.8.0.1


komutunu vererek bağlantıyı test edebilirsiniz. (Eğer ping isteklerine yanıt gelirse, bağlantı çalışıyor demektir.)

Daha fazla bilgi için: http://openvpn.net/index.php/documentation/miscellaneous/static-key-mini-howto.html adresine bakmanızda fayda var.

Sertifikalı Bağlantı

Birden fazla bilgisayarın birbirine bağlanabilmesini sağlamak ve güvenliği artırmak için sertifikalı bağlantıların seçilmesi daha uygun olacaktır.

Sertifikalı bağlantılar çalışma biçimleri özetle şöyle açıklanabilir: Her bir cihazın sertifikası tek bir sertifika otoritesi (certificate authority - CA) tarafından imzalanır. Bağlantı kuracak taraflar birbirlerine sertifikalarını gönderirler. Sertifikayı alan taraf sertifika otoritesine bakarak sertifikanın gerçek olup olmadığını anlar. Eğer sertifika gerçekse, bundan sonra gönderilen veriler bu sertifika (kamu anahtarı) kullanılarak şifrelenir. Ve şifrelenmiş bu veriyi, yalnızca sertifika sahibi yani özel anahtarı bulunduran kişi açabilir.

Sertifika otoritesi olan kuruluşlar vardır. Özellikle e-ticaret, bankacılık gibi uygulamalarda güvenliğin arttırılması için sertifikalar bu tür kuruluşlara onaylatılmalıdır. Fakat bizim kuracağımız sistem kontrolümüz altında olacağı için sertifika otoritesinin de biz olmamızda bir sorun yoktur.

Yapacağımız işlemler:

• Sertifikalar için parametreleri belirlemek
• Sertifika Otoritesi (CA) dosyasını oluşturmak.
• Sunucu için sertifika oluşturma.
• İstemci için sertifika oluşturma.
• Ayar dosyalarının düzenlenmesi.

openVPN içerisinde sertifikaların daha kolay oluşturulabilmesi için hazırlanmış bazı kodlar vardır. Bu kodlar Ubuntu içinde /usr/share/doc/openvpn/examples/easy-rsa/ dizininde bulunurlar. 2.0 sürümünü aşağıdaki komut ile kendi dizininize kopyalayıp gerekli anahtarları oluşturmaya başlayabilirsiniz.

(not: Dosyaların bütünlüğünün korunabilmesi açısından bundan sonraki işlemlerin sunucuda gerçeklenmesi önerilir. Fakat şart değildir.)

$ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0 ~/easy-rsa
$ cd ~/easy-rsa


(not: bu noktadan sonra yapacaklarımızı dizinin içindeki README dosyasından da takip edebilirsiniz)

Dosyalar kopyalandıktan sonra easy-rsa dizinine giriyoruz. vars dosyasını bir metin düzenleyici ile açarak gerekli değişiklikleri yapıyoruz. Bir çok ayarı değiştirmeniz gerekmez. Dosyayı gözden geçirin, eğer özel bir durumunuz yoksa yalnızca dosyanın sonundaki ön tanımlı değerleri değiştirmeniz yeterli olacaktır. Bu değerler her bir sertifikanın içine gömülecek verilerin daha hızlı girilebilmesine yardımcı olurlar. Her bir sertifika için farklı bilgiler girebilirsiniz. Değişiklikleri yaptıktan sonra kaydedin ve çıkın.

$ . vars
$ ./clean-all


komutlarını vererek, değişkenleri işler hale getiriyoruz ve anahtar dizinimizi oluşturuyoruz. Anahtar dizini, eğer vars dosyasını değiştirmediyseniz, ~/easy-rsa/keys dizini olacaktır. Bundan sonra üreteceğimiz bütün dosyaları (anahtarlar ve sertifikalar) bu dizinde bulacağız. Şunu aklımızda tutmakta fayda var: Bu dizin içinde oluşturulacak .key soyadlı dosyalar gizli ve hususi dosyalardır, özel anahtarları ihtiva ederler. .crt soyadlı dosyalar ise dağıtılabilirler.

Sırası ile aşağıdaki komutları veriyoruz.

$ ./build-dh
$ ./pkitool --initca
$ ./pkitool --server iyiSunucu
$ ./pkitool istemci1


Verdiğimiz komutları açıklayayım:

  1. Sertifikaları ve anahtarları oluşturmadan önce karşılıklı şifrelemenin gerçekleşebilmesi için bazı parametrelerin belirlenmesi gerekmektedir. Bu değişim parametreleri Diffie Hellman adı verilen teknik ile sağlanmaktadır.
  2. CA sertifikasını ve anahtarını oluşturur.
  3. Sunucu için gerekli sertifika/anahtar çiftini oluşturur. Sunucumuzun adı bundan sonra iyiSunucu olarak anılır.
  4. istemci1 istemcisi için gerekli sertifika/anahtar çiftini oluşturur.

Böylece, CA, sunucu ve istemci için sertifika/anahtarı oluşturmuş olduk. Bundan sonra her hangi bir istemci için sertifika/anahtar üretmek için:

$ . vars
$ ./pkitool istemciAdı


komutlarını vermek yeterli olacaktır. Dikkat edilmesi gereken oluşturma işlemi sırasında keys dizini altında ca.key ve ca.crt dosyalarının bulunmasıdır. Bütünlüğü bozmamak ve dosyaların taşınarak güvenliklerinin tehlikeye atılmaması için bütün oluşturma işlemlerinin tek bir bilgisayar üzerinde yapılması tavsiye edilir.


Ayar Dosyaları

Sertifikalar oluşturulduktan sonra bu sertifika ve anahtarları kullanacak ayar dosyalarının da yaratılması gerekmektedir. Örnek ayar dosyalarının birer kopyasını /usr/share/doc/openvpn/examples/sample-config-files/ dizininde bulabilirsiniz. client.conf ve server.conf.gz dosyalarını uygun bir dizine kopyalayıp, gz'yi açtıktan sonra server.conf dosyasını sunucu.conf ve client.conf dosyasını istemci1.conf olarak kopyalayalım ve sunucu.conf dosyasını ayarlamakla işe başlayalım.

$ mkdir ~/openvpn
$ cd ~/openvpn
$ cp /usr/share/doc/openvpn/examples/sample-config-files/{client.conf,server.conf.gz} .
$ gunzip server.conf.gz
$ cp {server,sunucu}.conf
$ cp {client,istemci1}.conf


Aşağıda sunucu.conf dosyası içerisinde mutlaka bulunması gereken satırları yazıyorum. Bunun dışındaki satırlar için dosya içinde bulunan yorumlara ve açıklamalara başvurabilirsiniz.

sunucu.conf:

port 1194
proto udp

dev tun

ca ca.crt
cert iyiSunucu.crt
key iyiSunucu.key

dh dh1024.pem

server 10.8.0.0 255.255.255.0

openVPN'e şöyle dedik:

  • UDP protokolünün 1194 nolu portundan gelen bağlantıları kabul et.
  • Katman 3 bir tünel oluştur (dev tun).
  • CA sertifikası ca.crt, sunucu sertifikan iyiSunucu.crt ve sunucu anahtarın iyiSunucu.key dosyasındadır.
  • Diffie-Hellman için dh1024.pem dosyasını kullan.
  • Ağdaki IP adreslerini 10.8.0.0 - 10.8.0.254 arasında dağıt kendine de 10.8.0.1 adresini al.

Ek olarak şu ayarları yapabilirsiniz:

Sunucuya bağlanan bilgisayarların IP adreslerini korunması ve her seferinde aynı kalması için aşağıdaki komutu verebilirsiniz.

ifconfig-pool-persist ipp.txt

Bağlanan istemcilerin birbirini görebilmesi için:

client-to-client

bağlantılarda sıkıştırma kullanılması için:

comp-lzo

Sürekli kendini terkarlayan mesajların susturulması için:

mute 20

Ayar dosyası ile çalıştırmak için aşağıdaki bölüme bakabilirsiniz. Şimdi istemci cihazın da ayar dosyasını yapalım.

istemci.conf:

client

dev tun

proto udp

remote sunucu.adresi 1194

ca ca.crt
cert istemci1.crt
key istemci1.key


yani şöyle dedik;

  • sen istemcisin. Bağlanmaya çalış ve ayarların bir kısmını bağlandıktan sonra al.
  • sunucu.adresi adresindeki sunucunun 1194 numaralı portuna UDP protokolü ile bağlan.
  • Katman 3 bir tünel oluştur (dev tun).
  • CA sertifikası ca.crt, sertifikan istemci1.crt ve anahtarın istemci1.key dosyasındadır.


ek olarak;

eğer sunucuda sıkıştırma açıldı ise;

comp-lzo

Sürekli kendini terkarlayan mesajların susturulması için:

mute 20

komutları kullanılabilir.


Programın Çalıştırılması


Ubuntu'nun paket deposundan yüklediğinizde program daemon olarak çalışmaya başlar. Ve kendini her açılışta çalıştırmak üzere ayarlar. Otomatik olarak başlarken okuması gereken ayar dosyalarını /etc/openvpn/ dizini altına koyabilirsiniz. Böylece her açılışta doğru ayarlar ile başlayacaktır. Şu anda cihazı açıp kapatma gibi bir lüksümüz olmadığı için öncelikle deamon'ı sonlandıralım.

$ sudo /etc/init.d/openvpn stop


Şimdi deneme amaçlı başlatacağımız ve belki çıkacak sorunları çözmemiz gerekeceği için programı;

$ sudo openvpn ayarDosyasi.conf


komutunu vererek başlatalım. Böylece programın üreteceği çıktılar direk olarak ekrana yazılacak, böylece log dosyalarını takip etmemiz gerekmeyecektir. Öncelikle sunucuyu etkin hale getirmemiz gerekiyor.

$ sudo openvpn sunucu.conf


komutunu verdiğimizde sunucu ayarlamalarını yapacak, gerekli dosyaları okuyacak ve UDP 1194 potunu dinlemeye başlayacaktır. Kalabalık çıktıları okumaya çalışın. Eğer en sonda

Initialization Sequence Completed


yazısını görürseniz sorun yok demektir. Eğer bu satırı göremediyseniz, dosyalarınızın yerlerini ve ayar dosyalarınızı tekrar kontrol edin. Kalabalık yazılar arasında sorunun nedeni yazacaktır.

Şimdi de istemci tarafına geçip buradaki dosyayı çalıştıralım:

$ sudo openvpn istemci1.conf


Yine kalabalık olan çıktılar arasında aşağıdaki satırları görürseniz işlem tamamlanmış demektir.

Peer Connection Initiated with sunucu.adresi:1194
...
Initialization Sequence Completed


Bu sırada sunucu tarafındaki ekranı da takip ederseniz bağlantı detaylarının ekrana yazıldığını görebilirsiniz. İstemci tarafında yeni bir uçbirim açıp;

$ ifconfig


komutunu verirseniz tun0 arabirimi için atanmış bir inet adresi görmeniz gerekir. Yukarıdaki ayarları aynen uyguladı iseniz bu adres büyük olasılıkla 10.8.0.6 olacaktır. İstemciden sunucu'ya yani 10.8.0.5 adresine (*) ping atarak;

$ ping 10.8.0.5


bağlantıyı test edebilirsiniz. Aklınızda bulunsun, testin çalışabilmesi için sunucunun ping isteklerine cevap vermesi gereklidir.

(*) openVPN Ubuntu üzerinde çalışırken adresleri teker teker dağıtmamakta her bir istemci için bir alt-ağ oluşturabilmektedir. Bu yüzden bağlanan her bir istemcinin adresinin 1 eksiği sunucunun adresi olacaktır. Detaylar için yönlendirme tablosuna (route komutu ile) bakabilirsiniz.

Son ayarlar ve toparlama

Eğer aradaki bağlantıyı sorunsuz olarak kurabildiyseniz, çalıştığı ekranlarda Ctrl - C ile openVPN uygulamalarını kapatabilirsiniz. İsterseniz her bağlanma için komutları yukarıda tarif edilen şekilde verebilirsiniz. Fakat sunucu için bu pek uygun olmayacaktır. Sunucu tarafında bulunan sunucu.conf dosyasını /etc/openvpn/ dizininin altına kopyalayalım. ca.crt, sunucu.key, sunucu.crt ve dh1024.pem dosyalarını da /root/openvpn dizinine kopyalayalım. İlgili dizin için de görünürlüğü kısıtlayalım. Yeri değişen dosyalar için conf dosyamızı ayarlayalım. openVPN'in yetkilerini düşürelim. Böylece güvenliğimizi artıralım. Sonra da sunucumuzu yeniden başlatalım.

Sunucu üzerinde;

sunucu.conf dosyasının son hali:

port 1194
proto udp

dev tun

ca /root/openvpn/ca.crt
cert /root/openvpn/iyiSunucu.crt
key /root/openvpn/iyiSunucu.key

dh /root/openvpn/dh1024.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

comp-lzo

user nobody
group nogroup

persist-key
persist-tun


$ sudo cp sunucu.conf /etc/openvpn/
$ sudo mkdir /root/openvpn
$ sudo chmod 600 /root/openvpn
$ sudo mv ca.crt iyiSunucu.crt iyiSunucu.key dh1024.pem /root/openvpn
$ sudo /etc/init.d/openvpn restart


Hayırlı olsun.


Notlar

  • Eğer her bir sertifika içine farklı bilgiler gömmek isterseniz pkitool komutlarını --interact parametresi ile çalıştırabilirsiniz.
  • İstemcilerin bütün İnternet trafiklerinin sunucu üzerinden olmasını istiyorsanız, sunucu ayarları içine
    push “redirect-gateway”
    komutunu koymanız gerekir. Bu durumda sunucu üzerinden İnternet'e çıkış ayarlarını da ayrıca yapmanız gerekir.
  • "redirect-gateway" komutu bütün trafiği yönlendirdiği için DHCP adresi alamama gibi sorunlara da yol açabilmektedir.
  • VPN'in IP adresleri ile yerel ağ bağlantılarının adreslerinin çakışmamasına (aynı alt ağda olmamasına) dikkat ediniz.
  • IPv4 ve yönelnedirmeler hakkında biraz bilgi edinmeniz işinizi kolaylaştıracaktır.


kaynaklar:
[1] http://www.olympos.org/howto-nasil/openvpn/openvpn-ile-vpn-uygulamalari-20220.html
[2] http://penguence.linux.org.tr/?~p=dergi&action=show&which=77
[3] http://openvpn.net/index.php/documentation/howto.html

12 Ağustos 2008 Salı

GNU/Linux Kilitlenince - Son Çare

Zaman zaman çalışan programlardan dolayı GNU/Linux kilitlenebiliyor. Eğer herşeyi denediğiniz halde bilgisayarınızı geri alamadıysanız bilgisayarı kapatmaktan başka çare kalmıyor.

MS-DOS® işletim sistemi ortadan kalktığından beri bilgisayarı çat diye kapatmak önerilmiyor. Özellikle GNU/Linux'un dosya sistemi yapısından dolayı bilgisayarın gücünü birden bire kesmek sıkıntı yaratabiliyor. Öyle ki kaydettiğinizi düşündüğünüz dosyaları bile geri döndüğünüzde bulamayabiliyorsunuz. Ext2 dosya sisteminde çok daha vahim sonuçlanan güç kesintisi Ext3 ve ReiserFS dosya sistemi kullanan yeni dağıtımlarda daha az sıkıntı yaratıyor.

Gücü birden kesilen, doğru şekilde kapatılmamış yeni GNU/Linux dağıtımlarında dosyalarda sorun çıkma olasılığı çok daha az olsa da bilgisayarın kapatma düğmesine basılı tutarak kapatmak insanın içini acıtıyor. GNU/Linuxlar'da son çare olarak kullanılan bir yöntem var. Bu yöntem ile veri kaybınızı en aza indirebilir ve bilgisayarı daha az zarar verdiğinizi düşünerek kendinizi avutabilirsiniz. Bu metodun adı: Raising Skinny Elephant Is Utterly Boring. Metodumuz bu cümleyi oluşturan kelimelerin ilk harflerini akılda tutmamız ile çalışıyor. (Güzel bir Türkçe açılım bulamadım, önerilere açığım.)

GNU/Linux bizden gelen tepkliere karşılık vermediği ve yapacak başka bir şey kalmadığı anda aşğıdaki tuşlara sırayla basıyoruz:

  1. Alt + SysRq + R
  2. Alt + SysRq + S
  3. Alt + SysRq + E
  4. Alt + SysRq + I
  5. Alt + SysRq + U
  6. Alt + SysRq + B
Teknik Açıklama:
  • + işareti belirtilen tuşlara aynı anda basılacağı anlamına geliyor.
  • SysRq tuşu Print Screen ile aynı tuş. Genelde tuş takımının sağ üst tarafında yer alır.
  • Tuşların büyük, küçük harf olması önemli değildir. Fakat "I" tuşu İngilizce klavyede bulunan I/i tuşu olduğuna dikkat edin.
Peki bu tuşlar ne iş yapıyor?

R : Tuş takımını temel moda alıyor. Böylece sonraki girişlerin doğru algılanmasını sağlıyor. (Raw Mode)
S : Bellekteki bilgiler ile diskteki bilgileri senkronize ediyor.
E : Tüm işlemlere sonlanma çağrısı yapıyor.
I : Tüm işelmeri öldürüyor.
U : Tüm dosya sistemlerini salt-okunur olarak yeniden bağlıyor.
B : Bilgisayarı yeniden başlatıyor.

Anlayacağınız üzere ilk tuş bileşimini uyguladıktan sonra geriye dönüş yok. Bilgisayarı yeniden başlatana kadar tüm tuşları sırası ile uygulamanız gerekiyor.

Bilgisayarınız yeniden başladığında eğer diskleri gözden geçirmem gerekiyor derse, izin verin. Bu işlemi iptal etmeyin.

Son not: Bu tuş bileşimlerinin uygulanabilmesi için Linux Kernel'ında açık olması gerekiyor. Bir çok Ubuntu sürümü için açık olan bu özelliğin sizin bilgisayardaki durumunu öğrenmek için:
$ ls /proc/sys/kernel/sysrq

komutunu verebilirsiniz. Eğer dosya oradaysa bu özellik sizin bilgisayarınızda açık demektir.

Kaynak: http://www.brunolinux.com/01-First_Things_To_Know/Skinny_Elephants.html


3 Ağustos 2008 Pazar

Tuşlar Takım Olarak Çalışır - Tuşların Değişimi

Klavye Güzeldir

Bilgisayarda işlem yaparken işlemleri tuş takımını yani klavyeyi kullanarak yaptıkça işlemleri daha hızlı yapabileceğinizi keşfedersiz. Özellikle yazım temelli şeyler ile uğraşıyorsanız elinizi sürekli fareye götürüp, bir iki yere tıklayıp tekrar tuş takımına dönmek ciddi bir zaman kaybıdır. GNU/Linux'ta da bir çok işlem için tuş takımı kısa yolları bulunmaktadır. Özellikle uçbirimi kullanırken öne çıkan bu kısa yollardan X Windows ortamında da bol bol bulunmaktadır. Örneğin;

Ctrl + Alt + D : Bütün pencereleri küçültür.
Alt + F1 : Uygulamalar menüsünü açar.
Alt + F2 : Çalıştır kutusunu ekrana getirir.
Alt + F7 : Pencereyi taşıyabilmenizi sağlar. (*)
Ctrl + PageUp : Sekme (tab) kullanan programlarda bir önceki sekmeye geçer.
Ctrl + PageDown : Sekme (tab) kullanan programlarda bir sonraki sekmeye geçer.
Ctrl + s : Bir çok programda açık bulunan belgeyi kaydeder.
Ctrl + Yön Tuşları: Metin içerisinde bir sözcük ya da bir paragraf olarak hareket edebilmenizi sağlar.

(*) Gnome + Compiz ayarı gerektirebilir.

Tuşların Yeri

Klavye üzerindeki bazı tuşların yerini beğenmeyebilirsiniz. Örneğin Unix, yani GNU/Linux'un atası, tasarlanırken şimdikinden daha farklı bir tuş düzeneği yaygındı. Kısa yolların buna göre tasarlandığı klavyede şimdi Caps Lock tuşunun olduğu yerde zamanında Control tuşu vardı. Bu yüzden özellikle uçbirim uygulamalarının çoğunda (o zamanlar) erişimi kolay olan bu tuş işlev tuşu olarak çok sık kullanılmış.

Eğer Caps Lock tuşunu Control tuşundan daha az kullanan çoğunluk içerisindeyseniz, Control tuşuna eski güzel yerini iade edebilirsiniz. Her şeyiyle özelleştirilebilir olan GNU/Linux'umuz klavyedeki bütün tuşların yeniden düzenlenmesine izin veriyor.

Tuşların yerlerini değiştirmek, daha doğru bir ifade ile tuşların görevlerini değiştirmek için xmodmap programını kullanacağız. Bu program yalnızca X ortamında tuşların yerini değiştiriyor. X ortamı dışında çok fazla kullanım olmadığı için şimdilik yalnızca xmodmap'ten bahsedeceğim.

xmodmap programı temel olarak şöyle kullanılıyor:
  • Tuşun ismine yeni bir görev atanabiliyor ör:
    keysym Caps_Lock = Control
  • Tuşun koduna yeni bir görev atabiliyor ör:
    keycode 37 = slash
  • Tuşların değiştiriciler ile nasıl kullanılacağı bildirilebiliyor ör:
    keycode 37 = 7 slash
Son örnekte Control tuşuna tek başına bastığımızda 7 yazmasını Shift ile bastığımızda bölü yani / karakterini yazmasını söylemiş oluyoruz.

Peki tuşların kodunu ya da ismini nerden öğreneceğiz? Kolayı var. Bir Uçbirim (Uygulamalar -> Donatılar -> Uçbirim) açarak
$ xev
yazıyoruz ve xev programını çalıştırıyoruz. Bu programa ekrana içinde siyah çerçeveli kare olan beyaz bir pencere getirecek. Programı çalıştırdığımız Uçbirim'de de sürekli yazılar akmaya başlayacak. Bu program kullanıcının tuş takımı ve fare ile yaptığı hareketlerin X Windows sistemi tarafından nasıl algılandığını görmeye yarar. Fare kutunun içindeyse fare hareketlerini de takip edeceğinden çok fazla bilgi ortaya çıkacaktır, bu yüzden şimdilik fareyi kutudan uzaklaştırın.

xev'i açtıktan sonra örneğin soldaki Windows logolu tuşa (Super Tuşu) basarsanız, aşağıdakine benzer bir çıktı alırsınız:
KeyPress event, serial 31, synthetic NO, window 0x4200001,
root 0x59, subw 0x0, time 3380334, (-283,270), root:(957,434),
state 0x0, keycode 115 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

Ortadaki satır bizim için önemli olan satır. Gördüğünüz gibi tuşun kodu 115 adı ise Super_L imiş. Değişiklik yapmak istediğiniz tuşları deneyerek kodlarını ve isimlerini bi kenara not edin.

Control'ün İade-i İtibarı

Şimdi gelelim uygulamaya. Yukarıda bahsettiğim üzere amacım Control tuşunun itibarını ve yerini ona geri vermek. Bunu yapmak için aşağıdaki komutları uygulamam gerekiyor (nasıl uygulanacağına geleceğim):
remove Lock = Caps_Lock
remove Control = Control_L
keycode 37 = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

Ne yaptık?
  • Control ve Caps_Lock tuşları özel, değiştirici tuşlardır. Bu yüzden bir değişiklik yapmadan önce remove ile bu görevlerini kaldırdık.
  • 37 kod numaralı tuşa (soldaki Control tuşu) artık senin görevin Caps_Lock olmak dedik
  • Caps_Lock isimli tuşa artık senin görevin Control_L (sol kontrol) olmak dedik
  • Caps_Lock görevli tuşu shift kilidi (Lock) ve Control_L görevli tuşu Control değiştirici yaptık.

Komutların uygulanması

Yukarıda gördüğünüz her bir komutu ve hızlıca uygulamanız gereken diğer başka komutları da, uçbirimden
$ xmodmap -e "remove Lock = Caps_Lock"

komutunu vererek uygulatabilirsiniz. Bu durumda her bir komutu teker teker girmeniz gerekir. Bilgisayarı her açtığınızda böyle bir zahmete girmemeniz için bu komutları kayıt altında tutabilirsiniz.

Uygulanmasını istediğiniz komutların hepsini bir dosyaya alt alta yazın. Daha sonra dosyayı kaydedin.
$ xmodmap dosyaAdi

komutunu verdiğinizde dosyaya yazdığınız komutların hepsi işletilecektir. Eğer bu dosyanın adını
.Xmodmap
yapıp başlangıç (ev) dizininize koyarsanız bilgisayar her açıldığında bu dosyayı işletecektir.

Hayırlı olsun. Notlar kısmına bakmayı unutmayın.

Notlar

  • .Xmodmap adlı dosyayı yarattıktan sonra bilgisayarınızı ilk açtığınızda Ubuntu size bu dosyanın içindeki ayarları kullanmak isteyip istemediğinizi soracaktır. Yanıt size kalmış ;)
  • Dosya içinde ! ünlem ile başlayan satırlar yorum satırlarıdır. Ünlem ile başlayıp açıklama yazabilirsiniz.
  • Aynı dosyayı xmodmap ile yeniden çalıştırdığınızda tuşlar eski haline gelecektir. (Yalnızca bu dosyadaki ayarlar için geçerlidir.)
  • Değiştirici tuşlar için sağlıklı çalışmamak ile birlikte tuşlara birden fazla görev atayabilirsiniz. Arasına boşluk koyarak atayacağınız bu görevler sırasıyla normal, shift, mod1, mod2, ..., mod8 tuşları ile birlikte basıldığında kullanılacaktır.
  • Değiştirici (modifier) tuş listesini görmek için konsoldan
    $ xmodmap -pm
    komutunu verebilirsiniz.
  • Geçerli olan tuş takımı atamalarını incelemek için
    $ xmodmap -pk
    komutunu verebilirsiniz.