Switch from external keymaps to internal (hwdb) keymaps

This commit imports the new internal keyboard handling from upstream.
This is a combination of many upstream commits, including those
that added code, removed old code, and updated the hwdb.
Some commits (hwdb ones specifically) were unrelated but brought
in anyways to keep the whole hwdb consistent.  Each upstream
commit included is as follows:

9d7d42bc406a2ac04639674281ce3ff6beeda790 - internal keymap support
0c959b39175b126fdb70ae00de37ca6d9c8ca3a1 - hwdb: keyboard -- add file
e8193554925a22b63bef0e77b8397b56d63a91ff - hwdb: keyboard -- update comments
c79d894d590fc9df4861738555cc43c477e33376 - hwdb: import data
aedc2eddd16e48d468e6ad0aea2caf00c7d37365 - hwdb: keyboard update
97a9313cafccf772ce03f5ebd36fe4d9d8412583 - hwdb: drop non-existant Samsung 900XC3 from keymap
ddc77f62244bb41d5c8261517e2e1ff1b763fc94 - switch from udev keymaps to hwdb
0c3815773331b263713f4f7b9d80bc1ca159338e - also remove keymaps-force-release directory
1b6bce89b3383904d0dab619dd38bff673f7286e - keymap: re-add Logitech USB corded/cordless models
bf89b99c5a39115112c2eda4c2103e2db54988d2 - 60-keyboard.hwdb: Fix syntax error
ce39bb6909578017aa10031638e724e038f0b859 - hwdb: data update, upstream
884c86812c51479496edd50b278383d7bb67baf0 - rules: keyboard - use builtin command

All code from each of the above commits is attributed to the original
authors.

There were some adjustments made in order to support the code differences
between upstream and eudev, which was done by myself.

Also of note is that the code can still be disabled via the --disable-keymaps
configure option, which was removed from upstream.

Signed-off-by: Ian Stakenvicius <axs@gentoo.org>
This commit is contained in:
Ian Stakenvicius 2013-07-24 14:00:06 -04:00
parent 87b69cb045
commit 35876baf30
96 changed files with 1684 additions and 1440 deletions

11
.gitignore vendored
View File

@ -53,13 +53,10 @@ src/gudev/gudevmarshal.h
src/gudev/GUdev-1.0.gir
src/gudev/GUdev-1.0.typelib
src/keymap/check-keymaps.sh
src/keymap/keyboard-force-release.sh
src/keymap/keymap
src/keymap/keys-from-name.gperf
src/keymap/keys-from-name.h
src/keymap/keys-to-name.h
src/keymap/keys.txt
src/udev/keyboard-keys-from-name.gperf
src/udev/keyboard-keys-from-name.h
src/udev/keyboard-keys-to-name.h
src/udev/keyboard-keys.txt
test/test-libudev
test/test-udev

View File

@ -8,12 +8,6 @@ SUBDIRS = \
docs \
test
if ENABLE_KEYMAP
SUBDIRS += \
keymaps \
keymaps-force-release
endif
if ENABLE_MANPAGES
SUBDIRS += \
man

164
UPSTREAM-206-commit-todo Normal file
View File

@ -0,0 +1,164 @@
21bf2ab082b42f03df5b4685df2fddc4d6e0d572
0778c3db87383ffcbe0fd303019c8b7e96b75394
f4f8f7b546508e1e7c94b072df685ac1342e8d7e
251cc8194228ac86c9a7a4c75a54a94cea2095c7
33b521be152f67cd722695ba9a2966eda5ee6765
efa3c0af8e0c8a9c7e3059bde65081b0020dfa6c
28f5c779e5513ab1301ac103471009711b0961e0
7e380bba1cd517570655c0e653e2239e33988cd1
ef7e6e0598b1711d7ccf741bb8e4e07a02ef33a7
408f281bc7d65c86563f46e99e07efd1a1d9e03a
fbce11397f4d19821a9dfe66ee3ebe11cad90057
orthographical mishaps that appeared in man/ in recent commits.
44affdc5fd20f812c25bc9d2b1a9fc04215274a1
3c475ce44e6b3b5bd6b22cff11a1322dabd95ba0
eb75d0ed059f56f0b5a8dcb8d490fae7063c76ca
459da00fe6496a77dcc31df964b59a17e9746c94
bf7f800f2b3e93ccd1229d4717166f3a4d3af72f
e7c431d3bcfdeeec5dcae0707145edb9a3f749aa
d4d60b316914770e9e671122394f96521841eac7
19cace379f3f680d3201cd257ab3ca6708b2d45d
83787333bd75f3fb5d2d844a5d5dbf68d93f7f3f
847ae0ae7f29e7bfb245d692409fc2948eab7d1d
9365b048c0c9f62ef7f696216ba049e6b4c2f2e5
3e2f69b779aa0f3466ebb45837e8507baa0832f7
7f0386f62c128896519aafa203caa1b3aafd4393
1ec96668dd0dcb19cc2f7b99cbf73df0d769c97d
60211b35070a20ed0e78a83f39619139d56f7745
f7f74d8ec46532f13a1dc418d550eaf76b339fa3
431c72dc3d482732a01d3ab929aa9b2c36422d46
3803cde44c3d949765bdf0e8bce06886224d40b4
dc7adf202b82fc0054c457ce6ca3bcedb88dde57
e2f2fb786059fbed410938f16e5cc8b851366b14
ef89eef77ee098a6828169a6d0d74128e236bcbd
86d7de36869429f20d75e34bb3ddb2cfd2470e75
aea38d8047a7a9370f8545007d242ede4a5cede1
6aaa8c2f783cd1b3ac27c5ce40625d032e7e3d71
61ad59b1314060958c6e1b1b480074e230b6ed3e
bc5cb1d525461c75e69ce1f82a52e223309cca7c
085b90af43fefd9ed195902c4b55f1da3c568554
e1b7e7ec9b34ae6ae54a4c8084395cbf2bfe9960
5d48cd27270e74f878f6ed3fe119e4cf3ef7f84e
98653cfb5005d0f505c48287d233d270ae6e75d6
466784c8710e5cb0e0b86a16506d992d7ec5b619
f04ca8c214e02e58877e994e5d1fa29a6abe5157
d4ac85c6f6d8547f8b835009ae431438de72df28
2f5df74a5ec135ab2baebf26af6f088e5b4b8205
9b9b3d36b8ffe5b41c1455bffd44a9d11efc8aee
44bc6e1fe0171af19451b5586f7fdd08853ccf5b
a54e3b3d6a4fe28a39729f4c5ad11cd26706110c
c2654883624885696edccd2a202873998ec208f1
059b7a9aad6c2e60957761b8f63267861c859be8
52990c2e0eabd1c11280f553f858062d4165b92f
4b744dfabebd10bf0f13b64060f44b1bd6c82704
d121b396ccb19dc33aacfc75a7f7a719914267c8
affba8e90243526be673ad9f9b306a740b8824a6
1070f974f7a1b6ba012e352b9d635d3902eca244
2ce982f9b1a9f409b10fc4c0f3faa6b594b58df9
20422497109aaba1d214f1597530de8b8788a526
c3bb87dbab8b79bb9253407cb5b7f3e6fe8db395
c961869ac580f5a3aea3737f9e45af71b0983662
c72aadd1851096ea979f68b4e32cca71746ccdc4
956eaf2b8d6c9999024705ddadc7393bc707de02
69af45035913e7119cffd94c542bd3039600e45d
4ad16808c02e3eb6c1ec8500b3d086cc28e9b75a
248fc619b5e3e24d78f171f95b85916eee7987bd
dd94c17e7da89fa612952119ac825116dc5a8deb
32b2634edf218e250b84615bbf106b2baf42d69b
c5757cc8dbcddb3e8b13ebba4ea4b36589bfd3db
83a05f2c89d228a9a92b998b1cbd4a51f3693711
db0c1e3bd39c9151ba4ac8e029ec77a4ec923bd1
6b78df0a6ec75f25705a0f78ef895b95ab75a7ea
84b6ad702e64db534f67ce32d4dd2fec00a16784
6cf2f1d94dc7749bcdff5385838bdc8eba9c3001
e7256c5c137e58fb3dc1ebca8e5845733a5f733c
042e33ae3a7feb08c8105f1345fd244315109405
a65f06bb27688a6738f2f94b7f055f4c66768d63
daabe5491ee0c78b735336c9e69b7f6ea57464e0
21c72713ae89cfc2c4096c383af9bb482665e0a6
9c33d34fe4cd0bc58ea12e5258e595647c9e0b29
6ed80a4e346883b99263a1a13505ef6afcbc09c3
a331b5e6d4724365bad9edeb9420c7e26e7f50da
18d4e7c26e7806ac363d19989df7144d5058ce41
7080ea16b5a0bfd71bfcdffc998e91f5273d47f9
36c0868b67a9387d39c97983d3d22cfce0fedc62
f3c19b70fa970321ec06d3bd2497f5abd525efc9
Revert 90fc91d0065 again. There is no 900XC3 model, that's 900X3C and
b31c6d8d4f33502d6060e708f5252ee2ea8648ad
7801356442578ff6e1c65844eb9e65c819af4660
3a83211689bdf4ab617a4fb79e11980c50918123
fa7deadb074dfbe473cf3bd942768dbd94cbf7c3
65cd79f7f574532e5f91d581aaff923c29655bbd
31a7eb86f18b0466681d6fbe80c148f96c551c80
77a9e8de6572db6ba5ca49023937b67fc835f356
8cf3ca80680b43015971cbbf4625517ae859d50c
10fb4e35fd8a44340f695e49230dc61b5766d47a
e7d90b71272f921b2d5a8f73a26fdd19f546ad07
dac70dc77769f32b202ab07984687593de22f6b3
d907c2086716681936755f28ac80b3445c6d0196
248aa28ff27418ad074439014d476ed8cd2e01db
36398225b44367c89f11f42810e4f79652b09a09
travis: Add a travis.yml for doing CI after commits
b4ecc959733d9d258d8ed0e8179368ee844a5578
b8547c10c82994f2b8eab4510629139439b49371
6c5a28255bea4385289149b4617c86a24eec519f
3eb1395706ca0a00ac15d59098a0250b0377e6b5
bf502e636be8f76e05b0334b4e78ea7a398ba241
6aea6d10f460853111ca8744201ec8dade97de3c
7aa4fa34f76b0d9b031f0a5ea941c7fa10cebbee
92d430a9e03056c0f62ed49149d59aed0046d0dd
6a75304e41e4487d840057a0e5f9972e141e4540
b98e3866fddf2edfa13fc1b4323aa84f89336ff2
3d56f7df4411684404470d36ddec0d90649a13a3
9f64229f9ca69f5652b238a67531432e56108bd6
This reverts cd3069559a09b4e4f85a6f02aa8f0521f48359ca.
d7b478b448d16b0f755e7e1c2eb4df83859034b2
b463b81399f0bc0d54107ef819cc0f843473c7d7
d868475ad62547f0a034dfaf038aff31b3d05372
479fe882ae92e4c2eac3c995cd0d23d4c604889f
b54022fb92580022c5e830fbe4280992f5b3a770
433dd100442e8197868def975c6fd38b48dc6439
47a1454f707dff2e5d1db2f8bfcc406805d4d450
cd3069559a09b4e4f85a6f02aa8f0521f48359ca
66a69314941b5020f57cda943095413c40d677d8
f440e1bb8a0b1262c7649da502d0e9358019b968
1e1ddecf405fdeb5a073c0696fafb50946af60d2
b9ec9359369f224bfb13db616f97401a6a177bd8
665f8316f435772ed539be5e164a85cd188f84b4
8e7076caae32a560a11c1643b53fc4f12db4a6b1
554604b3073467af75dc94fac9e2343148603289
c14901bdebb311531fb85b02c7c6eebf6e8e4388
042f9f5e5e76cf0e3cbfd009abd2add0366cdeca
9d12709626bccc0cae677a7035f62efe6aabb4ab
05b23cae8ebf6fbafd23ab8a0b0cfed747745d15
d7bd3de0654669e65b9642c248c5fa6d1d9a9f61
8a84192905a9845fda31b65cc433127f9c2f95ae
be2c1bd2a843aa61901086fccbae15b3aa085fb1
a8833944647bfd10e43569646be954db5cbac54e
e2ca86cf78f911a8be51f0224796e24883019139
852752fca2f73323e3c25b33348b3c92458665ae
f7db7a691c3f532cf60886312459f2baea755283
4c5420a0c1429de866c4dfbe2f973cfa241bdbe4
049b4474b35d0b854f87b0795a5113665413f6a4
8aa75193662d0e18d7c21ee9d546b7f3c8b8bc14
befb5b6a71c175d523644edbddd01b4b722fe956
f6940be7825755d77ade4cd42231aab9e3580623
bafb15bab99887d1b6b8a35136531bac6c3876a6
aa1936ea1a89c2bb968ba33e3274898a4eeae771
8577e67245fc5d38bfdc32349388769895202bc4
66713f77e851c12452729d37e22ef66673852b8f
ac9ef33358b6e6277cfca86a85a49a022824549e
49998ede042907b0ba7f5e85e02fa569da26bc04
7fb3ee51c1b37738fd0ea2c81dfd6c336144698a
f2d4f98d5873e0649b79b04b967fc9625ab3a350
6797c324a653f119a3d7133122648aaa4878ddd6
72673e866a83e6aafdbb599eb3eff2617b7dc79d
b9316fb0f39fff3df792e4e72eb491ec4265b91f
71445ae75b0e9954d141e5f0ee97803b406ea332
d0ede8f1c555500dceebd3cc8a8e877ed1d89de6
94c01aeb1049a87435e046245b8e5d975b778c60
0c5778a26b14093c79bfc9e8b34e2aeeb1d79b87
b170dd803d334234ad7edd0dc7bb34860832bc07
6fa4853328e3d78d092172fa54effb7e785d0a85
376dd21dc0757e8a6d3f60d6d21bb802a90f1983
bdeeb6b543a2a2d0a494f17b85f1498859cdfc2f

View File

@ -1,3 +1,11 @@
2013-07-24
* Incorporate migration from external to internal keymaps. About 13 commits were cherry-picked
out of upstream, after and including 9d7d42bc406a2ac04639674281ce3ff6beeda790, to assemble
this commit in eudev. Note that between this commit and upstream release 206 there are still
many commits that need to be evaluated -- the commits are temporarily stored in the file
'UPSTREAM-206-commit-todo'.
2013-07-11
* Prepare 1.1 release. Uptream imports are up to date as of 2013-07-10. All commits

View File

@ -1,6 +1,6 @@
AC_PREREQ([2.68])
AC_INIT([eudev],[1.1],[https://github.com/gentoo/eudev/issues])
AC_INIT([eudev],[1.2],[https://github.com/gentoo/eudev/issues])
AC_SUBST(UDEV_VERSION, 205)
AC_CONFIG_SRCDIR([src/udev/udevd.c])
@ -231,6 +231,7 @@ if test "x$enable_keymap" = "xyes"; then
if test -z "$GPERF" ; then
AC_MSG_ERROR([*** gperf not found])
fi
AC_DEFINE([ENABLE_KEYMAP], [1], [Define if we are enabling rule generator])
fi
AM_CONDITIONAL([ENABLE_KEYMAP], [test "x$enable_keymap" = "xyes"])
@ -313,8 +314,6 @@ AC_CONFIG_FILES([Makefile
docs/libudev/Makefile
docs/libudev/version.xml
hwdb/Makefile
keymaps-force-release/Makefile
keymaps/Makefile
man/Makefile
rules/Makefile
rule_generator/Makefile
@ -330,9 +329,6 @@ AC_CONFIG_FILES([Makefile
src/v4l_id/Makefile
src/gudev/Makefile
src/gudev/gudev-1.0.pc
src/keymap/Makefile
src/keymap/check-keymaps.sh
src/keymap/keyboard-force-release.sh
src/libudev/Makefile
src/libudev/libudev.pc
src/udev/Makefile

View File

@ -7295,7 +7295,7 @@ OUI:0050C298C*
ID_OUI_FROM_DATABASE=MGM-Devices Oy
OUI:0050C298D*
ID_OUI_FROM_DATABASE=Mecos Traxler AG
ID_OUI_FROM_DATABASE=Mecos AG
OUI:0050C298E*
ID_OUI_FROM_DATABASE=Link Technologies, Inc
@ -13099,6 +13099,48 @@ OUI:40D85512D*
OUI:40D85512E*
ID_OUI_FROM_DATABASE=Canfield Scientific, Inc.
OUI:40D855130*
ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH
OUI:40D855131*
ID_OUI_FROM_DATABASE=EMAC, INC.
OUI:40D855132*
ID_OUI_FROM_DATABASE=AeroVision Avionics, Inc
OUI:40D855133*
ID_OUI_FROM_DATABASE=Tattile srl
OUI:40D855134*
ID_OUI_FROM_DATABASE=digitech GmbH &amp; Co. KG
OUI:40D855135*
ID_OUI_FROM_DATABASE=GLOBALCOM ENGINEERING SRL
OUI:40D855136*
ID_OUI_FROM_DATABASE=Devriecom B.V.
OUI:40D855137*
ID_OUI_FROM_DATABASE=GDE Polska
OUI:40D855138*
ID_OUI_FROM_DATABASE=Calon Associates Limited
OUI:40D855139*
ID_OUI_FROM_DATABASE=WOW System
OUI:40D85513A*
ID_OUI_FROM_DATABASE=Supplier Ind. e Com de Eletroeletrônicos
OUI:40D85513B*
ID_OUI_FROM_DATABASE=Davin Technologies Co.,Ltd
OUI:40D85513C*
ID_OUI_FROM_DATABASE=shanghai anjian Information technology co. , ltd.
OUI:40D85513D*
ID_OUI_FROM_DATABASE=Perm Scientific-Industrial Instrument Making Company JSC
OUI:000000*
ID_OUI_FROM_DATABASE=XEROX CORPORATION
@ -14675,7 +14717,7 @@ OUI:00020D*
ID_OUI_FROM_DATABASE=Micronpc.com
OUI:00020E*
ID_OUI_FROM_DATABASE=ECI Telecom, Ltd., NSD-US
ID_OUI_FROM_DATABASE=ECI Telecom, Ltd
OUI:00020F*
ID_OUI_FROM_DATABASE=AATR
@ -46093,6 +46135,9 @@ OUI:0075E1*
OUI:00789E*
ID_OUI_FROM_DATABASE=SAGEMCOM
OUI:007DFA*
ID_OUI_FROM_DATABASE=Volkswagen Group of America
OUI:007F28*
ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
@ -51148,6 +51193,9 @@ OUI:044BFF*
OUI:044CEF*
ID_OUI_FROM_DATABASE=Fujian Sanao Technology Co.,Ltd
OUI:044F8B*
ID_OUI_FROM_DATABASE=Adapteva, Inc.
OUI:044FAA*
ID_OUI_FROM_DATABASE=Ruckus Wireless
@ -52102,6 +52150,9 @@ OUI:0C57EB*
OUI:0C5A19*
ID_OUI_FROM_DATABASE=Axtion Sdn Bhd
OUI:0C5CD8*
ID_OUI_FROM_DATABASE=DOLI Elektronik GmbH
OUI:0C6076*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
@ -52171,6 +52222,9 @@ OUI:0C93FB*
OUI:0C96BF*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
OUI:0C9B13*
ID_OUI_FROM_DATABASE=Shanghai Magic Mobile Telecommunication Co.Ltd.
OUI:0C9D56*
ID_OUI_FROM_DATABASE=Consort Controls Ltd
@ -52618,6 +52672,9 @@ OUI:141BF0*
OUI:1423D7*
ID_OUI_FROM_DATABASE=EUTRONIX CO., LTD.
OUI:142BD2*
ID_OUI_FROM_DATABASE=Armtel Ltd.
OUI:142D8B*
ID_OUI_FROM_DATABASE=Incipio Technologies, Inc
@ -52924,6 +52981,9 @@ OUI:187A93*
OUI:187C81*
ID_OUI_FROM_DATABASE=Valeo Vision Systems
OUI:187ED5*
ID_OUI_FROM_DATABASE=shenzhen kaism technology Co. Ltd
OUI:1880CE*
ID_OUI_FROM_DATABASE=Barberry Solutions Ltd
@ -53122,6 +53182,9 @@ OUI:1C48F9*
OUI:1C4AF7*
ID_OUI_FROM_DATABASE=AMON INC
OUI:1C4BB9*
ID_OUI_FROM_DATABASE=SMG ENTERPRISE, LLC
OUI:1C4BD6*
ID_OUI_FROM_DATABASE=AzureWave
@ -53608,6 +53671,9 @@ OUI:245FDF*
OUI:246278*
ID_OUI_FROM_DATABASE=sysmocom - systems for mobile communications GmbH
OUI:2464EF*
ID_OUI_FROM_DATABASE=CYG SUNRI CO.,LTD.
OUI:246511*
ID_OUI_FROM_DATABASE=AVM GmbH
@ -53626,6 +53692,9 @@ OUI:24767D*
OUI:247703*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:248000*
ID_OUI_FROM_DATABASE=Westcontrol AS
OUI:2481AA*
ID_OUI_FROM_DATABASE=KSH International Co., Ltd.
@ -53833,6 +53902,9 @@ OUI:284846*
OUI:284C53*
ID_OUI_FROM_DATABASE=Intune Networks
OUI:284D92*
ID_OUI_FROM_DATABASE=Luminator
OUI:284FCE*
ID_OUI_FROM_DATABASE=Liaoning Wontel Science and Technology Development Co.,Ltd.
@ -54109,12 +54181,18 @@ OUI:2C44FD*
OUI:2C542D*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:2C553C*
ID_OUI_FROM_DATABASE=Gainspeed, Inc.
OUI:2C59E5*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:2C5AA3*
ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD
OUI:2C5FF3*
ID_OUI_FROM_DATABASE=Pertronic Industries
OUI:2C625A*
ID_OUI_FROM_DATABASE=Finest Security Systems Co., Ltd
@ -54526,6 +54604,9 @@ OUI:3451C9*
OUI:345B11*
ID_OUI_FROM_DATABASE=EVI HEAT AB
OUI:346178*
ID_OUI_FROM_DATABASE=The Boeing Company
OUI:34684A*
ID_OUI_FROM_DATABASE=Teraworks Co., Ltd.
@ -54958,6 +55039,9 @@ OUI:3C0FC1*
OUI:3C106F*
ID_OUI_FROM_DATABASE=ALBAHITH TECHNOLOGIES
OUI:3C15EA*
ID_OUI_FROM_DATABASE=TESCOM CO., LTD.
OUI:3C1915*
ID_OUI_FROM_DATABASE=GFI Chrono Time
@ -56140,6 +56224,9 @@ OUI:50252B*
OUI:502690*
ID_OUI_FROM_DATABASE=Fujitsu Limited
OUI:5027C7*
ID_OUI_FROM_DATABASE=TECHNART Co.,Ltd
OUI:502A7E*
ID_OUI_FROM_DATABASE=Smart electronic GmbH
@ -56284,6 +56371,9 @@ OUI:50AF73*
OUI:50B7C3*
ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
OUI:50B888*
ID_OUI_FROM_DATABASE=wi2be Tecnologia S/A
OUI:50B8A2*
ID_OUI_FROM_DATABASE=ImTech Technologies LLC,
@ -56480,7 +56570,7 @@ OUI:54A51B*
ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
OUI:54A54B*
ID_OUI_FROM_DATABASE=NSC Communiaction Siberia Ltd
ID_OUI_FROM_DATABASE=NSC Communications Siberia Ltd
OUI:54A619*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
@ -56614,6 +56704,9 @@ OUI:5856E8*
OUI:58570D*
ID_OUI_FROM_DATABASE=Danfoss Solar Inverters
OUI:58639A*
ID_OUI_FROM_DATABASE=TPL SYSTEMES
OUI:5865E6*
ID_OUI_FROM_DATABASE=INFOMARK CO., LTD.
@ -56686,6 +56779,9 @@ OUI:589835*
OUI:58986F*
ID_OUI_FROM_DATABASE=Revolution Display
OUI:58A2B5*
ID_OUI_FROM_DATABASE=LG Electronics
OUI:58A76F*
ID_OUI_FROM_DATABASE=iD corporation
@ -57037,6 +57133,9 @@ OUI:601E02*
OUI:6021C0*
ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
OUI:6024C1*
ID_OUI_FROM_DATABASE=Jiangsu Zhongxun Electronic Technology Co., Ltd
OUI:602A54*
ID_OUI_FROM_DATABASE=CardioTek B.V.
@ -57157,6 +57256,9 @@ OUI:60A10A*
OUI:60A44C*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
OUI:60A9B0*
ID_OUI_FROM_DATABASE=Merchandising Technologies, Inc
OUI:60B185*
ID_OUI_FROM_DATABASE=ATH system
@ -57895,6 +57997,9 @@ OUI:6C5779*
OUI:6C5A34*
ID_OUI_FROM_DATABASE=Shenzhen Haitianxiong Electronic Co., Ltd.
OUI:6C5AB5*
ID_OUI_FROM_DATABASE=TCL Technoly Electronics (Huizhou) Co., Ltd.
OUI:6C5CDE*
ID_OUI_FROM_DATABASE=SunReports, Inc.
@ -58687,6 +58792,9 @@ OUI:78593E*
OUI:78595E*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:785968*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.,Ltd.
OUI:785C72*
ID_OUI_FROM_DATABASE=Hioso Technology Co., Ltd.
@ -58840,6 +58948,9 @@ OUI:78D5B5*
OUI:78D6F0*
ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
OUI:78D99F*
ID_OUI_FROM_DATABASE=NuCom HK Ltd.
OUI:78DAB3*
ID_OUI_FROM_DATABASE=GBO Technology
@ -58909,6 +59020,9 @@ OUI:7C0507*
OUI:7C051E*
ID_OUI_FROM_DATABASE=RAFAEL LTD.
OUI:7C0623*
ID_OUI_FROM_DATABASE=Ultra Electronics, CIS
OUI:7C08D9*
ID_OUI_FROM_DATABASE=Shanghai Engineering Research Center for Broadband Technologies and Applications
@ -59416,12 +59530,18 @@ OUI:8400D2*
OUI:840B2D*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS CO., LTD
OUI:840F45*
ID_OUI_FROM_DATABASE=Shanghai GMT Digital Technologies Co., Ltd
OUI:841715*
ID_OUI_FROM_DATABASE=GP Electronics (HK) Ltd.
OUI:841888*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:841B38*
ID_OUI_FROM_DATABASE=Shenzhen Excelsecu Data Technology Co.,Ltd
OUI:841B5E*
ID_OUI_FROM_DATABASE=NETGEAR
@ -59689,6 +59809,9 @@ OUI:8841C1*
OUI:8843E1*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:8844F6*
ID_OUI_FROM_DATABASE=Nokia Corporation
OUI:88462A*
ID_OUI_FROM_DATABASE=Telechips Inc.
@ -59725,6 +59848,9 @@ OUI:887398*
OUI:887556*
ID_OUI_FROM_DATABASE=Cisco
OUI:88789C*
ID_OUI_FROM_DATABASE=Game Technologies SA
OUI:8886A0*
ID_OUI_FROM_DATABASE=Simton Technologies, Ltd.
@ -60562,6 +60688,9 @@ OUI:94DE0E*
OUI:94DE80*
ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
OUI:94DF4E*
ID_OUI_FROM_DATABASE=Wistron InfoComm(Kunshan)Co.,Ltd.
OUI:94DF58*
ID_OUI_FROM_DATABASE=IJ Electron CO.,Ltd.
@ -60979,6 +61108,9 @@ OUI:9C9811*
OUI:9C9C1D*
ID_OUI_FROM_DATABASE=Starkey Labs Inc.
OUI:9CA10A*
ID_OUI_FROM_DATABASE=SCLE SFE
OUI:9CA134*
ID_OUI_FROM_DATABASE=Nike, Inc.
@ -62410,6 +62542,9 @@ OUI:B439D6*
OUI:B43DB2*
ID_OUI_FROM_DATABASE=Degreane Horizon
OUI:B43E3B*
ID_OUI_FROM_DATABASE=Viableware, Inc
OUI:B4417A*
ID_OUI_FROM_DATABASE=ShenZhen Gongjin Electronics Co.,Ltd
@ -62488,6 +62623,9 @@ OUI:B4A4E3*
OUI:B4A5A9*
ID_OUI_FROM_DATABASE=MODI GmbH
OUI:B4A82B*
ID_OUI_FROM_DATABASE=Histar
OUI:B4A95A*
ID_OUI_FROM_DATABASE=Avaya, Inc
@ -63037,6 +63175,9 @@ OUI:BC926B*
OUI:BC9680*
ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
OUI:BC9889*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
OUI:BC99BC*
ID_OUI_FROM_DATABASE=FonSee Technology Inc.
@ -63307,6 +63448,9 @@ OUI:C0C3B6*
OUI:C0C520*
ID_OUI_FROM_DATABASE=Ruckus Wireless
OUI:C0C687*
ID_OUI_FROM_DATABASE=Cisco SPVTG
OUI:C0C946*
ID_OUI_FROM_DATABASE=MITSUYA LABORATORIES INC.
@ -63514,6 +63658,9 @@ OUI:C49300*
OUI:C49313*
ID_OUI_FROM_DATABASE=100fio networks technology llc
OUI:C49380*
ID_OUI_FROM_DATABASE=Speedytel technology
OUI:C495A2*
ID_OUI_FROM_DATABASE=SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD
@ -64177,6 +64324,9 @@ OUI:D023DB*
OUI:D02788*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
OUI:D02C45*
ID_OUI_FROM_DATABASE=littleBits Electronics, Inc.
OUI:D02DB3*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
@ -64267,6 +64417,9 @@ OUI:D08CFF*
OUI:D093F8*
ID_OUI_FROM_DATABASE=Stonestreet One LLC
OUI:D095C7*
ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
OUI:D09B05*
ID_OUI_FROM_DATABASE=Emtronix
@ -64588,6 +64741,9 @@ OUI:D4AAFF*
OUI:D4AC4E*
ID_OUI_FROM_DATABASE=BODi rS, LLC
OUI:D4AD2D*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
OUI:D4AE52*
ID_OUI_FROM_DATABASE=Dell Inc
@ -64714,6 +64870,9 @@ OUI:D824BD*
OUI:D826B9*
ID_OUI_FROM_DATABASE=Guangdong Coagent Electronics S &T Co., Ltd.
OUI:D8270C*
ID_OUI_FROM_DATABASE=MaxTronic International Co., Ltd.
OUI:D828C9*
ID_OUI_FROM_DATABASE=General Electric Consumer and Industrial
@ -65134,6 +65293,9 @@ OUI:DCF858*
OUI:DCFAD5*
ID_OUI_FROM_DATABASE=STRONG Ges.m.b.H.
OUI:DCFB02*
ID_OUI_FROM_DATABASE=Buffalo Inc.
OUI:E005C5*
ID_OUI_FROM_DATABASE=TP-LINK Technologies Co.,Ltd.
@ -65302,6 +65464,9 @@ OUI:E0ABFE*
OUI:E0AE5E*
ID_OUI_FROM_DATABASE=ALPS Co,. Ltd.
OUI:E0AEB2*
ID_OUI_FROM_DATABASE=Bender GmbH &amp; Co.KG
OUI:E0AEED*
ID_OUI_FROM_DATABASE=LOENK
@ -65920,6 +66085,9 @@ OUI:EC233D*
OUI:EC2368*
ID_OUI_FROM_DATABASE=IntelliVoice Co.,Ltd.
OUI:EC2AF0*
ID_OUI_FROM_DATABASE=Ypsomed AG
OUI:EC2C49*
ID_OUI_FROM_DATABASE=University of Tokyo
@ -66646,6 +66814,9 @@ OUI:F80F84*
OUI:F81037*
ID_OUI_FROM_DATABASE=Atopia Systems, LP
OUI:F81547*
ID_OUI_FROM_DATABASE=Avaya, Inc
OUI:F81654*
ID_OUI_FROM_DATABASE=Intel Corporate
@ -66694,6 +66865,9 @@ OUI:F83DFF*
OUI:F842FB*
ID_OUI_FROM_DATABASE=Yasuda Joho Co.,ltd.
OUI:F845AD*
ID_OUI_FROM_DATABASE=Konka Group Co., Ltd.
OUI:F8462D*
ID_OUI_FROM_DATABASE=SYNTEC Incorporation
@ -66703,6 +66877,9 @@ OUI:F8472D*
OUI:F84897*
ID_OUI_FROM_DATABASE=Hitachi, Ltd.
OUI:F84A7F*
ID_OUI_FROM_DATABASE=Innometriks Inc
OUI:F84ABF*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@ -66718,6 +66895,9 @@ OUI:F8516D*
OUI:F852DF*
ID_OUI_FROM_DATABASE=VNL Europe AB
OUI:F854AF*
ID_OUI_FROM_DATABASE=ECI Telecom Ltd.
OUI:F85BC9*
ID_OUI_FROM_DATABASE=M-Cube Spa
@ -66787,6 +66967,9 @@ OUI:F89FB8*
OUI:F8A03D*
ID_OUI_FROM_DATABASE=Dinstar Technologies Co., Ltd.
OUI:F8A45F*
ID_OUI_FROM_DATABASE=Beijing Xiaomi communications co.,ltd
OUI:F8A9DE*
ID_OUI_FROM_DATABASE=PUISSANCE PLUS

View File

@ -1898,6 +1898,9 @@ pci:v00001002d00004242*
pci:v00001002d00004242sv00001002sd000002AA*
ID_MODEL_FROM_DATABASE=Radeon 8500 AIW DV Edition
pci:v00001002d00004243*
ID_MODEL_FROM_DATABASE=R200 PCI Bridge [All-in-Wonder Radeon 8500DV]
pci:v00001002d00004336*
ID_MODEL_FROM_DATABASE=RS100 [Radeon IGP 320M]
@ -3920,6 +3923,9 @@ pci:v00001002d00005A20*
pci:v00001002d00005A23*
ID_MODEL_FROM_DATABASE=RD990 I/O Memory Management Unit (IOMMU)
pci:v00001002d00005A31*
ID_MODEL_FROM_DATABASE=RC410 Host Bridge
pci:v00001002d00005A33*
ID_MODEL_FROM_DATABASE=Radeon Xpress 200 Host Bridge
@ -6183,7 +6189,7 @@ pci:v00001002d00006840sv000017AAsd00005103*
ID_MODEL_FROM_DATABASE=Radeon HD 7670M
pci:v00001002d00006841*
ID_MODEL_FROM_DATABASE=Thames [Radeon 7550M/7570M/7650M]
ID_MODEL_FROM_DATABASE=Thames [Radeon HD 7550M/7570M/7650M]
pci:v00001002d00006841sv00001028sd00000561*
ID_MODEL_FROM_DATABASE=Radeon HD 7650M
@ -8372,6 +8378,45 @@ pci:v00001002d00009552sv0000174Bsd00003000*
pci:v00001002d00009553*
ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v]
pci:v00001002d00009553sv00001025sd0000015E*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv00001025sd0000017D*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv00001025sd00000205*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv00001025sd00000206*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv00001025sd00000237*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv00001028sd000002BE*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv00001028sd000002E8*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4530
pci:v00001002d00009553sv0000103Csd00003624*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4530
pci:v00001002d00009553sv0000103Csd00003628*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4530
pci:v00001002d00009553sv0000103Csd00003636*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4530
pci:v00001002d00009553sv00001043sd00001B32*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv00001043sd00001B42*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv0000104Dsd00009056*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
pci:v00001002d00009553sv00001179sd0000FF82*
ID_MODEL_FROM_DATABASE=Satellite L505-13T GPU (Mobility Radeon HD 5145)
@ -10904,6 +10949,12 @@ pci:v00001022d00007813*
pci:v00001022d00007814*
ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller
pci:v00001022d00007900*
ID_MODEL_FROM_DATABASE=CZ SATA Controller [IDE mode]
pci:v00001022d0000790B*
ID_MODEL_FROM_DATABASE=CZ SMBus Controller
pci:v00001022d00009600*
ID_MODEL_FROM_DATABASE=RS780 Host Bridge
@ -43791,7 +43842,7 @@ pci:v000014E4d00004720*
ID_MODEL_FROM_DATABASE=BCM4712 MIPS CPU
pci:v000014E4d00004727*
ID_MODEL_FROM_DATABASE=BCM4313 802.11b/g/n Wireless LAN Controller
ID_MODEL_FROM_DATABASE=BCM4313 802.11bgn Wireless Network Adapter
pci:v000014E4d00004727sv00001028sd00000010*
ID_MODEL_FROM_DATABASE=Inspiron M5010 / XPS 8300
@ -49016,6 +49067,9 @@ pci:v000018F7d00000025*
pci:v000018F7d00000026*
ID_MODEL_FROM_DATABASE=SuperFSCC-LVDS Serial PCI Adapter [Fastcom]
pci:v000018F7d00000027*
ID_MODEL_FROM_DATABASE=FSCC/4 Serial PCIe Adapter [Fastcom]
pci:v000018FB*
ID_VENDOR_FROM_DATABASE=Resilience Corporation
@ -50384,6 +50438,21 @@ pci:v00001AE8d00000A44*
pci:v00001AE8d00000E44*
ID_MODEL_FROM_DATABASE=microEnable IV-GigE x4
pci:v00001AE9*
ID_VENDOR_FROM_DATABASE=Wilocity Ltd.
pci:v00001AE9d00000101*
ID_MODEL_FROM_DATABASE=Wil6200 PCI Express Root Port
pci:v00001AE9d00000200*
ID_MODEL_FROM_DATABASE=Wil6200 PCI Express Port
pci:v00001AE9d00000201*
ID_MODEL_FROM_DATABASE=Wil6200 Wireless PCI Express Port
pci:v00001AE9d00000301*
ID_MODEL_FROM_DATABASE=Wil6200 802.11ad Wireless Network Adapter
pci:v00001AEC*
ID_VENDOR_FROM_DATABASE=Wolfson Microelectronics
@ -50663,6 +50732,9 @@ pci:v00001BB0*
pci:v00001BB0d00000002*
ID_MODEL_FROM_DATABASE=OmniCube Accelerator OA-3000
pci:v00001BB0d00000010*
ID_MODEL_FROM_DATABASE=OmniCube Accelerator OA-3000-2
pci:v00001BB3*
ID_VENDOR_FROM_DATABASE=Bluecherry

1011
hwdb/60-keyboard.hwdb Normal file

File diff suppressed because it is too large Load Diff

View File

@ -8,3 +8,8 @@ dist_udevhwdb_DATA = \
20-pci-vendor-model.hwdb \
20-usb-classes.hwdb \
20-usb-vendor-model.hwdb
if ENABLE_KEYMAP
dist_udevhwdb_DATA += \
60-keyboard.hwdb
endif

View File

@ -1,10 +0,0 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
dist_udevkeymapforcere_DATA = \
dell-touchpad \
dell-xps \
hp-other \
samsung-other \
samsung-series-3 \
samsung-series-9 \
common-volume-keys

View File

@ -1,3 +0,0 @@
0xa0 # mute
0xae # volume down
0xb0 # volume up

View File

@ -1 +0,0 @@
0x9E

View File

@ -1 +0,0 @@
0x8C

View File

@ -1,3 +0,0 @@
# list of scancodes (hex or decimal), optional comment
0xd8 # Touchpad off
0xd9 # Touchpad on

View File

@ -1,10 +0,0 @@
# list of scancodes (hex or decimal), optional comment
0x82 # Fn+F4 CRT/LCD
0x83 # Fn+F2 battery
0x84 # Fn+F5 backlight on/off
0x86 # Fn+F9 WLAN
0x88 # Fn+Up brightness up
0x89 # Fn+Down brightness down
0xB3 # Fn+F8 switch power mode (battery/dynamic/performance)
0xF7 # Fn+F10 Touchpad on
0xF9 # Fn+F10 Touchpad off

View File

@ -1,2 +0,0 @@
0xCE # Fn+F1 launch control setting
0xD5 # Fn+F12 Wi-Fi toggle

View File

@ -1,6 +0,0 @@
# list of scancodes (hex or decimal), optional comment
0xCE # Fn+F8 keyboard backlight up
0x8D # Fn+F7 keyboard backlight down
0x97 # Fn+F12 Wi-Fi toggle
0x96 # Fn+F1 performance mode (?)
0xD5 # Fn+F6 battery life extender

View File

@ -1,3 +0,0 @@
Because of the parsing done by src/keymap/check-keymaps.sh,
you should not put anything in this directory except for
keymap files and files begining with Makefile.

View File

@ -1,73 +0,0 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
KEYMAPS = \
acer \
acer-aspire_5720 \
acer-aspire_8930 \
acer-aspire_5920g \
acer-aspire_6920 \
acer-travelmate_c300 \
asus \
compaq-e_evo \
dell \
dell-latitude-xt2 \
everex-xt5000 \
fujitsu-amilo_li_2732 \
fujitsu-amilo_pa_2548 \
fujitsu-amilo_pro_edition_v3505 \
fujitsu-amilo_pro_v3205 \
fujitsu-amilo_si_1520 \
fujitsu-esprimo_mobile_v5 \
fujitsu-esprimo_mobile_v6 \
genius-slimstar-320 \
hewlett-packard \
hewlett-packard-2510p_2530p \
hewlett-packard-compaq_elitebook \
hewlett-packard-pavilion \
hewlett-packard-presario-2100 \
hewlett-packard-tablet \
hewlett-packard-tx2 \
hewlett-packard_elitebook-8440p \
hewlett-packard_elitebook-8460p \
hewlett-packard-hdx9494nr \
ibm-thinkpad-usb-keyboard-trackpoint \
inventec-symphony_6.0_7.0 \
lenovo-3000 \
lenovo-ideapad \
lenovo-thinkpad-usb-keyboard-trackpoint \
lenovo-thinkpad_x6_tablet \
lenovo-thinkpad_x200_tablet \
lg-x110 \
logitech-usb \
logitech-wave \
logitech-wave-cordless \
logitech-wave-pro-cordless \
maxdata-pro_7000 \
medion-fid2060 \
medionnb-a555 \
micro-star \
module-asus-w3j \
module-ibm \
module-lenovo \
module-sony \
module-sony-old \
module-sony-vgn \
module-sony-vpc \
olpc-xo \
onkyo \
oqo-model2 \
samsung-other \
samsung-series-3 \
samsung-series-9 \
samsung-sq1us \
samsung-sx20s \
toshiba-satellite_a100 \
toshiba-satellite_a110 \
toshiba-satellite_m30x \
zepto-znote
dist_udevkeymap_DATA = \
$(KEYMAPS)
EXTRA_DIST = \
$(KEYMAPS)

View File

@ -1,22 +0,0 @@
0xA5 help # Fn+F1
0xA6 setup # Fn+F2 Acer eSettings
0xA7 battery # Fn+F3 Power Management
0xA9 switchvideomode # Fn+F5
0xB3 euro
0xB4 dollar
0xCE brightnessup # Fn+Right
0xD4 bluetooth # (toggle) off-to-on
0xD5 wlan # (toggle) on-to-off
0xD6 wlan # (toggle) off-to-on
0xD7 bluetooth # (toggle) on-to-off
0xD8 bluetooth # (toggle) off-to-on
0xD9 brightnessup # Fn+Right
0xEE brightnessup # Fn+Right
0xEF brightnessdown # Fn+Left
0xF1 f22 # Fn+F7 Touchpad toggle (off-to-on)
0xF2 f23 # Fn+F7 Touchpad toggle (on-to-off)
0xF3 prog2 # "P2" programmable button
0xF4 prog1 # "P1" programmable button
0xF5 presentation
0xF8 fn
0xF9 f23 # Launch NTI shadow

View File

@ -1,5 +0,0 @@
0x84 bluetooth # sent when bluetooth module missing, and key pressed
0x92 media # Acer arcade
0xD4 bluetooth # Bluetooth on
0xD9 bluetooth # Bluetooth off
0xF4 prog3 # e-key

View File

@ -1,5 +0,0 @@
0x8A media
0x92 media
0xA6 setup
0xB2 www
0xD9 bluetooth # (toggle) on-to-off

View File

@ -1,5 +0,0 @@
0xD9 bluetooth # (toggle) on-to-off
0x92 media
0x9E back
0x83 rewind
0x89 fastforward

View File

@ -1,5 +0,0 @@
0xCA prog3 # key 'HOLD' on CineDash Media Console
0x83 rewind
0x89 fastforward
0x92 media # key 'ARCADE' on CineDash Media Console
0x9E back

View File

@ -1,5 +0,0 @@
0x67 f24 # FIXME: rotate screen
0x68 up
0x69 down
0x6B fn
0x6C screenlock # FIXME: lock tablet device/buttons

View File

@ -1,3 +0,0 @@
0xED volumeup
0xEE volumedown
0xEF mute

View File

@ -1,4 +0,0 @@
0xA3 www # I key
0x9A search
0x9E email
0x9F homepage

View File

@ -1,29 +0,0 @@
0x81 playpause # Play/Pause
0x82 stopcd # Stop
0x83 previoussong # Previous song
0x84 nextsong # Next song
0x85 brightnessdown # Fn+Down Brightness Down
0x86 brightnessup # Fn+Up Brightness Up
0x87 battery # Fn+F3 battery icon
0x88 unknown # Fn+F2 Turn On/Off Wireless - handled in hardware
0x89 ejectclosecd # Fn+F10 Eject CD
0x8A suspend # Fn+F1 hibernate
0x8B switchvideomode # Fn+F8 CRT/LCD (high keycode: "displaytoggle")
0x8C f23 # Fn+Right Auto Brightness
0x8F switchvideomode # Fn+F7 aspect ratio
0x90 previoussong # Front panel previous song
0x91 prog1 # Wi-Fi Catcher (Dell-specific)
0x92 media # MediaDirect button (house icon)
0x93 f23 # FIXME Fn+Left Auto Brightness
0x95 camera # Shutter button - Takes a picture if optional camera available
0x97 email # Tablet email button
0x98 f21 # FIXME: Tablet screen rotation
0x99 nextsong # Front panel next song
0x9A setup # Tablet tools button
0x9B switchvideomode # Display toggle button
0x9E f21 # Touchpad toggle
0xA2 playpause # Front panel play/pause
0xA4 stopcd # Front panel stop
0xED media # MediaDirect button
0xD8 screenlock # FIXME: Tablet lock button
0xD9 f21 # Touchpad toggle

View File

@ -1,4 +0,0 @@
0x9B up # tablet rocker up
0x9E enter # tablet rocker press
0x9F back # tablet back
0xA3 down # tablet rocker down

View File

@ -1,7 +0,0 @@
0x5C media
0x65 f21 # Fn+F5 Touchpad toggle
0x67 prog3 # Fan speed control button
0x6F brightnessup
0x7F brightnessdown
0xB2 www
0xEC mail

View File

@ -1,3 +0,0 @@
0xD9 brightnessdown # Fn+F8 brightness down
0xEF brightnessup # Fn+F9 brightness up
0xA9 switchvideomode # Fn+F10 Cycle between available video outputs

View File

@ -1,3 +0,0 @@
0xE0 volumedown
0xE1 volumeup
0xE5 prog1

View File

@ -1,4 +0,0 @@
0xA5 help # Fn+F1
0xA9 switchvideomode # Fn+F3
0xD9 brightnessdown # Fn+F8
0xE0 brightnessup # Fn+F9

View File

@ -1,2 +0,0 @@
0xF4 f21 # FIXME: silent-mode decrease CPU/GPU clock
0xF7 switchvideomode # Fn+F3

View File

@ -1,6 +0,0 @@
0xE1 wlan
0xF3 wlan
0xEE brightnessdown
0xE0 brightnessup
0xE2 bluetooth
0xF7 video

View File

@ -1,4 +0,0 @@
0xA9 switchvideomode
0xD9 brightnessdown
0xDF sleep
0xEF brightnessup

View File

@ -1,2 +0,0 @@
0xCE brightnessup
0xEF brightnessdown

View File

@ -1,35 +0,0 @@
# Genius SlimStar 320
#
# Only buttons which are not properly mapped yet are configured below
# "Scroll wheel", a circular up/down/left/right button. Aimed for scolling,
# but since there are no scrollleft/scrollright, let's map to back/forward.
0x900f0 scrollup
0x900f1 scrolldown
0x900f3 back
0x900f2 forward
# Multimedia buttons, left side (from left to right)
# [W]
0x900f5 wordprocessor
# [Ex]
0x900f6 spreadsheet
# [P]
0x900f4 presentation
# Other five (calculator, playpause, stop, mute and eject) are OK
# Right side, from left to right
# [e]
0xc0223 www
# "man"
0x900f7 chat
# "Y"
0x900fb prog1
# [X]
0x900f8 close
# "picture"
0x900f9 graphicseditor
# "two windows"
0x900fd scale
# "lock"
0x900fc screenlock

View File

@ -1,12 +0,0 @@
0x81 fn_esc
0x89 battery # Fn+F8
0x8A screenlock # Fn+F6
0x8B camera
0x8C media # music
0x8E dvd
0xB1 help
0xB3 f23 # FIXME: Auto brightness
0xD7 wlan
0x92 brightnessdown # Fn+F7 (Fn+F9 on 6730b)
0x97 brightnessup # Fn+F8 (Fn+F10 on 6730b)
0xEE switchvideomode # Fn+F4

View File

@ -1,2 +0,0 @@
0xD8 f23 # touchpad off
0xD9 f22 # touchpad on

View File

@ -1,2 +0,0 @@
0x88 presentation
0xD9 help # I key (high keycode: "info")

View File

@ -1,3 +0,0 @@
0xB2 www # Fn+F3
0xD8 f23 # touchpad off
0xD9 f22 # touchpad on

View File

@ -1,3 +0,0 @@
0x88 media # FIXME: quick play
0xD8 f23 # touchpad off
0xD9 f22 # touchpad on

View File

@ -1,3 +0,0 @@
0xF0 help
0xF1 screenlock
0xF3 search

View File

@ -1,6 +0,0 @@
0x82 prog2 # Funny Key
0x83 prog1 # Q
0x84 tab
0x85 esc
0x86 pageup
0x87 pagedown

View File

@ -1,3 +0,0 @@
0xC2 media
0xD8 f23 # Toggle touchpad button on tx2 (OFF)
0xD9 f22 # Toggle touchpad button on tx2 (ON)

View File

@ -1,5 +0,0 @@
0x88 www
0xA0 mute
0xAE volumedown
0xB0 volumeup
0xEC mail

View File

@ -1,3 +0,0 @@
0xF8 wlan # Wireless HW switch button
0xB3 prog1 # Fn+F11 - Ambient Light Sensor button
0xB1 prog2 # Fn+ESC - System information button

View File

@ -1,7 +0,0 @@
0x900f0 screenlock
0x900f1 wlan
0x900f2 switchvideomode
0x900f3 suspend
0x900f4 brightnessup
0x900f5 brightnessdown
0x900f8 zoom

View File

@ -1,2 +0,0 @@
0xF3 prog2
0xF4 prog1

View File

@ -1,5 +0,0 @@
0x8B switchvideomode # Fn+F7 video
0x96 wlan # Fn+F5 wireless
0x97 sleep # Fn+F4 suspend
0x98 suspend # Fn+F12 hibernate
0xB4 prog1 # Lenovo Care

View File

@ -1,8 +0,0 @@
# Key codes observed on S10-3, assumed valid on other IdeaPad models
0x81 rfkill # does nothing in BIOS
0x83 display_off # BIOS toggles screen state
0xB9 brightnessup # does nothing in BIOS
0xBA brightnessdown # does nothing in BIOS
0xF1 camera # BIOS toggles camera power
0xf2 f21 # touchpad toggle (key alternately emits F2 and F3)
0xf3 f21

View File

@ -1,13 +0,0 @@
0x90012 screenlock # Fn+F2
0x90013 battery # Fn+F3
0x90014 wlan # Fn+F5
0x90016 switchvideomode # Fn+F7
0x90017 f21 # Fn+F8 touchpad toggle
0x90019 suspend # Fn+F12
0x9001A brightnessup # Fn+Home
0x9001B brightnessdown # Fn+End
0x9001D zoom # Fn+Space
0x90011 prog1 # ThinkVantage button
0x90015 camera # Fn+F6 headset/camera VoIP key ??
0x90010 f20 # Microphone mute button; should be micmute, but see https://mail.gnome.org/archives/commits-list/2013-January/msg05822.html

View File

@ -1,6 +0,0 @@
0x5D menu
0x63 fn
0x66 screenlock
0x67 cyclewindows # bezel circular arrow
0x68 setup # bezel setup / menu
0x6c direction # rotate screen

View File

@ -1,8 +0,0 @@
0x6C f21 # rotate
0x68 screenlock # screenlock
0x6B esc # escape
0x6D right # right on d-pad
0x6E left # left on d-pad
0x71 up # up on d-pad
0x6F down # down on d-pad
0x69 enter # enter on d-pad

View File

@ -1,12 +0,0 @@
0xA0 mute # Fn+F9
0xAE volumedown # Fn+Left
0xAF search # Fn+F3
0xB0 volumeup # Fn+Right
0xB1 battery # Fn+F10 Info
0xB3 suspend # Fn+F12
0xDF sleep # Fn+F4
# 0xE2 bluetooth # satellite dish2
0xE4 f21 # Fn+F5 Touchpad toggle
0xF6 wlan # Fn+F6
0xF7 reserved # Fn+Down brightness down
0xF8 reserved # Fn+Up brightness up

View File

@ -1,6 +0,0 @@
0x90001 shop # Shopping
0x90002 config # iTouch
0x90003 finance # Finance
0x90004 prog1 # My Sites
0x90005 prog2 # Community
0xC0183 media # Media

View File

@ -1,16 +0,0 @@
0x9001C scale # expo
0x9001F zoomout # zoom out
0x90020 zoomin # zoom in
0x9003D prog1 # gadget
0x90005 camera # camera
0x90018 media # media center
0x90041 wordprocessor # Fn+F1 (Word)
0x90042 spreadsheet # Fn+F2 (Excel)
0x90043 calendar # Fn+F3 (calendar)
0x90044 prog2 # Fn+F4 (program a)
0x90045 prog3 # Fn+F5 (program b)
0x90046 prog4 # Fn+F6 (program c)
0x90048 messenger # Fn+F8 (MSN messenger)
0x9002D find # Fn+F10 (search www)
0x9004B search # Fn+F11 (search PC)
0x9004C ejectclosecd # Fn+F12 (eject)

View File

@ -1,15 +0,0 @@
0xD4 zoomin
0xCC zoomout
0xC0183 media
0xC1005 camera
0xC101F zoomout
0xC1020 zoomin
0xC1041 wordprocessor
0xC1042 spreadsheet
0xC1043 calendar
0xC1044 prog2 # Fn+F4 (program a)
0xC1045 prog3 # Fn+F5 (program b)
0xC1046 prog4 # Fn+F6 (program c)
0xC1048 messenger
0xC104A find # Fn+F10 (search www)
0xC104C ejectclosecd

View File

@ -1,12 +0,0 @@
0xC01B6 camera
0xC0183 media
0xC0184 wordprocessor
0xC0186 spreadsheet
0xC018E calendar
0xC0223 homepage
0xC01BC messenger
0xC018A mail
0xC0221 search
0xC00B8 ejectcd
0xC022D zoomin
0xC022E zoomout

View File

@ -1,9 +0,0 @@
0x97 prog2
0x9F prog1
0xA0 mute # Fn+F5
0x82 www
0xEC email
0xAE volumedown # Fn+Down
0xB0 volumeup # Fn+Up
0xDF suspend # Fn+F2
0xF5 help

View File

@ -1,2 +0,0 @@
0x6B channeldown # Thottle Down
0x6D channelup # Thottle Up

View File

@ -1,4 +0,0 @@
0x63 www # N button
0x66 prog1 # link 1 button
0x67 email # envelope button
0x69 prog2 # link 2 button

View File

@ -1,13 +0,0 @@
0xA0 mute # Fn+F9
0xAE volumedown # Fn+F7
0xB0 volumeup # Fn+F8
0xB2 www # e button
0xDF sleep # Fn+F12
0xE2 bluetooth # satellite dish2
0xE4 f21 # Fn+F3 Touchpad disable
0xEC email # envelope button
0xEE camera # Fn+F6 camera disable
0xF6 wlan # satellite dish1
0xF7 brightnessdown # Fn+F4
0xF8 brightnessup # Fn+F5
0xF9 search

View File

@ -1,11 +0,0 @@
0x41 nextsong
0x45 playpause
0x43 stopcd
0x40 previoussong
0x4C ejectclosecd
0x32 mute
0x31 volumedown
0x30 volumeup
0x5D wlan
0x7E bluetooth
0x8A media # high keycode: "tv"

View File

@ -1,16 +0,0 @@
0x01 battery # Fn+F2
0x02 screenlock # Fn+F3
0x03 sleep # Fn+F4
0x04 wlan # Fn+F5
0x06 switchvideomode # Fn+F7
0x07 zoom # Fn+F8 screen expand
0x08 f24 # Fn+F9 undock
0x0B suspend # Fn+F12
0x0F brightnessup # Fn+Home
0x10 brightnessdown # Fn+End
0x11 kbdillumtoggle # Fn+PgUp - ThinkLight
0x13 zoom # Fn+Space
0x14 volumeup
0x15 volumedown
0x16 mute
0x17 prog1 # ThinkPad/ThinkVantage button (high keycode: "vendor")

View File

@ -1,17 +0,0 @@
0x1 screenlock # Fn+F2
0x2 battery # Fn+F3
0x3 sleep # Fn+F4
0x4 wlan # Fn+F5
0x6 switchvideomode # Fn+F7
0x7 f21 # Fn+F8 touchpadtoggle
0x8 f24 # Fn+F9 undock
0xB suspend # Fn+F12
0xF brightnessup # Fn+Home
0x10 brightnessdown # Fn+End
0x11 kbdillumtoggle # Fn+PgUp - ThinkLight
0x13 zoom # Fn+Space
0x14 volumeup
0x15 volumedown
0x16 mute
0x17 prog1 # ThinkPad/ThinkVantage button (high keycode: "vendor")
0x1A f20 # Microphone mute button; should be micmute, but see https://mail.gnome.org/archives/commits-list/2013-January/msg05822.html

View File

@ -1,8 +0,0 @@
0x06 mute # Fn+F2
0x07 volumedown # Fn+F3
0x08 volumeup # Fn+F4
0x09 brightnessdown # Fn+F5
0x0A brightnessup # Fn+F6
0x0B switchvideomode # Fn+F7
0x0E zoom # Fn+F10
0x10 suspend # Fn+F12

View File

@ -1,2 +0,0 @@
0x06 battery
0x07 mute

View File

@ -1,8 +0,0 @@
0x00 brightnessdown # Fn+F5
0x10 brightnessup # Fn+F6
0x11 switchvideomode # Fn+F7
0x12 zoomout
0x14 zoomin
0x15 suspend # Fn+F12
0x17 prog1
0x20 media

View File

@ -1,4 +0,0 @@
# 0x05 touchpad_toggle # fn_f1 -> KEY_TOUCHPAD_TOGGLE
0x05 f21 # fn_f1 -> KEY_F21 (The actual touchpad toggle)
0x0d zoomout # fn_f9
0x0e zoomin # fn_f10

View File

@ -1,74 +0,0 @@
0x59 fn
0x81 fn_esc
0xF9 camera
0xF8 sound # Fn+CAMERA = Mic
# Function key mappings, as per
# http://dev.laptop.org/ticket/10213#comment:20
#
# Unmodified F1-F8 produce F1-F8, so no remap necessary.
# Unmodified F9-F12 control brightness and volume.
0x43 brightnessdown
0x44 brightnessup
0x57 volumedown
0x58 volumeup
# Fn-modified fkeys all produce the unmodified version of the key.
0xBB f1
0xBC f2
0xBD f3
0xBE f4
0xBF f5
0xC0 f6
0xC1 f7
0xC2 f8
0xC3 f9
0xC4 f10
0xD7 f11
0xD8 f12
# Using F13-F21 for the .5 F keys right now.
0xF7 f13
0xF6 f14
0xF5 f15
0xF4 f16
0xF3 f17
0xF2 f18
0xF1 f19
0xF0 f20
0xEF f21
0xEE chat
0xE4 chat # Just mapping Fn+Chat to Chat for now
0xDD menu # Frame
0xDA prog1 # Fn+Frame
# The Fn of some keys is other keys
0xD3 delete
0xD2 insert
0xC9 pageup
0xD1 pagedown
0xC7 home
0xCF end
# Language key - don't ask what they are doing as KEY_HP
0x73 hp
0x7E hp
0xDB leftmeta # left grab
0xDC rightmeta # right grab
0x85 rightmeta # Right grab releases on a different scancode
0xD6 kbdillumtoggle # Fn+Space
0x69 switchvideomode # Brightness key
# Game keys
0x65 kp8 # up
0x66 kp2 # down
0x67 kp4 # left
0x68 kp6 # right
0xE5 kp9 # pgup
0xE6 kp3 # pgdn
0xE7 kp7 # home
0xE8 kp1 # end

View File

@ -1,14 +0,0 @@
0xA0 mute # Fn+D
0xAE volumedown # Fn+F
0xB0 volumeup # Fn+G
0xDF sleep # Fn+W
0xE0 bluetooth # Fn+H
0xE2 cyclewindows # Fn+Esc
0xEE battery # Fn+Q
0xF0 media # Fn+R
0xF5 switchvideomode # Fn+E
0xF6 camera # Fn+T
0xF7 f21 # Fn+Y (touchpad toggle)
0xF8 brightnessup # Fn+S
0xF9 brightnessdown # Fn+A
0xFB wlan # Fn+J

View File

@ -1,5 +0,0 @@
0x8E wlan
0xF0 switchvideomode
0xF1 mute
0xF2 volumedown
0xF3 volumeup

View File

@ -1,14 +0,0 @@
0x74 prog1 # User key
0x75 www
0x78 mail
0x82 switchvideomode # Fn+F4 CRT/LCD (high keycode: "displaytoggle")
0x83 battery # Fn+F2
0x84 prog1 # Fn+F5 backlight on/off
0x86 wlan # Fn+F9
0x88 brightnessup # Fn+Up
0x89 brightnessdown # Fn+Down
0xB1 prog2 # Fn+F7 run Samsung Magic Doctor (keypressed event is generated twice)
0xB3 prog3 # Fn+F8 switch power mode (battery/dynamic/performance)
0xB4 wlan # Fn+F9 (X60P)
0xF7 f22 # Fn+F10 Touchpad on
0xF9 f23 # Fn+F10 Touchpad off

View File

@ -1,3 +0,0 @@
0xCE prog1 # Fn+F1 launch control setting
0xB3 prog2 # Fn+F11 performance mode
0xD5 wlan # Fn+F12 Wi-Fi toggle

View File

@ -1,5 +0,0 @@
0x96 kbdillumup # Fn+F8 keyboard backlight up
0x97 kbdillumdown # Fn+F7 keyboard backlight down
0xD5 wlan # Fn+F12 Wi-Fi toggle
0xCE prog1 # Fn+F1 performance mode
0x8D prog2 # Fn+F6 battery life extender

View File

@ -1,7 +0,0 @@
0xD4 menu
0xD8 f1
0xD9 f10
0xD6 f3
0xD7 f9
0xE4 f5
0xEE f11

View File

@ -1,4 +0,0 @@
0x74 mute
0x75 mute
0x77 f22 # Touchpad on
0x79 f23 # Touchpad off

View File

@ -1,2 +0,0 @@
0xA4 stopcd
0xB2 www

View File

@ -1,10 +0,0 @@
0x92 stop
0x93 www
0x94 media
0x9E f22 # Touchpad on
0x9F f23 # Touchpad off
0xB9 nextsong
0xD9 brightnessup
0xEE screenlock
0xF4 previoussong
0xF7 playpause

View File

@ -1,6 +0,0 @@
0xef brightnessdown
0xd9 brightnessup
0xee screenlock
0x93 media
0x9e f22 # touchpad enable
0x9f f23 # touchpad disable

View File

@ -1,11 +0,0 @@
0x93 switchvideomode # Fn+F3 Toggle Video Output
0x95 brightnessdown # Fn+F4 Brightness Down
0x91 brightnessup # Fn+F5 Brightness Up
0xA5 f23 # Fn+F6 Disable Touchpad
0xA6 f22 # Fn+F6 Enable Touchpad
0xA7 bluetooth # Fn+F10 Enable Bluetooth
0XA9 bluetooth # Fn+F10 Disable Bluetooth
0xF1 wlan # RF Switch Off
0xF2 wlan # RF Switch On
0xF4 prog1 # P1 Button
0xF3 prog2 # P2 Button

22
rules/60-keyboard.rules Normal file
View File

@ -0,0 +1,22 @@
# do not edit this file, it will be overwritten on update
ACTION!="add", GOTO="keyboard_end"
KERNEL!="event*", GOTO="keyboard_end"
ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end"
# ignore all bluetooth devices
SUBSYSTEMS=="bluetooth", GOTO="keyboard_end"
# import key mapping for USB device
SUBSYSTEMS=="usb", IMPORT{builtin}="hwdb --subsystem=usb --lookup-prefix=keyboard:", \
RUN{builtin}+="keyboard", GOTO="keyboard_end"
# import key mapping for AT keyboard from DMI data
DRIVERS=="atkbd", IMPORT{builtin}="hwdb 'keyboard:$attr{[dmi/id]modalias}'", \
RUN{builtin}+="keyboard", GOTO="keyboard_end"
# import key mapping for platform input device
KERNELS=="input*", IMPORT{builtin}="hwdb 'keyboard:name:$attr{name}:$attr{[dmi/id]modalias}'", \
RUN{builtin}+="keyboard", GOTO="keyboard_end"
LABEL="keyboard_end"

View File

@ -39,8 +39,7 @@ endif
if ENABLE_KEYMAP
dist_udevrules_DATA += \
95-keymap.rules \
95-keyboard-force-release.rules
60-keyboard.rules
endif
install-data-local:

View File

@ -18,8 +18,3 @@ if ENABLE_GUDEV
SUBDIRS += \
gudev
endif
if ENABLE_KEYMAP
SUBDIRS += \
keymap
endif

View File

@ -1,58 +0,0 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
AM_CPPFLAGS = \
-I $(top_srcdir)/src/libudev \
-I $(top_srcdir)/src/udev \
-DUDEV_LIBEXEC_DIR=\"$(udevlibexecdir)\"
udevlibexec_PROGRAMS = \
keymap
keymap_SOURCES = \
keymap.c
keymap_CPPFLAGS = \
$(AM_CPPFLAGS)
keymap_LDADD = \
$(top_builddir)/src/udev/libudev-core.la
nodist_keymap_SOURCES = \
keys-from-name.h \
keys-to-name.h
BUILT_SOURCES = \
$(nodist_keymap_SOURCES)
dist_doc_DATA = \
README.keymap.txt
dist_udevlibexec_SCRIPTS = \
findkeyboards \
keyboard-force-release.sh
TESTS = \
check-keymaps.sh
CLEANFILES = \
keys.txt \
keys-from-name.gperf \
keyboard-force-release.sh \
$(BUILT_SOURCES)
EXTRA_DIST = \
check-keymaps.sh \
keyboard-force-release.sh.in
keys.txt: Makefile
$(AM_V_at)$(MKDIR_P) $(dir $@)
$(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include linux/input.h - < /dev/null | $(AWK) '/^#define[ \t]+KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@
keys-from-name.gperf: keys.txt Makefile
$(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print $$1 ", " $$1 }' < $< > $@
keys-from-name.h: keys-from-name.gperf Makefile
$(AM_V_GEN)$(GPERF) -L ANSI-C -t --ignore-case -N lookup_key -H hash_key_name -p -C < $< > $@
keys-to-name.h: keys.txt Makefile
$(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@

View File

@ -1,97 +0,0 @@
= The udev keymap tool =
== Introduction ==
This udev extension configures computer model specific key mappings. This is
particularly necessary for the non-standard extra keys found on many laptops,
such as "brightness up", "next song", "www browser", or "suspend". Often these
are accessed with the Fn key.
Every key produces a "scan code", which is highly vendor/model specific for the
nonstandard keys. This tool maintains mappings for these scan codes to standard
"key codes", which denote the "meaning" of the key. The key codes are defined
in /usr/include/linux/input.h.
If some of your keys on your keyboard are not working at all, or produce the
wrong effect, then a very likely cause of this is that the scan code -> key
code mapping is incorrect on your computer.
== Structure ==
udev-keymap consists of the following parts:
keymaps/*:: mappings of scan codes to key code names
95-keymap.rules:: udev rules for mapping system vendor/product names and
input module names to one of the keymaps above
keymap:: manipulate an evdev input device:
* write a key map file into a device (used by udev rules)
* dump current scan → key code mapping
* interactively display scan and key codes of pressed keys
findkeyboards:: display evdev input devices which belong to actual keyboards,
i. e. those suitable for the keymap program
== Fixing broken keys ==
In order to make a broken key work on your system and send it back to upstream
for inclusion you need to do the following steps:
1. Find the keyboard device.
Run /usr/lib/udev/findkeyboards. This should always give you an "AT
keyboard" and possibly a "module". Some laptops (notably Thinkpads, Sonys, and
Acers) have multimedia/function keys on a separate input device instead of the
primary keyboard. The keyboard device should have a name like "input/event3".
In the following commands, the name will be written as "input/eventX" (replace
X with the appropriate number).
2. Find broken scan codes:
sudo /usr/lib/udev/keymap -i input/eventX
Press all multimedia/function keys and check if the key name that gets printed
out is plausible. If it is unknown or wrong, write down the scan code (looks
like "0x1E") and the intended functionality of this key. Look in
/usr/include/linux/input.h for an available KEY_XXXXX constant which most
closely approximates this functionality and write it down as the new key code.
For example, you might press a key labeled "web browser" which currently
produces "unknown". Note down this:
0x1E www # Fn+F2 web browser
Repeat that for all other keys. Write the resulting list into a file. Look at
/usr/lib/udev/keymaps/ for existing key map files and make sure that you use the
same structure.
If the key only ever works once and then your keyboard (or the entire desktop)
gets stuck for a long time, then it is likely that the BIOS fails to send a
corresponding "key release" event after the key press event. Please note down
this case as well, as it can be worked around in
/usr/lib/udev/keymaps/95-keyboard-force-release.rules .
3. Find out your system vendor and product:
cat /sys/class/dmi/id/sys_vendor
cat /sys/class/dmi/id/product_name
4. Generate a device dump with "udevadm info --export-db > /tmp/udev-db.txt".
6. Send the system vendor/product names, the key mapping from step 2,
and /tmp/udev-db.txt from step 4 to the linux-hotplug@vger.kernel.org mailing
list, so that they can be included in the next release.
For local testing, copy your map file to /usr/lib/udev/keymaps/ with an appropriate
name, and add an appropriate udev rule to /usr/lib/udev/rules.d/95-keymap.rules:
* If you selected an "AT keyboard", add the rule to the section after
'LABEL="keyboard_vendorcheck"'.
* If you selected a "module", add the rule to the top section where the
"ThinkPad Extra Buttons" are.
== Author ==
keymap is written and maintained by Martin Pitt <martin.pitt@ubuntu.com>.

View File

@ -1,45 +0,0 @@
#!/bin/bash
# check that all key names in keymaps/* are known in <linux/input.h>
# and that all key maps listed in the rules are valid and present in
# Makefile.am
top_srcdir=@top_srcdir@
top_builddir=@top_builddir@
SRCDIR=${1:-${top_srcdir}}
BUILDDIR=${1:-${top_builddir}}
KEYLIST=${2:-${BUILDDIR}/src/keymap/keys.txt}
KEYMAPS_DIR=${SRCDIR}/keymaps
KEYMAPS_LIST=$(ls ${KEYMAPS_DIR}/* | grep -v Makefile)
RULES=${SRCDIR}/rules/95-keymap.rules
[ -e "$KEYLIST" ] || {
echo "need $KEYLIST please build first" >&2
exit 1
}
missing=$(join -v 2 <(awk '{print tolower(substr($1,5))}' $KEYLIST | sort -u) \
<(grep -hv '^#' ${KEYMAPS_LIST}| awk '{print $2}' | sort -u))
[ -z "$missing" ] || {
echo "ERROR: unknown key names in keymaps/*:" >&2
echo "$missing" >&2
exit 1
}
# check that all maps referred to in $RULES exist
maps=$(sed -rn '/keymap \$name/ { s/^.*\$name ([^"[:space:]]+).*$/\1/; p }' $RULES)
for m in $maps; do
# ignore inline mappings
[ "$m" = "${m#0x}" ] || continue
[ -e ${KEYMAPS_DIR}/$m ] || {
echo "ERROR: unknown map name in $RULES: $m" >&2
exit 1
}
grep -q "$m\>" ${SRCDIR}/keymaps/Makefile.am || {
echo "ERROR: map file $m is not added to Makefile.am" >&2
exit 1
}
done

View File

@ -1,68 +0,0 @@
#!/bin/sh -e
# Find "real" keyboard devices and print their device path.
# Author: Martin Pitt <martin.pitt@ubuntu.com>
#
# Copyright (C) 2009, Canonical Ltd.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
# returns OK if $1 contains $2
strstr() {
[ "${1#*$2*}" != "$1" ]
}
# returns OK if $1 contains $2 at the beginning
str_starts() {
[ "${1#$2*}" != "$1" ]
}
str_line_starts() {
while read a; do str_starts "$a" "$1" && return 0;done
return 1;
}
# print a list of input devices which are keyboard-like
keyboard_devices() {
# standard AT keyboard
for dev in `udevadm trigger --dry-run --verbose --property-match=ID_INPUT_KEYBOARD=1`; do
env=`udevadm info --query=env --path=$dev`
# filter out non-event devices, such as the parent input devices which have no devnode
if ! echo "$env" | str_line_starts 'DEVNAME='; then
continue
fi
walk=`udevadm info --attribute-walk --path=$dev`
if strstr "$walk" 'DRIVERS=="atkbd"'; then
echo -n 'AT keyboard: '
elif echo "$env" | str_line_starts 'ID_USB_DRIVER=usbhid'; then
echo -n 'USB keyboard: '
else
echo -n 'Unknown type: '
fi
udevadm info --query=name --path=$dev
done
# modules
module=$(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*Extra Buttons')
module="$module
$(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*extra buttons')"
module="$module
$(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='Sony Vaio Keys')"
for m in $module; do
for evdev in $m/event*/dev; do
if [ -e "$evdev" ]; then
echo -n 'module: '
udevadm info --query=name --path=${evdev%%/dev}
fi
done
done
}
keyboard_devices

View File

@ -1,22 +0,0 @@
#!/bin/sh -e
# read list of scancodes, convert hex to decimal and
# append to the atkbd force_release sysfs attribute
# $1 sysfs devpath for serioX
# $2 file with scancode list (hex or dec)
case "$2" in
/*) scf="$2" ;;
*) scf="@udevlibexecdir@/keymaps/force-release/$2" ;;
esac
read attr <"/sys/$1/force_release"
while read scancode dummy; do
case "$scancode" in
\#*) ;;
*)
scancode=$(($scancode))
attr="$attr${attr:+,}$scancode"
;;
esac
done <"$scf"
echo "$attr" >"/sys/$1/force_release"

View File

@ -1,453 +0,0 @@
/*
* keymap - dump keymap of an evdev device or set a new keymap from a file
*
* Based on keyfuzz by Lennart Poettering <mzqrovna@0pointer.net>
* Adapted for udev-extras by Martin Pitt <martin.pitt@ubuntu.com>
*
* Copyright (C) 2006, Lennart Poettering
* Copyright (C) 2009, Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <ctype.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
#include <fcntl.h>
#include <getopt.h>
#include <sys/ioctl.h>
#include <linux/limits.h>
#include <linux/input.h>
static const struct key* lookup_key (const char *str, unsigned int len);
#include "keys-from-name.h"
#include "keys-to-name.h"
#include "macro.h"
#include "util.h"
#define MAX_SCANCODES 1024
static int evdev_open(const char *dev)
{
int fd;
char fn[PATH_MAX];
if (!startswith(dev, "/dev")) {
snprintf(fn, sizeof(fn), "/dev/%s", dev);
dev = fn;
}
if ((fd = open(dev, O_RDWR)) < 0) {
fprintf(stderr, "error open('%s'): %m\n", dev);
return -1;
}
return fd;
}
static int evdev_get_keycode(int fd, unsigned scancode, int e)
{
unsigned codes[2];
codes[0] = scancode;
if (ioctl(fd, EVIOCGKEYCODE, codes) < 0) {
if (e && errno == EINVAL) {
return -2;
} else {
fprintf(stderr, "EVIOCGKEYCODE for scan code 0x%x: %m\n", scancode);
return -1;
}
}
return codes[1];
}
static int evdev_set_keycode(int fd, unsigned scancode, int keycode)
{
unsigned codes[2];
codes[0] = scancode;
codes[1] = (unsigned) keycode;
if (ioctl(fd, EVIOCSKEYCODE, codes) < 0) {
fprintf(stderr, "EVIOCSKEYCODE: %m\n");
return -1;
}
return 0;
}
static int evdev_driver_version(int fd, char *v, size_t l)
{
int version;
if (ioctl(fd, EVIOCGVERSION, &version)) {
fprintf(stderr, "EVIOCGVERSION: %m\n");
return -1;
}
snprintf(v, l, "%i.%i.%i.", version >> 16, (version >> 8) & 0xff, version & 0xff);
return 0;
}
static int evdev_device_name(int fd, char *n, size_t l)
{
if (ioctl(fd, EVIOCGNAME(l), n) < 0) {
fprintf(stderr, "EVIOCGNAME: %m\n");
return -1;
}
return 0;
}
/* Return a lower-case string with KEY_ prefix removed */
static const char* format_keyname(const char* key) {
static char result[101];
const char* s;
int len;
for (s = key+4, len = 0; *s && len < 100; ++len, ++s)
result[len] = tolower(*s);
result[len] = '\0';
return result;
}
static int dump_table(int fd) {
char version[256], name[256];
unsigned scancode;
int r = -1;
if (evdev_driver_version(fd, version, sizeof(version)) < 0)
goto fail;
if (evdev_device_name(fd, name, sizeof(name)) < 0)
goto fail;
printf("### evdev %s, driver '%s'\n", version, name);
r = 0;
for (scancode = 0; scancode < MAX_SCANCODES; scancode++) {
int keycode;
if ((keycode = evdev_get_keycode(fd, scancode, 1)) < 0) {
if (keycode == -2)
continue;
r = -1;
break;
}
if (keycode < KEY_MAX && key_names[keycode])
printf("0x%03x %s\n", scancode, format_keyname(key_names[keycode]));
else
printf("0x%03x 0x%03x\n", scancode, keycode);
}
fail:
return r;
}
static void set_key(int fd, const char* scancode_str, const char* keyname)
{
unsigned scancode;
char *endptr;
char t[105] = "KEY_UNKNOWN";
const struct key *k;
scancode = (unsigned) strtol(scancode_str, &endptr, 0);
if (*endptr != '\0') {
fprintf(stderr, "ERROR: Invalid scancode\n");
exit(1);
}
snprintf(t, sizeof(t), "KEY_%s", keyname);
if (!(k = lookup_key(t, strlen(t)))) {
fprintf(stderr, "ERROR: Unknown key name '%s'\n", keyname);
exit(1);
}
if (evdev_set_keycode(fd, scancode, k->id) < 0)
fprintf(stderr, "setting scancode 0x%2X to key code %i failed\n",
scancode, k->id);
else
printf("setting scancode 0x%2X to key code %i\n",
scancode, k->id);
}
static int merge_table(int fd, FILE *f) {
int r = 0;
int line = 0;
while (!feof(f)) {
char s[256], *p;
unsigned scancode;
int new_keycode, old_keycode;
if (!fgets(s, sizeof(s), f))
break;
line++;
p = s+strspn(s, "\t ");
if (*p == '#' || *p == '\n')
continue;
if (sscanf(p, "%i %i", &scancode, &new_keycode) != 2) {
char t[105] = "KEY_UNKNOWN";
const struct key *k;
if (sscanf(p, "%i %100s", &scancode, t+4) != 2) {
fprintf(stderr, "WARNING: Parse failure at line %i, ignoring.\n", line);
r = -1;
continue;
}
if (!(k = lookup_key(t, strlen(t)))) {
fprintf(stderr, "WARNING: Unknown key '%s' at line %i, ignoring.\n", t, line);
r = -1;
continue;
}
new_keycode = k->id;
}
if ((old_keycode = evdev_get_keycode(fd, scancode, 0)) < 0) {
r = -1;
continue;
}
if (evdev_set_keycode(fd, scancode, new_keycode) < 0) {
r = -1;
continue;
}
if (new_keycode != old_keycode)
fprintf(stderr, "Remapped scancode 0x%02x to 0x%02x (prior: 0x%02x)\n",
scancode, new_keycode, old_keycode);
}
fclose(f);
return r;
}
/* read one event; return 1 if valid */
static int read_event(int fd, struct input_event* ev)
{
int ret;
ret = read(fd, ev, sizeof(struct input_event));
if (ret < 0) {
perror("read");
return 0;
}
if (ret != sizeof(struct input_event)) {
fprintf(stderr, "did not get enough data for event struct, aborting\n");
return 0;
}
return 1;
}
static void print_key(unsigned scancode, uint16_t keycode, int has_scan, int has_key)
{
const char *keyname;
/* ignore key release events */
if (has_key == 1)
return;
if (has_key == 0 && has_scan != 0) {
fprintf(stderr, "got scan code event 0x%02X without a key code event\n",
scancode);
return;
}
if (has_scan != 0)
printf("scan code: 0x%02X ", scancode);
else
printf("(no scan code received) ");
keyname = key_names[keycode];
if (keyname != NULL)
printf("key code: %s\n", format_keyname(keyname));
else
printf("key code: %03X\n", keycode);
}
static void interactive(int fd)
{
struct input_event ev;
unsigned last_scan = 0;
uint16_t last_key = 0;
int has_scan; /* boolean */
int has_key; /* 0: none, 1: release, 2: press */
/* grab input device */
ioctl(fd, EVIOCGRAB, 1);
puts("Press ESC to finish, or Control-C if this device is not your primary keyboard");
has_scan = has_key = 0;
while (read_event(fd, &ev)) {
/* Drivers usually send the scan code first, then the key code,
* then a SYN. Some drivers (like thinkpad_acpi) send the key
* code first, and some drivers might not send SYN events, so
* keep a robust state machine which can deal with any of those
*/
if (ev.type == EV_MSC && ev.code == MSC_SCAN) {
if (has_scan) {
fputs("driver did not send SYN event in between key events; previous event:\n",
stderr);
print_key(last_scan, last_key, has_scan, has_key);
has_key = 0;
}
last_scan = ev.value;
has_scan = 1;
/*printf("--- got scan %u; has scan %i key %i\n", last_scan, has_scan, has_key); */
}
else if (ev.type == EV_KEY) {
if (has_key) {
fputs("driver did not send SYN event in between key events; previous event:\n",
stderr);
print_key(last_scan, last_key, has_scan, has_key);
has_scan = 0;
}
last_key = ev.code;
has_key = 1 + ev.value;
/*printf("--- got key %hu; has scan %i key %i\n", last_key, has_scan, has_key);*/
/* Stop on ESC */
if (ev.code == KEY_ESC && ev.value == 0)
break;
}
else if (ev.type == EV_SYN) {
/*printf("--- got SYN; has scan %i key %i\n", has_scan, has_key);*/
print_key(last_scan, last_key, has_scan, has_key);
has_scan = has_key = 0;
}
}
/* release input device */
ioctl(fd, EVIOCGRAB, 0);
}
_noreturn_ static void help(int error)
{
const char* h = "Usage: keymap <event device> [<map file>]\n"
" keymap <event device> scancode keyname [...]\n"
" keymap -i <event device>\n";
if (error) {
fputs(h, stderr);
exit(2);
} else {
fputs(h, stdout);
exit(0);
}
}
int main(int argc, char **argv)
{
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "interactive", no_argument, NULL, 'i' },
{}
};
int fd = -1;
int opt_interactive = 0;
int i;
while (1) {
int option;
option = getopt_long(argc, argv, "hi", options, NULL);
if (option == -1)
break;
switch (option) {
case 'h':
help(0);
case 'i':
opt_interactive = 1;
break;
default:
return 1;
}
}
if (argc < optind+1)
help (1);
if ((fd = evdev_open(argv[optind])) < 0)
return 3;
/* one argument (device): dump or interactive */
if (argc == optind+1) {
if (opt_interactive)
interactive(fd);
else
dump_table(fd);
return 0;
}
/* two arguments (device, mapfile): set map file */
if (argc == optind+2) {
const char *filearg = argv[optind+1];
if (strchr(filearg, '/')) {
/* Keymap file argument is a path */
FILE *f = fopen(filearg, "re");
if (f)
merge_table(fd, f);
else
perror(filearg);
} else {
/* Keymap file argument is a filename */
/* Open override file if present, otherwise default file */
char keymap_path[PATH_MAX];
FILE *f;
snprintf(keymap_path, sizeof(keymap_path), "/etc/udev/keymaps/%s", filearg);
f = fopen(keymap_path, "re");
if (f) {
merge_table(fd, f);
} else {
snprintf(keymap_path, sizeof(keymap_path), UDEV_LIBEXEC_DIR "/keymaps/%s", filearg);
f = fopen(keymap_path, "re");
if (f)
merge_table(fd, f);
else
perror(keymap_path);
}
}
return 0;
}
/* more arguments (device, scancode/keyname pairs): set keys directly */
if ((argc - optind - 1) % 2 == 0) {
for (i = optind+1; i < argc; i += 2)
set_key(fd, argv[i], argv[i+1]);
return 0;
}
/* invalid number of arguments */
help(1);
return 1; /* not reached */
}

View File

@ -117,6 +117,41 @@ EXTRA_DIST = \
CLEANFILES = \
udev.pc
if ENABLE_KEYMAP
AM_CPPFLAGS += \
-I $(top_builddir)/src/udev
libudev_core_la_SOURCES += \
udev-builtin-keyboard.c
nodist_libudev_core_la_SOURCES = \
keyboard-keys-from-name.h \
keyboard-keys-to-name.h
keyboard-keys.txt: Makefile
$(AM_V_at)$(MKDIR_P) $(dir $@)
$(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include linux/input.h - < /dev/null | $(AWK) '/^#define[ \t]+KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@
keyboard-keys-from-name.gperf: keyboard-keys.txt Makefile
$(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print tolower(substr($$1 ,5)) ", " $$1 }' < $< > $@
keyboard-keys-from-name.h: keyboard-keys-from-name.gperf Makefile
$(AM_V_GPERF)$(GPERF) -L ANSI-C -t -N keyboard_lookup_key -H hash_key_name -p -C < $< > $@
keyboard-keys-to-name.h: keyboard-keys.txt Makefile
$(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@
BUILT_SOURCES = \
$(nodist_libudev_core_la_SOURCES)
CLEANFILES += \
keyboard-keys-from-name.gperf \
keyboard-keys.txt \
$(BUILT_SOURCES)
endif
# install udevadm symlink in sbindir
install-exec-hook:
if test "$(bindir)" != "$(sbindir)"; then \

View File

@ -0,0 +1,163 @@
/***
This file is part of systemd.
Copyright 2013 Kay Sievers <kay@vrfy.org>
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/limits.h>
#include <linux/input.h>
#include "udev.h"
static const struct key *keyboard_lookup_key(const char *str, unsigned int len);
#include "keyboard-keys-from-name.h"
#include "keyboard-keys-to-name.h"
static int install_force_release(struct udev_device *dev, const unsigned int *release, unsigned int release_count) {
struct udev_device *atkbd;
const char *cur;
char codes[4096];
char *s;
size_t l;
unsigned int i;
int ret;
atkbd = udev_device_get_parent_with_subsystem_devtype(dev, "serio", NULL);
if (!atkbd)
return -ENODEV;
cur = udev_device_get_sysattr_value(atkbd, "force_release");
if (!cur)
return -ENODEV;
s = codes;
l = sizeof(codes);
/* copy current content */
l = strpcpy(&s, l, cur);
/* append new codes */
for (i = 0; i < release_count; i++)
l = strpcpyf(&s, l, ",%d", release[i]);
log_debug("keyboard: updating force-release list with '%s'\n", codes);
ret = udev_device_set_sysattr_value(atkbd, "force_release", codes);
if (ret < 0)
log_error("Error writing force-release attribute: %s", strerror(-ret));
return ret;
}
static int builtin_keyboard(struct udev_device *dev, int argc, char *argv[], bool test) {
struct udev_list_entry *entry;
struct {
unsigned int scan;
unsigned int key;
} map[1024];
unsigned int map_count = 0;
unsigned int release[1024];
unsigned int release_count = 0;
udev_list_entry_foreach(entry, udev_device_get_properties_list_entry(dev)) {
const char *key;
unsigned int scancode;
char *endptr;
const char *keycode;
const struct key *k;
key = udev_list_entry_get_name(entry);
if (!startswith(key, "KEYBOARD_KEY_"))
continue;
/* KEYBOARD_KEY_<hex scan code>=<key identifier string> */
scancode = strtol(key + 13, &endptr, 16);
if (endptr[0] != '\0') {
log_error("Error, unable to parse scan code from '%s'\n", key);
continue;
}
keycode = udev_list_entry_get_value(entry);
/* a leading '!' needs a force-release entry */
if (keycode[0] == '!') {
keycode++;
release[release_count] = scancode;
if (release_count < ELEMENTSOF(release)-1)
release_count++;
if (keycode[0] == '\0')
continue;
}
/* translate identifier to key code */
k = keyboard_lookup_key(keycode, strlen(keycode));
if (!k) {
log_error("Error, unknown key identifier '%s'\n", keycode);
continue;
}
map[map_count].scan = scancode;
map[map_count].key = k->id;
if (map_count < ELEMENTSOF(map)-1)
map_count++;
}
if (map_count > 0 || release_count > 0) {
const char *node;
int fd;
unsigned int i;
node = udev_device_get_devnode(dev);
if (!node) {
log_error("Error, no device node for '%s'\n", udev_device_get_syspath(dev));
return EXIT_FAILURE;
}
fd = open(udev_device_get_devnode(dev), O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
if (fd < 0) {
log_error("Error, opening device '%s': %m\n", node);
return EXIT_FAILURE;
}
/* install list of map codes */
for (i = 0; i < map_count; i++) {
log_debug("keyboard: mapping scan code %d (0x%x) to key code %d (0x%x)\n",
map[i].scan, map[i].scan, map[i].key, map[i].key);
if (ioctl(fd, EVIOCSKEYCODE, &map[i]) < 0)
log_error("Error calling EVIOCSKEYCODE: %m\n");
}
/* install list of force-release codes */
if (release_count > 0)
install_force_release(dev, release, release_count);
close(fd);
}
return EXIT_SUCCESS;
}
const struct udev_builtin udev_builtin_keyboard = {
.name = "keyboard",
.cmd = builtin_keyboard,
.help = "keyboard scan code to key mapping",
};

View File

@ -39,6 +39,9 @@ static const struct udev_builtin *builtins[] = {
#endif
[UDEV_BUILTIN_HWDB] = &udev_builtin_hwdb,
[UDEV_BUILTIN_INPUT_ID] = &udev_builtin_input_id,
#ifdef ENABLE_KEYMAP
[UDEV_BUILTIN_KEYBOARD] = &udev_builtin_keyboard,
#endif
#ifdef HAVE_MODULES
[UDEV_BUILTIN_KMOD] = &udev_builtin_kmod,
#endif

View File

@ -145,6 +145,9 @@ enum udev_builtin_cmd {
#endif
UDEV_BUILTIN_HWDB,
UDEV_BUILTIN_INPUT_ID,
#ifdef ENABLE_KEYMAP
UDEV_BUILTIN_KEYBOARD,
#endif
#ifdef HAVE_MODULES
UDEV_BUILTIN_KMOD,
#endif
@ -171,6 +174,9 @@ extern const struct udev_builtin udev_builtin_firmware;
#endif
extern const struct udev_builtin udev_builtin_hwdb;
extern const struct udev_builtin udev_builtin_input_id;
#ifdef ENABLE_KEYMAP
extern const struct udev_builtin udev_builtin_keyboard;
#endif
#ifdef HAVE_MODULES
extern const struct udev_builtin udev_builtin_kmod;
#endif