V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zqhong
V2EX  ›  Python

如何获取特殊按键的 keycode?

  •  1
     
  •   zqhong · 2014-08-24 07:03:40 +08:00 · 3470 次点击
    这是一个创建于 3774 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问题的由来:
    笔记本开机开启背光键盘, 每次都得 Fn+F9 关闭, 甚是麻烦!

    问题尝试解决过程:
    1. 寻找Python是否有可以模拟键盘的模块。 好吧, 找到了 -- virtkey
    2. 简单看了下 virtkey的用法 press_keycode / release_keycode 好简单啊
    3. 寻找Fn+F9的keycode, 使用 showkey -k, 大部分按键都可以找到, 就是 Fn+F9找不到 最后, 在 dmesg中找到 -- acer_wmi: Unknown key number - 0x84
    4. 最后我在Python中使用 0x84这个 keycode测试了下, 竟然没有效果!

    实在没办法, 特来请教V友。

    问题1:
    我在 showkey中获取相关按键的keycode, 比如 'a', 得到的是 30. 可我在 xev中得到的是 38. 实际上 'a'的keycode也确实是 38. 而且, 其他按键在showkey中都要加8才行。 
    问题2:
    上文说的 0x84是什么??? 它是 Fn+F9的keycode吗?
    注: 每次我按下 Fn+F9, 都会在dmesg中看到 ‘acer_wmi: Unknown key number - 0x84’ 感觉它就是啊。 可无论我是使用 0x84 还是 0x8C (0x84+8) 都没有效果


    我只是想偷个懒。。。。
    10 条回复    2014-08-24 12:52:06 +08:00
    54c3
        1
    54c3  
       2014-08-24 07:27:41 +08:00   ❤️ 1
    不如試試 xdotools?
    54c3
        2
    54c3  
       2014-08-24 07:28:16 +08:00
    @54c3 抱歉手抖多打了個 s,找「xdotool」。
    ctexlive
        3
    ctexlive  
       2014-08-24 08:30:36 +08:00 via Android   ❤️ 1
    132+8=140 试试
    whywhywhy
        4
    whywhywhy  
       2014-08-24 08:59:05 +08:00   ❤️ 1
    fn是硬件级按键,模拟不了,也获取不了的,别闹了洗洗睡吧
    elvodn
        5
    elvodn  
       2014-08-24 09:13:00 +08:00
    dmesg 里面提示了 Use "setkeycodes xxxx <keycode>" to make it know
    zqhong
        6
    zqhong  
    OP
       2014-08-24 12:29:06 +08:00
    @54c3 谢谢 可能没支持我这本子吧。 不过我找到了
    keycode 236 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
    keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
    keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp

    xdontool key XF86KbdBrightnessDown 应该就可以关闭背光键盘。 
    一开始我以为是xmodmap的映射问题, 找了试了一早上, 结果。。。



    /etc/acpi/events/asus-keyboard-backlight-down
    /etc/acpi/events/asus-keyboard-backlight-up
    呼。估计asus是支持, 等等编译下内核试试看
    zqhong
        7
    zqhong  
    OP
       2014-08-24 12:30:14 +08:00
    @ctexlive 谢谢。 之前就尝试过了, 
    找到了keycode了
    keycode 236 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
    keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
    keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp
    zqhong
        8
    zqhong  
    OP
       2014-08-24 12:43:26 +08:00
    @whywhywhy 怎么说呢。网上好多人也这么说, 不过我试了下, 单纯按 F12, 得到的keycode是 96 如果 Fn+F12, 得到的keycode是 78
    bcxx
        9
    bcxx  
       2014-08-24 12:50:24 +08:00   ❤️ 1
    @zqhong @whywhywhy 的意思应该是单纯 fn 是模拟不了的,但是 fn + F12 这种其实相当于硬件发送了另外一个键的 keycode 进来(其实也就是 XF86 开头的那些)
    akfish
        10
    akfish  
       2014-08-24 12:52:06 +08:00   ❤️ 2
    Fn按键组合产生的是USB HID Report,所以你需要直接拦截处理raw HID report
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5816 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:24 · PVG 11:24 · LAX 19:24 · JFK 22:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.