GNU/Linux Altında Klavye LED'lerinin Kullanımı

Ah Şu LED'ler LED'ler LED'ler
Dizüstü bilgisayarım Toshiba Satellite A300D-20V'nin neredeyse tüm özelliklerini eksiksiz ve sorunsuz olarak GNU/Linux'ta kullanıyorum ama çok da önemli olmayan klavyedeki çokluortam tuşlarına ait LED'lerin açılıp kapatılmasını gerçekleştirmek için bir yol bulamamıştım şimdiye kadar.

Hem enerji tüketimi hem de gözü almaması bakımından LED'lerin kapalı olmaları ve ilgili düğmeye basıldığında yanmaları ideal olandı ve bir kere bu şekilde ayarladıktan sonra pek de umarsamaya gerek kalmıyordu değiştirilip değiştirilemediğini ama yine de GNU/Linux üzerinde bir şeyin yapılamıyor oluşu canımı sıkıyordu.

LED'lerin durumunu değiştirmek için bildiğim sadece iki yol vardı: işletim sistemini açmadan önce BIOS'tan ayarlamak veya Toshiba'nın desteklediği tek işletim sistemi olan Windows'tan ilgili uygulamayı kullanmak. Windows seçeneği değilse de BIOS epey kabul edilebilir ama yine de GNU/Linux'ta nasıl yapılacağını merak ediyorsanız yazının devamını okumanızı tavsiye ederim. Yazının geri kalanı konuyla ilgili bulabildiğim kaynakların özetlenmiş çevirilerini içeriyor. Keşke bir kullanıcı olarak bunları öğrenmem gerekmeseydi ama yine de GNU/Linux'ta ileride bu seviyeye gelineceğine inancım tam.

GNU/Linux'ta LED Sınıfı
GNU/Linux'ta LED sınıfı /sys/class/leds dizini içinde bulunuyor ve LED'lerin kullanıcı uzayından kontrol edilmesini sağlıyor. LED'lerin en yüksek parlaklığı max_brightness dosyası ile tanımlanıyor. Parlaklık dosyası 0 ile max_brightness arası değerler alarak LED'in parlaklığını ayarlıyor. Çoğu LED donanımsal parlaklık desteğine sahip olmadığı için sadece açma ve kapama işlemi yapılabiliyor.

LED sınıfı ayrıca isteğe bağlı olarak kullanılabilen bir LED tetikleyici (trigger) kavramı da getirmektedir. Burada bahsedilen tetikleyici, LED eylemleri için Kernel tabanlı bir kaynaktır. Bir tetikleyici çok basit bir yapıda olabileceği gibi duruma göre çok karışık da olabilmektedir. Basit tetikleyiciler ayarlanabilir değildir. Bu gruba örnek olarak ide-disk, nand-disk ve sharpsl-charge gösterilebilir.

timer tetikleyicisiyse karmaşık olanlara örnek gösterilebilir. timer tetikleyicisi periyodik olarak LED parlaklığını LED_OFF ile o anki parlık ayarı arasında değiştirecektir. Açık ve kapalı kalma süreleri /sys/class/leds/<device>/delay_{on,off} aracılığıyla milisaniye biçiminde belirtilebilir.

/sys/class/leds/<device>/trigger ile giriş çıkış zamanlayıcılarındakine benzer şekilde tetikleyici seçimi yapılabilir. Bir tetikleyici seçildiğinde bu tetikleyiciye özgü parametreler /sys/class/leds/<device> içinde belirir.

LED sınıfının temel tasarım felsefesi basitliktir. LED'ler basit devre elemanlarıdır ve amaç mümkün olduğunca az kodla olabildiğince çok işlevsellik sunmaktır. LED sınıfı için iyileştirmeler düşünürken bunu aklınızda tutmanızda fayda var.

LED aygıt isimlendirmesi şu anda devicename:colour:function (aygıtadı:renk:fonksiyon) biçimindedir.

Bağımsız led sınıfı öznitelikleri olarak aktarılması gereken renk gibi bazı LED özellikleri için çağrılar olmuştur. Çözüm olarak çok fazla yük getirmeyeceği için bunların ismin bir parçası olması önerilmiştir. Yukarıdaki isimlendirme şeması daha sonradan ihtiyaç duyulabilecek öznitelikler için de faaliyet alanı bırakmaktadır. Kullanılmayacak bir özellik olursa sadece o özelliğe ait bölümün boş bırakılması yeterli olacaktır.

Bazı LED'ler herhangi bir işlemci etkileşimi olmaksızın açılıp kapanması için programlanabilir. Bu özelliği desteklemek için LED sürücüsü isteğe bağlı olarak blink_set() fonksiyonunu içerebilir. Bununla birlikte bir LED'in yanıp sönmesini ayarlamak için gerektiğinde yazılım geri çekilmesini desteklediğinden led_blink_set() UPA fonksiyonunu kullanmak daha iyi bir fikirdir.

Yanıp sönmeyi kapatmak için led_brightness_set() kullanılabilir. Bu fonksiyon yalnızca LED parlaklığını ayarlamakla kalmıyor aynı zamanda da yanıp sönme için gerekli olabilecek tüm yazılım zamanlayıcılarını da durduruyor.

LED'leri Kurcalamaya Başlayalım
Her LED'in brightness (parlaklık), device (aygıt), power (güç), subsystem (altsistem), trigger (tetikleyici), uevent gibi birçok özniteliği bulunur. Bunlardan bizim ilgimizi çekenlerse brightness ve trigger.

Sadece bir LED'i açmak veya kapatmak istiyorsanız aşağıdaki komutların benzerini kullanabilirsiniz:

$ sudo echo 255 > /sys/class/leds/led-ismi/brightness # aç
$ sudo echo 0 > /sys/class/leds/led-ismi/brightness   # kapat

Benim kullandığım komutlarsa tam olarak aşağıdaki gibi:

$ echo 255 | sudo tee -a /sys/class/leds/toshiba\:\:illumination/brightness
$ echo 0 | sudo tee -a /sys/class/leds/toshiba\:\:illumination/brightness

Bir LED ile ilgili tetikleyici seçeneklerini görmek ve o an seçili olanı görmek için tetikleyici öznitelikleri şu şekilde okunabilir:

$ cat /sys/class/leds/toshiba\:\:illumination/trigger
[none] ADP0-online mmc0 rfkill0 rfkill1 phy0rx phy0tx phy0assoc phy0radio

Yukarıdaki çıktı sekiz tane tetikleyicinin mevcut olduğunu ve o an için hiçbirinin seçili olmadığını söylemektedir.

Daha kapsamlı işlemler için kullanılabilecek komutları kaynaklarda belirtilen bağlantılardan görebilirsiniz. Ben sadece LED'lerin nasıl açılıp kapatılacağını merak ettiğimden ileri konulara pek bakmadım.

Notlar
  1. Birinci alt başlık ilk önce LED'lere Neden Bulaştım'dı, daha sonra neden'i nereden mi yapayım diye düşünürken Gurbet Türküsü'nün sözleri geldi aklıma ve şimdiki haline değiştirdim.
  2. Bu epey eski bir yazıdır, iki üç ay belki, son kısmını tamamlayıp yayınladım.
  3. Yazı tam bir bütünlükte olmasa da başlıklar kendi içinde derli topludur.

Kaynaklar

Yorumlar

Bu blogdaki popüler yayınlar

Mızıka Tabları Nasıl Okunur

Muhtar Kellesi

conio.h