linux屏保之发现问题

系统一段时间后没有输入总是希望关闭LCD背光延长屏幕的使用寿命,我们目前的项目也是如此。但是一段时间后才发现我的程序在这方面做的不够好。一般个人PC中使用命令

setterm -blank 0关闭屏保 setterm -blank 1开启屏保。其实正确的格式为setterm -blank 【0-60】设置屏保的时间0-60.然后在arm板上是不待setterm 程序的,所以阅读相关资料得知setterm 程序设置屏保时间的源码部分

/* -blank [0-60]. */
if (opt_blank && vcterm)

{

     printf("\033[9;%d]", opt_bl_min);

}

所以在程序中我们也可以使用 

printf("\033[9;%d]", opt_bl_min);

但是我们并不知道printf是输入到哪个虚拟控制台的,所以就有了变形

system("echo -e \"\033[9;0]\" > /dev/ttyN");

其实ttyN在我程序中是tty4.

后来发现在图形环境下是不起作用的。

ioctl(con_fd, KDSETMODE, KD_GRAPHICS);//con_fd = open(tty4);

将上面一行程序注释掉,使其保持在文本模式KD_TEXT就可以了。

在耐心阅读/drivers/char/vt.c时发现屏保的逻辑。

1)设置定时器

2)将定时器与函数关联

3)时间到调用函数

4)其中有一个中间函数do_blank_screen()是处理黑屏的关键函数

其中有一部分代码

/** don't blank graphics */

if (vc->vc_mode != KD_TEXT)

{

     console_blanked = fg_console + 1;

     return;

}

 原来是这部分代码导致KD_GRAPHICS模式下不能使用屏保)

虽然问题已经找到,但是截止到目前还没有找到解决办法。不过从发现vt.c这个文件是关于console,tty设备的关键源代码来看收获还是不小的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值