Hello, in xorgproto project in include/X11/XF86keysym.h file there are some keys for which no _EVDEVK(...) line exists. E.g. for the subtitle key there is only this line:
#define XF86XK_Subtitle 0x1008ff9a /* cycle through subtitle */
But there is no line like this:
#define XF86XK_Subtitle _EVDEVK(0x172) /* KEY_SUBTITLE */
My understanding is that the XF86keysym.h file is used to generate the "evdev" section in https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/master/symbols/inet ; but only lines with an _EVDEVK() entry are regarded by the generator. I want to use XKB to map some keys from infrared remote controls, to improve out-of-the-box support for remote controls in Kodi media center (for https://github.com/xbmc/xbmc/issues/16834). Since these keys are not listed in the symbols/inet file, XKB cannot map them, and therefore Kodi cannot handle them. I have now run scripts/keysym-generator.py without a --kernel-versions parameter, to generate an XF86keysym.h file that contains _EVDEVK() entries for _all_ keys, regardless of the kernel version. The script was run on a system with libevdev 1.12.1+dfsg-1 and python-libevdev 0.11. The diff to https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/blob/e312ab76c4d93f2e637ac0c73987b22cd43420c7/include/X11/XF86keysym.h is attached. In the diff I see that additional _EVDEVK() lines were generated for 132 keys. Would it be possible and sensible to add _EVDEVK() lines for all of these keys, so that XF86keysym.h supports all evdev keys? Alternatively, would it be possible to add _EVDEVK() lines for keys that are related to media controls? The table at https://www.kernel.org/doc/html/v6.11/userspace-api/media/rc/rc-tables.html shows which keys would be interesting. Should I just submit a merge request for one of these approaches? Thanks, Oliver Gerlich
--- include/X11/XF86keysym.h 2024-12-09 21:02:07.297023228 +0100 +++ include/X11/XF86keysym.h.new1 2024-12-09 21:09:20.526311394 +0100 @@ -272,10 +272,66 @@ */ #define _EVDEVK(_v) (0x10081000 + _v) /* Use: XF86XK_Eject _EVDEVK(0x0a2) KEY_EJECTCLOSECD */ +#define XF86XK_Nextsong _EVDEVK(0x0a3) /* KEY_NEXTSONG */ +#define XF86XK_Playpause _EVDEVK(0x0a4) /* KEY_PLAYPAUSE */ +#define XF86XK_Previoussong _EVDEVK(0x0a5) /* KEY_PREVIOUSSONG */ +#define XF86XK_Stopcd _EVDEVK(0x0a6) /* KEY_STOPCD */ +#define XF86XK_Record _EVDEVK(0x0a7) /* KEY_RECORD */ +#define XF86XK_Rewind _EVDEVK(0x0a8) /* KEY_REWIND */ +#define XF86XK_Phone _EVDEVK(0x0a9) /* KEY_PHONE */ +#define XF86XK_Iso _EVDEVK(0x0aa) /* KEY_ISO */ +#define XF86XK_Config _EVDEVK(0x0ab) /* KEY_CONFIG */ +#define XF86XK_Homepage _EVDEVK(0x0ac) /* KEY_HOMEPAGE */ +#define XF86XK_Refresh _EVDEVK(0x0ad) /* KEY_REFRESH */ +#define XF86XK_Exit _EVDEVK(0x0ae) /* KEY_EXIT */ +#define XF86XK_Move _EVDEVK(0x0af) /* KEY_MOVE */ +#define XF86XK_Edit _EVDEVK(0x0b0) /* KEY_EDIT */ +#define XF86XK_Scrollup _EVDEVK(0x0b1) /* KEY_SCROLLUP */ +#define XF86XK_Scrolldown _EVDEVK(0x0b2) /* KEY_SCROLLDOWN */ +#define XF86XK_Kpleftparen _EVDEVK(0x0b3) /* KEY_KPLEFTPAREN */ +#define XF86XK_Kprightparen _EVDEVK(0x0b4) /* KEY_KPRIGHTPAREN */ /* Use: XF86XK_New _EVDEVK(0x0b5) v2.6.14 KEY_NEW */ /* Use: XK_Redo _EVDEVK(0x0b6) v2.6.14 KEY_REDO */ /* KEY_DASHBOARD has been mapped to LaunchB in xkeyboard-config since 2011 */ +#define XF86XK_F13 _EVDEVK(0x0b7) /* KEY_F13 */ +#define XF86XK_F14 _EVDEVK(0x0b8) /* KEY_F14 */ +#define XF86XK_F15 _EVDEVK(0x0b9) /* KEY_F15 */ +#define XF86XK_F16 _EVDEVK(0x0ba) /* KEY_F16 */ +#define XF86XK_F17 _EVDEVK(0x0bb) /* KEY_F17 */ +#define XF86XK_F18 _EVDEVK(0x0bc) /* KEY_F18 */ +#define XF86XK_F19 _EVDEVK(0x0bd) /* KEY_F19 */ +#define XF86XK_F20 _EVDEVK(0x0be) /* KEY_F20 */ +#define XF86XK_F21 _EVDEVK(0x0bf) /* KEY_F21 */ +#define XF86XK_F22 _EVDEVK(0x0c0) /* KEY_F22 */ +#define XF86XK_F23 _EVDEVK(0x0c1) /* KEY_F23 */ +#define XF86XK_F24 _EVDEVK(0x0c2) /* KEY_F24 */ +#define XF86XK_Playcd _EVDEVK(0x0c8) /* KEY_PLAYCD */ +#define XF86XK_Pausecd _EVDEVK(0x0c9) /* KEY_PAUSECD */ +#define XF86XK_Prog3 _EVDEVK(0x0ca) /* KEY_PROG3 */ +#define XF86XK_Prog4 _EVDEVK(0x0cb) /* KEY_PROG4 */ /* Use: XF86XK_LaunchB _EVDEVK(0x0cc) v2.6.28 KEY_DASHBOARD */ +#define XF86XK_Suspend _EVDEVK(0x0cd) /* KEY_SUSPEND */ +#define XF86XK_Close _EVDEVK(0x0ce) /* KEY_CLOSE */ +#define XF86XK_Play _EVDEVK(0x0cf) /* KEY_PLAY */ +#define XF86XK_Fastforward _EVDEVK(0x0d0) /* KEY_FASTFORWARD */ +#define XF86XK_Bassboost _EVDEVK(0x0d1) /* KEY_BASSBOOST */ +#define XF86XK_Print _EVDEVK(0x0d2) /* KEY_PRINT */ +#define XF86XK_Hp _EVDEVK(0x0d3) /* KEY_HP */ +#define XF86XK_Camera _EVDEVK(0x0d4) /* KEY_CAMERA */ +#define XF86XK_Sound _EVDEVK(0x0d5) /* KEY_SOUND */ +#define XF86XK_Question _EVDEVK(0x0d6) /* KEY_QUESTION */ +#define XF86XK_Email _EVDEVK(0x0d7) /* KEY_EMAIL */ +#define XF86XK_Chat _EVDEVK(0x0d8) /* KEY_CHAT */ +#define XF86XK_Search _EVDEVK(0x0d9) /* KEY_SEARCH */ +#define XF86XK_Connect _EVDEVK(0x0da) /* KEY_CONNECT */ +#define XF86XK_Finance _EVDEVK(0x0db) /* KEY_FINANCE */ +#define XF86XK_Sport _EVDEVK(0x0dc) /* KEY_SPORT */ +#define XF86XK_Shop _EVDEVK(0x0dd) /* KEY_SHOP */ +#define XF86XK_Alterase _EVDEVK(0x0de) /* KEY_ALTERASE */ +#define XF86XK_Cancel _EVDEVK(0x0df) /* KEY_CANCEL */ +#define XF86XK_Brightnessdown _EVDEVK(0x0e0) /* KEY_BRIGHTNESSDOWN */ +#define XF86XK_Brightnessup _EVDEVK(0x0e1) /* KEY_BRIGHTNESSUP */ +#define XF86XK_Media _EVDEVK(0x0e2) /* KEY_MEDIA */ /* Use: XF86XK_Display _EVDEVK(0x0e3) v2.6.12 KEY_SWITCHVIDEOMODE */ /* Use: XF86XK_KbdLightOnOff _EVDEVK(0x0e4) v2.6.12 KEY_KBDILLUMTOGGLE */ /* Use: XF86XK_KbdBrightnessDown _EVDEVK(0x0e5) v2.6.12 KEY_KBDILLUMDOWN */ @@ -289,6 +345,7 @@ /* Use: XF86XK_Bluetooth _EVDEVK(0x0ed) v2.6.19 KEY_BLUETOOTH */ /* Use: XF86XK_WLAN _EVDEVK(0x0ee) v2.6.19 KEY_WLAN */ /* Use: XF86XK_UWB _EVDEVK(0x0ef) v2.6.24 KEY_UWB */ +#define XF86XK_Unknown _EVDEVK(0x0f0) /* KEY_UNKNOWN */ /* Use: XF86XK_Next_VMode _EVDEVK(0x0f1) v2.6.23 KEY_VIDEO_NEXT */ /* Use: XF86XK_Prev_VMode _EVDEVK(0x0f2) v2.6.23 KEY_VIDEO_PREV */ /* Use: XF86XK_MonBrightnessCycle _EVDEVK(0x0f3) v2.6.23 KEY_BRIGHTNESS_CYCLE */ @@ -297,18 +354,70 @@ /* Use: XF86XK_WWAN _EVDEVK(0x0f6) v3.13 KEY_WWAN */ /* Use: XF86XK_RFKill _EVDEVK(0x0f7) v2.6.33 KEY_RFKILL */ /* Use: XF86XK_AudioMicMute _EVDEVK(0x0f8) v3.1 KEY_MICMUTE */ +#define XF86XK_Ok _EVDEVK(0x160) /* KEY_OK */ +#define XF86XK_Select _EVDEVK(0x161) /* KEY_SELECT */ +#define XF86XK_Goto _EVDEVK(0x162) /* KEY_GOTO */ +#define XF86XK_Clear _EVDEVK(0x163) /* KEY_CLEAR */ +#define XF86XK_Power2 _EVDEVK(0x164) /* KEY_POWER2 */ +#define XF86XK_Option _EVDEVK(0x165) /* KEY_OPTION */ #define XF86XK_Info _EVDEVK(0x166) /* KEY_INFO */ +#define XF86XK_Time _EVDEVK(0x167) /* KEY_TIME */ +#define XF86XK_Vendor _EVDEVK(0x168) /* KEY_VENDOR */ +#define XF86XK_Archive _EVDEVK(0x169) /* KEY_ARCHIVE */ +#define XF86XK_Program _EVDEVK(0x16a) /* KEY_PROGRAM */ +#define XF86XK_Channel _EVDEVK(0x16b) /* KEY_CHANNEL */ +#define XF86XK_Favorites _EVDEVK(0x16c) /* KEY_FAVORITES */ +#define XF86XK_Epg _EVDEVK(0x16d) /* KEY_EPG */ +#define XF86XK_Pvr _EVDEVK(0x16e) /* KEY_PVR */ +#define XF86XK_Mhp _EVDEVK(0x16f) /* KEY_MHP */ +#define XF86XK_Language _EVDEVK(0x170) /* KEY_LANGUAGE */ +#define XF86XK_Title _EVDEVK(0x171) /* KEY_TITLE */ +#define XF86XK_Subtitle _EVDEVK(0x172) /* KEY_SUBTITLE */ /* Use: XF86XK_CycleAngle _EVDEVK(0x173) KEY_ANGLE */ /* Use: XF86XK_FullScreen _EVDEVK(0x174) v5.1 KEY_FULL_SCREEN */ +#define XF86XK_Mode _EVDEVK(0x175) /* KEY_MODE */ +#define XF86XK_Keyboard _EVDEVK(0x176) /* KEY_KEYBOARD */ #define XF86XK_AspectRatio _EVDEVK(0x177) /* v5.1 KEY_ASPECT_RATIO */ +#define XF86XK_Pc _EVDEVK(0x178) /* KEY_PC */ +#define XF86XK_Tv _EVDEVK(0x179) /* KEY_TV */ +#define XF86XK_Tv2 _EVDEVK(0x17a) /* KEY_TV2 */ +#define XF86XK_Vcr _EVDEVK(0x17b) /* KEY_VCR */ +#define XF86XK_Vcr2 _EVDEVK(0x17c) /* KEY_VCR2 */ +#define XF86XK_Sat _EVDEVK(0x17d) /* KEY_SAT */ +#define XF86XK_Sat2 _EVDEVK(0x17e) /* KEY_SAT2 */ +#define XF86XK_Cd _EVDEVK(0x17f) /* KEY_CD */ +#define XF86XK_Tape _EVDEVK(0x180) /* KEY_TAPE */ +#define XF86XK_Radio _EVDEVK(0x181) /* KEY_RADIO */ +#define XF86XK_Tuner _EVDEVK(0x182) /* KEY_TUNER */ +#define XF86XK_Player _EVDEVK(0x183) /* KEY_PLAYER */ +#define XF86XK_Text _EVDEVK(0x184) /* KEY_TEXT */ #define XF86XK_DVD _EVDEVK(0x185) /* KEY_DVD */ +#define XF86XK_Aux _EVDEVK(0x186) /* KEY_AUX */ +#define XF86XK_Mp3 _EVDEVK(0x187) /* KEY_MP3 */ #define XF86XK_Audio _EVDEVK(0x188) /* KEY_AUDIO */ /* Use: XF86XK_Video _EVDEVK(0x189) KEY_VIDEO */ +#define XF86XK_Directory _EVDEVK(0x18a) /* KEY_DIRECTORY */ +#define XF86XK_List _EVDEVK(0x18b) /* KEY_LIST */ +#define XF86XK_Memo _EVDEVK(0x18c) /* KEY_MEMO */ /* Use: XF86XK_Calendar _EVDEVK(0x18d) KEY_CALENDAR */ +#define XF86XK_Red _EVDEVK(0x18e) /* KEY_RED */ +#define XF86XK_Green _EVDEVK(0x18f) /* KEY_GREEN */ +#define XF86XK_Yellow _EVDEVK(0x190) /* KEY_YELLOW */ +#define XF86XK_Blue _EVDEVK(0x191) /* KEY_BLUE */ #define XF86XK_ChannelUp _EVDEVK(0x192) /* KEY_CHANNELUP */ #define XF86XK_ChannelDown _EVDEVK(0x193) /* KEY_CHANNELDOWN */ +#define XF86XK_First _EVDEVK(0x194) /* KEY_FIRST */ +#define XF86XK_Last _EVDEVK(0x195) /* KEY_LAST */ +#define XF86XK_Ab _EVDEVK(0x196) /* KEY_AB */ +#define XF86XK_Next _EVDEVK(0x197) /* KEY_NEXT */ +#define XF86XK_Restart _EVDEVK(0x198) /* KEY_RESTART */ +#define XF86XK_Slow _EVDEVK(0x199) /* KEY_SLOW */ /* Use: XF86XK_AudioRandomPlay _EVDEVK(0x19a) KEY_SHUFFLE */ #define XF86XK_Break _EVDEVK(0x19b) /* KEY_BREAK */ +#define XF86XK_Previous _EVDEVK(0x19c) /* KEY_PREVIOUS */ +#define XF86XK_Digits _EVDEVK(0x19d) /* KEY_DIGITS */ +#define XF86XK_Teen _EVDEVK(0x19e) /* KEY_TEEN */ +#define XF86XK_Twen _EVDEVK(0x19f) /* KEY_TWEN */ #define XF86XK_VideoPhone _EVDEVK(0x1a0) /* v2.6.20 KEY_VIDEOPHONE */ /* Use: XF86XK_Game _EVDEVK(0x1a1) v2.6.20 KEY_GAMES */ /* Use: XF86XK_ZoomIn _EVDEVK(0x1a2) v2.6.20 KEY_ZOOMIN */ @@ -339,8 +448,31 @@ #define XF86XK_NotificationCenter _EVDEVK(0x1bc) /* v5.10 KEY_NOTIFICATION_CENTER */ #define XF86XK_PickupPhone _EVDEVK(0x1bd) /* v5.10 KEY_PICKUP_PHONE */ #define XF86XK_HangupPhone _EVDEVK(0x1be) /* v5.10 KEY_HANGUP_PHONE */ +#define XF86XK_DelEol _EVDEVK(0x1c0) /* KEY_DEL_EOL */ +#define XF86XK_DelEos _EVDEVK(0x1c1) /* KEY_DEL_EOS */ +#define XF86XK_InsLine _EVDEVK(0x1c2) /* KEY_INS_LINE */ +#define XF86XK_DelLine _EVDEVK(0x1c3) /* KEY_DEL_LINE */ #define XF86XK_Fn _EVDEVK(0x1d0) /* KEY_FN */ #define XF86XK_Fn_Esc _EVDEVK(0x1d1) /* KEY_FN_ESC */ +#define XF86XK_FnF1 _EVDEVK(0x1d2) /* KEY_FN_F1 */ +#define XF86XK_FnF2 _EVDEVK(0x1d3) /* KEY_FN_F2 */ +#define XF86XK_FnF3 _EVDEVK(0x1d4) /* KEY_FN_F3 */ +#define XF86XK_FnF4 _EVDEVK(0x1d5) /* KEY_FN_F4 */ +#define XF86XK_FnF5 _EVDEVK(0x1d6) /* KEY_FN_F5 */ +#define XF86XK_FnF6 _EVDEVK(0x1d7) /* KEY_FN_F6 */ +#define XF86XK_FnF7 _EVDEVK(0x1d8) /* KEY_FN_F7 */ +#define XF86XK_FnF8 _EVDEVK(0x1d9) /* KEY_FN_F8 */ +#define XF86XK_FnF9 _EVDEVK(0x1da) /* KEY_FN_F9 */ +#define XF86XK_FnF10 _EVDEVK(0x1db) /* KEY_FN_F10 */ +#define XF86XK_FnF11 _EVDEVK(0x1dc) /* KEY_FN_F11 */ +#define XF86XK_FnF12 _EVDEVK(0x1dd) /* KEY_FN_F12 */ +#define XF86XK_Fn1 _EVDEVK(0x1de) /* KEY_FN_1 */ +#define XF86XK_Fn2 _EVDEVK(0x1df) /* KEY_FN_2 */ +#define XF86XK_FnD _EVDEVK(0x1e0) /* KEY_FN_D */ +#define XF86XK_FnE _EVDEVK(0x1e1) /* KEY_FN_E */ +#define XF86XK_FnF _EVDEVK(0x1e2) /* KEY_FN_F */ +#define XF86XK_FnS _EVDEVK(0x1e3) /* KEY_FN_S */ +#define XF86XK_FnB _EVDEVK(0x1e4) /* KEY_FN_B */ #define XF86XK_FnRightShift _EVDEVK(0x1e5) /* v5.10 KEY_FN_RIGHT_SHIFT */ /* Use: XK_braille_dot_1 _EVDEVK(0x1f1) v2.6.17 KEY_BRL_DOT1 */ /* Use: XK_braille_dot_2 _EVDEVK(0x1f2) v2.6.17 KEY_BRL_DOT2 */