From cde43c455b4d732ad2159c9da0c5568e828571e4 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 22 Nov 2016 14:54:06 +1000 Subject: [PATCH 1/2] hwdb: fix comment referring to rules file 60-keyboard.rules was renamed to 60-evdev.rules in 51c0c2869 Signed-off-by: Peter Hutterer --- hwdb/60-keyboard.hwdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb index c4031ab587..6d10fd7a9a 100644 --- a/hwdb/60-keyboard.hwdb +++ b/hwdb/60-keyboard.hwdb @@ -4,7 +4,7 @@ # scan codes to add to the AT keyboard's 'force-release' list. # # The lookup keys are composed in: -# 60-keyboard.rules +# 60-evdev.rules # # Note: The format of the "evdev:" prefix match key is a # contract between the rules file and the hardware data, it might From 086c001e29a86287d7b639cb71d1fc6408920c53 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 22 Nov 2016 15:21:24 +1000 Subject: [PATCH 2/2] hwdb: add XKB_FIXED_LAYOUT/VARIANT to the keyboard hwdb Yubikeys and other pseudo keyboards require that they are in the US layout, otherwise the data they send is invalid. Add two new keys to signal this to processes that handles (XKB) layouts. --- hwdb/60-keyboard.hwdb | 18 ++++++++++++++++++ hwdb/parse_hwdb.py | 7 +++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb index 6d10fd7a9a..5f81be5c47 100644 --- a/hwdb/60-keyboard.hwdb +++ b/hwdb/60-keyboard.hwdb @@ -42,6 +42,13 @@ # # To debug key presses and access scan code mapping data of # an input device use the commonly available tool: evtest(1). + +# A device with a fixed keyboard layout that must not be changed by +# the desktop environment may specify that layout as: +# XKB_FIXED_LAYOUT="us" +# XKB_FIXED_VARIANT="" +# Examples of such devices: the Yubikey or other key-code generating +# devices. # # To update this file, create a new file # /etc/udev/hwdb.d/70-keyboard.hwdb @@ -1244,3 +1251,14 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDIXONSP:pnDIXON*:pvr* KEYBOARD_KEY_a0=! # mute KEYBOARD_KEY_ae=! # volume down KEYBOARD_KEY_b0=! # volume up + +########################################################### +# Fixed layout devices +########################################################### + +# Yubico Yubico Yubikey II" +evdev:input:b0003v1050p0010* +# Yubico Yubikey NEO OTP+CCID +evdev:input:b0003v1050p0111* + XKB_FIXED_LAYOUT="us" + XKB_FIXED_VARIANT="" diff --git a/hwdb/parse_hwdb.py b/hwdb/parse_hwdb.py index d94d8d13d8..97c796863f 100755 --- a/hwdb/parse_hwdb.py +++ b/hwdb/parse_hwdb.py @@ -37,7 +37,7 @@ try: LineStart, LineEnd, ZeroOrMore, OneOrMore, Combine, Or, Optional, Suppress, Group, nums, alphanums, printables, - stringEnd, pythonStyleComment, + stringEnd, pythonStyleComment, QuotedString, ParseBaseException) except ImportError: print('pyparsing is not available') @@ -59,6 +59,7 @@ EOL = LineEnd().suppress() EMPTYLINE = LineEnd() COMMENTLINE = pythonStyleComment + EOL INTEGER = Word(nums) +STRING = QuotedString('"') REAL = Combine((INTEGER + Optional('.' + Optional(INTEGER))) ^ ('.' + INTEGER)) UDEV_TAG = Word(string.ascii_uppercase, alphanums + '_') @@ -76,7 +77,7 @@ def hwdb_grammar(): for category, conn in TYPES.items()) matchline = Combine(prefix + Word(printables + ' ' + '®')) + EOL propertyline = (White(' ', exact=1).suppress() + - Combine(UDEV_TAG - '=' - Word(alphanums + '_=:@*.! ') - Optional(pythonStyleComment)) + + Combine(UDEV_TAG - '=' - Word(alphanums + '_=:@*.! "') - Optional(pythonStyleComment)) + EOL) propertycomment = White(' ', exact=1) + pythonStyleComment + EOL @@ -103,6 +104,8 @@ def property_grammar(): ('POINTINGSTICK_SENSITIVITY', INTEGER), ('POINTINGSTICK_CONST_ACCEL', REAL), ('ID_INPUT_TOUCHPAD_INTEGRATION', Or(('internal', 'external'))), + ('XKB_FIXED_LAYOUT', STRING), + ('XKB_FIXED_VARIANT', STRING) ) fixed_props = [Literal(name)('NAME') - Suppress('=') - val('VALUE') for name, val in props]