Chinaunix首页 | 论坛 | 博客
  • 博客访问: 658985
  • 博文数量: 205
  • 博客积分: 7891
  • 博客等级: 少将
  • 技术积分: 2168
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-29 13:16
文章分类

全部博文(205)

文章存档

2015年(4)

2014年(5)

2013年(1)

2012年(4)

2011年(51)

2010年(86)

2009年(45)

2008年(9)

分类: LINUX

2011-04-01 16:01:20

  我这几天的学习,要想让上的hotkey完全能够正常工作,要许多方面一起协同才行。 

  1,硬件厂商在bios中对linux的支持程度。我的机器在启动后,用dmesg| grep -i acpi,就会发现在load acpi 的时候有两三个错误。我想这会导致一些hotkey在系统中,用那些acpi_listen或者xev抓不到按键,即没有输出相应的 keycode。这需要修改dsdt了。硬件厂商不支持,只能做一些hacking的工作,搞过嵌入式驱动开发的朋友,应该都不在话下。风险有,细心就能 对付。


  2,linux kernel对ACPI的支持,现在各种,如ibm, sony, asus, dell, hp,都有对应_acpi的项目,也会集成到kernel中去,例如debian, linux-image-2.6.21-2-686种就有ibm_acpi, asus_acpi, toshiba_acpi,但没有sony_acpi,这些都是各种laptop的acpi的driver。我的是asus的,实际上内核使用的就是 acp4asus项目提供的,我不得不停掉kernel自带的,去下载编译新的acpi4asus的driver。ACPI应该管理hotkeys,屏幕 亮度,fan,cpu speedstep,cpu temp。 

  3,有了driver,只是提供了基本的支持,还需要一个用户空间运行的daemon程序来获得按键的事件,比如现在的acpid,acpi- support提供了acpid响应事件后处理的相关脚本。这种机制就是event/action 的像那个键/值对。问题是,新的acpi driver会导致acpid不能使用,因为kernel自带的driver可能会把信息写到/proc/acpi下,而新的会放到/sys/下,这样 acpid就不能处理按键的事件了(acpi-support的脚本不支持了,因为它们是去找/proc的)。例如,新的acpi4asus(0.42, kernel自带在0.40之前),就是这样做的,也新提供了自己的daemon,叫asus_acpid,而且,不同的acpid daemon之间会有冲突。如,它们都需要使用/var/run/acpid.socket。我现在的系统里面acpid管Fn + F1/F5/F7,而asus_acpid管Fn + F3/F4/F9/F10/F11/F12。

  4,响应了按键事件后的处理,完全是自己配置的事情了,例如完全可以不把Fn+F1配置成休眠的。不过要实现具体的功能,是和具体的驱动/工具有关系的,例如, 

  fn +f1,控制休眠,通过suspend2ram, suspend2disk实现。 

  Fn +F2,如果仅仅启停wireless led的话,很简单,因为这是电源管理里面的,如果要实际的控制无线的驱动,就需要和ipw3945建立联系了,而这个工作在apcid中并不好做,因为 它不知道具体的无线驱动是什么啊。windows下asus提供了atk0100驱动和wireless的驱动,自然它们可以很容易的整合在一起; 

  fn + f3/f4,完全是自己定义的了,我的机器上是启动iceweasel和icedove,很简单的在事件处理脚本中写iceweasel &就可以了。 

  Fn +F5/F6,是调整屏幕亮度的,它需要向/proc/,或者/sys下echo 一些值,这就不能简单地写在脚本里面了,一般要用dbus; 

  Fn +f7,关闭屏幕的电源,这是acpi直接提供的。 

  fn +f8 ,切换扩展显示器,这个没有硬件测试。 

  fn +f9,启停touchpad,先要在xorg中写一个支持,然后在事件处理脚本中用synclient,这个工具也是所有用户都可以用的。 

  fn + F10,启停声音,Fn+ F11/F12是调整音量的,这个在acpid的事件处理脚本中,就是调用amixer来设置的,而这个命令是任何一个用户都可以调用的,不过 ausu_apcid的处理脚本中默认是通过Front来改变音量的,而我的声卡驱动需要通过PCM来设置,就需要修改了; 

  所以,就是hardware vendor --> linux kernel --> acpi driver --> acpi daemon --> event handler这样的关系。 

  根节在头上,软件上的成功使用,需要硬件和固件的支持。
阅读(594) | 评论(0) | 转发(0) |
0

上一篇:Linux 文件权限

下一篇:ACPI简介 Linux

给主人留下些什么吧!~~