16 Haziran 2007

capture key

Linux'te hiç herhangi bir tuşa basılınca haberim olsun gibi bir ihtiyacınız oldu mu bilemiyorum ama benim oldu. Mesela bana şu yüzden gerekti:
Bende quake3'ten çıkarken kilitleniyor ve ekran değişmiyor hiç bir şekilde. Hemen başka bir bilgisayar bulup ssh bağlantısı yapıp quake'i öldürürsem düzeliyor sadece. Yoksa reset atmak zorundayım.
Ben de bir çözüm buldum hemen: özel bir tuşa basınca quake sonlandırılsın.

/dev/input/event0

açıp input_event structure ına koyuyoruz ve hangi tuşa basılmış anlıyoruz.

struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};

Beni reset atmaktan kurtarıp quake i öldürmeye yarayan kod (root ile çalıştırın):

#include <linux/input.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
int fd;
struct input_event inp;
fd = open("/dev/input/event0", O_RDONLY);
while (1)
{
read(fd, &inp, sizeof(inp));
//printf("code: %d\n", inp.code);
if (inp.code == 98)
system("killall quake3-smp.x86");
}
close(fd);
return 0;
}

Burada 98 benim klavyede bulunan garip bir tuşa setkeycodes ile atadığım değer. Siz inp.code u ekrana basarak istediğiniz tuş hangisiymiş görebilirsiniz. Benim kod, belirlediğim tuşa basıldığında killall quake3-smp.x86 komutunu çalıştırıyor.

1 yorum:

zgrw dedi ki...

tam da geçen gün benzer bişey yapmayı düşünüyordum :)