Блымаем лампочками на клавиатуре

Копался в драйвере клавиатуры Linux и нашёл интересные возможности. Суперпользователь (пользователь который имеет разрешение на доступ к /dev/console) может управлять лампочками индикаторами Caps Lock, Scroll Lock, Num Lock. Подобные действия можно было делать в DOS редактированием некоторых битов в памяти. Написал маленькую программу которая мигает лампочками Caps Lock, Num Lock и потом восстанавливает правильные значения. Увы лампочки восстанавливаются только в консоли, в X11 восстановление значений по умолчанию не работает.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/kd.h>
#include <signal.h>
 
static int fd;
 
void restore_leds(int sig){
	ioctl(fd,KDSETLED,0x80);
	exit(EXIT_SUCCESS);
}
void closefd(void){
	close(fd);
}
 
int main(int argc,char *argv[]){
	int led;
	struct sigaction act;
	act.sa_handler=restore_leds;
	sigfillset(&act.sa_mask);
	act.sa_flags=0;
	if((fd = open("/dev/console",O_NOCTTY)) == -1){
		fputs("Can't open file /dev/console\n",stderr);
		exit(EXIT_FAILURE);
	}
 
	atexit(closefd);
 
	led = LED_NUM;
 
	sigaction(SIGINT, &act, NULL);
	sigaction(SIGHUP, &act, NULL);
	while(1){
		ioctl(fd,KDSETLED,led ^= LED_CAP);
		ioctl(fd,KDSETLED,led ^= LED_NUM);
		usleep(500000);
	}
 
	return 0;
}
Запись опубликована в рубрике Заметки с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>