Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4826991
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2008-11-11 16:30:29

一.在控制台下自动打开NumLock
用root用户编辑文件 /etc/rc.d/rc.local,在改文件的最后加上:
#set tty numlock
INITTY=/dev/tty[1-6]
for tty in $INITTY; do
        setleds -D +num < $tty
done
重启系统,按Ctrl+Alt+F1可以看到NumLock灯自动亮起。

二.在X Window下自动打开NumLock
编写以下程序,命名为xnumlock.c
// xnumlock.c
// set numlock on by xunet 2007.4.4

#i nclude

#i nclude
int
get_numlock_state(Display* disp)
{
    int i;
    int numlock_mask = 0;  
Window dummy1, dummy2;
    int dummy3, dummy4, dummy5, dummy6;
unsigned int mask;
    XModifierKeymap* map = XGetModifierMapping( disp );
   
KeyCode numlock_keycode = XKeysymToKeycode( disp, XK_Num_Lock );
    if( numlock_keycode == NoSymbol )
        return0;
   for( i = 0; i < 8; ++i ) {
       if( map->modifiermap[map->max_keypermod * i ] == numlock_keycode)
       numlock_mask = 1 <   }
    XQueryPointer( disp,DefaultRootWindow( disp ), &dummy1,&dummy2,
   &dummy3, &dummy4, &dummy5, &dummy6,&mask );
   XFreeModifiermap( map );
   return mask & numlock_mask;
}

int main(int argc, char* argv[]){
    Display* disp = XOpenDisplay(NULL);
   if (disp == NULL) return1;
   if(get_numlock_state(disp)) return0; //already on
    //set numlock on
XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, XK_Num_Lock), True,
       CurrentTime);
   XTestFakeKeyEvent(disp, XKeysymToKeycode(disp, XK_Num_Lock), False,
       CurrentTime);
   XCloseDisplay(disp);
    return0;
}
使用下面命令编译:
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -o xnumlock xnumlock.c -lX11 -lXtst
把生成的文件xnumlock复制到/usr/local/bin中。
在Gnome菜单“系统”->“首选项”->“更多首选项”->“会话”中的启动程序中添加一项 "xnumlock"即可,重新登录后NunLock自动亮起。
阅读(3738) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~