** Description changed:

  apt show python3-libevdev | grep Version  # Version: 0.5-3
+ cat /etc/lsb-release  # 24.04
+ uname -a  # Linux wsh24 6.8.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Tue 
Aug 13 13:35:26 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
  
  `KEY_F9` is defined as 67
  
https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/noble/tree/include/uapi/linux/input-event-codes.h?h=Ubuntu-6.8.0-44.44#n142
  , so `libevdev.EV_KEY.KEY_F9` should be 67, however, it's 249 (== 0xF9) in 
Ubuntu 24.04's python3-libevdev.
  
  ```py
-                          # Ubuntu 22.04  Ubuntu 24.04
- import libevdev          #
- libevdev.EV_KEY.KEY_F1   # 59            59
- libevdev.EV_KEY.KEY_F2   # 60            60
- libevdev.EV_KEY.KEY_F3   # 61            61
- libevdev.EV_KEY.KEY_F4   # 62            62
- libevdev.EV_KEY.KEY_F5   # 63            63
- libevdev.EV_KEY.KEY_F6   # 64            64
- libevdev.EV_KEY.KEY_F7   # 65            65
- libevdev.EV_KEY.KEY_F8   # 66            66
- libevdev.EV_KEY.KEY_F9   # 67            249 (!)
- libevdev.EV_KEY.KEY_F10  # 68            68
- libevdev.EV_KEY.KEY_F11  # 87            87
- libevdev.EV_KEY.KEY_F12  # 88            88
- 
- # Ubuntu 22.04
- >>> import libevdev
- >>> libevdev.EV_KEY.KEY_F1
- KEY_F1:59
- >>> libevdev.EV_KEY.KEY_F2
- KEY_F2:60
- >>> libevdev.EV_KEY.KEY_F3
- KEY_F3:61
- >>> libevdev.EV_KEY.KEY_F4
- KEY_F4:62
- >>> libevdev.EV_KEY.KEY_F5
- KEY_F5:63
- >>> libevdev.EV_KEY.KEY_F6
- KEY_F6:64
- >>> libevdev.EV_KEY.KEY_F7
- KEY_F7:65
- >>> libevdev.EV_KEY.KEY_F8
- KEY_F8:66
- >>> libevdev.EV_KEY.KEY_F9
- KEY_F9:67
- >>> libevdev.EV_KEY.KEY_F10
- KEY_F10:68
- >>> libevdev.EV_KEY.KEY_F11
- KEY_F11:87
- >>> libevdev.EV_KEY.KEY_F12
- KEY_F12:88
- 
- # Ubuntu 24.04
- >>> import libevdev
- >>> libevdev.EV_KEY.KEY_F1
- KEY_F1:59
- >>> libevdev.EV_KEY.KEY_F2
- KEY_F2:60
- >>> libevdev.EV_KEY.KEY_F3
- KEY_F3:61
- >>> libevdev.EV_KEY.KEY_F4
- KEY_F4:62
- >>> libevdev.EV_KEY.KEY_F5
- KEY_F5:63
- >>> libevdev.EV_KEY.KEY_F6
- KEY_F6:64
- >>> libevdev.EV_KEY.KEY_F7
- KEY_F7:65
- >>> libevdev.EV_KEY.KEY_F8
- KEY_F8:66
- >>> libevdev.EV_KEY.KEY_F9
- KEY_F9:249
- >>> libevdev.EV_KEY.KEY_F10
- KEY_F10:68
- >>> libevdev.EV_KEY.KEY_F11
- KEY_F11:87
- >>> libevdev.EV_KEY.KEY_F12
- KEY_F12:88
+ import libevdev
+ libevdev.EV_KEY.KEY_F1   # KEY_F1:59
+ libevdev.EV_KEY.KEY_F2   # KEY_F2:60
+ libevdev.EV_KEY.KEY_F3   # KEY_F3:61
+ libevdev.EV_KEY.KEY_F4   # KEY_F4:62
+ libevdev.EV_KEY.KEY_F5   # KEY_F5:63
+ libevdev.EV_KEY.KEY_F6   # KEY_F6:64
+ libevdev.EV_KEY.KEY_F7   # KEY_F7:65
+ libevdev.EV_KEY.KEY_F8   # KEY_F8:66
+ libevdev.EV_KEY.KEY_F9   # KEY_F9:249 (! expected to be 67)
+ libevdev.EV_KEY.KEY_F10  # KEY_F10:68
+ libevdev.EV_KEY.KEY_F11  # KEY_F11:87
+ libevdev.EV_KEY.KEY_F12  # KEY_F12:88
  ```
  
  This bug comes from the following line
  
https://git.launchpad.net/ubuntu/+source/python-libevdev/tree/libevdev/const.py?h=applied/0.5-3#n353
  
          for c in range(cmax + 1):
              cname = Libevdev.event_to_name(t, c)
              # For those without names, we just use the type name plus
              # hexcode
              if cname is None:
                  # tname: 'EV_KEY'
                  # c: 249 (0xF9)
                  cname = "{}_{:02X}".format(tname[3:], c)  # 'KEY_F9'
  
  which seems fixed in the latest version:
  
https://git.launchpad.net/ubuntu/+source/python-libevdev/tree/libevdev/const.py?h=applied/0.11-1#n390
  
https://gitlab.freedesktop.org/libevdev/python-libevdev/-/blob/0.11/libevdev/const.py?ref_type=tags#L390
  
https://gitlab.freedesktop.org/libevdev/python-libevdev/-/commit/f996808760f9bb869c60b7b8810725ff49b9b394
  
              if cname is None:
                  # tname: 'EV_KEY'
                  # c: 249 (0xF9)
                  name = "{}_{:02X}".format(tname[3:], c)  # 'KEY_F9'
                  cname = "_{}".format(name)               # '_KEY_F9'
  
  A workaround is simply set `libevdev.EV_KEY.KEY_F9.value = 67`.
  
  ```py
  import libevdev
  fd = open('/dev/input/by-path/platform-i8042-serio-0-event-kbd', 'rb')
  d = libevdev.Device(fd)
  uinput = d.create_uinput_device()
  uinput.send_events([libevdev.InputEvent(libevdev.EV_KEY.KEY_F9, 1), 
libevdev.InputEvent(libevdev.EV_SYN.SYN_REPORT, 0)])  # press F9 (not work)
  uinput.send_events([libevdev.InputEvent(libevdev.EV_KEY.KEY_F9, 0), 
libevdev.InputEvent(libevdev.EV_SYN.SYN_REPORT, 0)])  # release F9 (not work)
  libevdev.EV_KEY.KEY_F9.value = 67  # workaround
  uinput.send_events([libevdev.InputEvent(libevdev.EV_KEY.KEY_F9, 1), 
libevdev.InputEvent(libevdev.EV_SYN.SYN_REPORT, 0)])  # press F9 (works)
  uinput.send_events([libevdev.InputEvent(libevdev.EV_KEY.KEY_F9, 0), 
libevdev.InputEvent(libevdev.EV_SYN.SYN_REPORT, 0)])  # release F9 (works)
  ```

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2080804

Title:
  KEY_F9.value should be 67 but 249 (0xF9)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/python-libevdev/+bug/2080804/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to