适用于 Primax 无线键盘的 Linux HID 驱动程序

适用于 Primax 无线键盘的 Linux HID 驱动程序

我买了一个与旧键盘类似的新键盘。旧的可以用,新的不行。新键盘有一个不寻常的 HID 描述符并发送一个额外的数据字节。有没有支持这种键盘(描述符)的Linux驱动程序?


通过 的通信日志cat /sys/kernel/debug/usb/usbmon/3u,仅字节序列(按 A,释放 A;按 Shift,按 A,释放 A,释放 Shift 序列):

不工作的 9 字节键盘通信:

00000400 00000000 71
00000000 00000000 71
02000000 00000000 71
02000400 00000000 71
02000000 00000000 71
00000000 00000000 71

旧键盘通信工作:

00000400 00000000
00000000 00000000
02000000 00000000
02000400 00000000
02000000 00000000
00000000 00000000

奖励:额外的字节是什么? (我总是0x71在那里看到。)


新键盘的 HID 描述符通过cat /sys/kernel/debug/hid/<interface>/rdesc

界面0003:17EF:609B.0089

05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 75 08 95 01 81 01 05 08 19 01 29 03 75 01 95 03 91 02 95 01 75 05 91 01 15 00 26 ff 00 19 00 2a ff 00 05 07 75 08 95 06 81 00 05 01 0a 68 01 15 80 25 7f 95 01 75 08 81 02 c0 

  INPUT[INPUT]
    Field(0)
      Application(GenericDesktop.Keyboard)
      Usage(8)
        Keyboard.00e0
        Keyboard.00e1
        Keyboard.00e2
        Keyboard.00e3
        Keyboard.00e4
        Keyboard.00e5
        Keyboard.00e6
        Keyboard.00e7
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(8)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Application(GenericDesktop.Keyboard)
      Usage(256)
        LED.0000
        LED.NumLock
        LED.CapsLock
        LED.ScrollLock
        LED.Compose
        LED.Kana
        LED.0006
        LED.0007
        LED.0008
        LED.0009
        ... LED sequence left out
        LED.0049
        LED.004a
        LED.GenericIndicator
        LED.004c
        LED.004d
        LED.004e
        LED.004f
        ... LED sequence left out
        LED.00fd
        LED.00fe
        LED.00ff
      Logical Minimum(0)
      Logical Maximum(255)
      Report Size(8)
      Report Count(6)
      Report Offset(16)
      Flags( Array Absolute )
    Field(2)
      Application(GenericDesktop.Keyboard)
      Usage(1)
        GenericDesktop.0168
      Logical Minimum(-128)
      Logical Maximum(127)
      Report Size(8)
      Report Count(1)
      Report Offset(64)
      Flags( Variable Absolute )
  OUTPUT[OUTPUT]
    Field(0)
      Application(GenericDesktop.Keyboard)
      Usage(3)
        LED.NumLock
        LED.CapsLock
        LED.ScrollLock
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(3)
      Report Offset(0)
      Flags( Variable Absolute )

Keyboard.00e0 ---> Key.LeftControl
Keyboard.00e1 ---> Key.LeftShift
Keyboard.00e2 ---> Key.LeftAlt
Keyboard.00e3 ---> Key.LeftMeta
Keyboard.00e4 ---> Key.RightCtrl
Keyboard.00e5 ---> Key.RightShift
Keyboard.00e6 ---> Key.RightAlt
Keyboard.00e7 ---> Key.RightMeta
LED.0000 ---> Sync.Report
LED.NumLock ---> LED.NumLock
LED.CapsLock ---> LED.CapsLock
LED.ScrollLock ---> LED.ScrollLock
LED.Compose ---> LED.Compose
LED.Kana ---> LED.Kana
LED.0006 ---> Sync.Report
LED.0007 ---> Sync.Report
LED.0008 ---> Sync.Report
LED.0009 ---> LED.Mute
LED.000a ---> Sync.Report
LED.000b ---> Sync.Report
... Sync.Report lines left out
LED.0017 ---> Sync.Report
LED.0018 ---> Sync.Report
LED.0019 ---> LED.?
LED.001a ---> Sync.Report
LED.001b ---> Sync.Report
... Sync.Report lines left out
LED.0025 ---> Sync.Report
LED.0026 ---> Sync.Report
LED.0027 ---> LED.Sleep
LED.0028 ---> Sync.Report
LED.0029 ---> Sync.Report
... Sync.Report lines left out
LED.0049 ---> Sync.Report
LED.004a ---> Sync.Report
LED.GenericIndicator ---> LED.Misc
LED.004c ---> LED.Suspend
LED.004d ---> LED.?
LED.004e ---> Sync.Report
LED.004f ---> Sync.Report
... Sync.Report lines left out
LED.00fe ---> Sync.Report
LED.00ff ---> Sync.Report
GenericDesktop.0168 ---> Absolute.Misc
LED.NumLock ---> LED.?
LED.CapsLock ---> LED.?
LED.ScrollLock ---> LED.?

界面0003:17EF:609B.008B

05 0c 09 01 a1 01 85 01 19 00 2a 3c 02 15 00 26 3c 02 95 01 75 10 81 00 05 01 0a 68 01 15 80 25 7f 95 01 75 08 81 02 c0 05 01 09 80 a1 01 85 02 19 81 29 83 15 00 25 01 75 01 95 03 81 02 95 05 81 01 05 01 0a 68 01 15 80 25 7f 95 01 75 08 81 02 c0 06 01 ff 09 01 a1 01 85 05 95 07 75 08 15 00 26 ff 00 09 20 b1 03 c0 

  INPUT(1)[INPUT]
    Field(0)
      Application(Consumer.0001)
      Usage(573)
        Consumer.0000
        Consumer.0001
        Consumer.0002
        Consumer.0003
        Consumer.0004
        ... Consumer sequence left out
        Consumer.0235
        Consumer.0236
        Consumer.0237
        Consumer.HorizontalWheel
        Consumer.0239
        Consumer.023a
        Consumer.023b
        Consumer.023c
      Logical Minimum(0)
      Logical Maximum(572)
      Report Size(16)
      Report Count(1)
      Report Offset(0)
      Flags( Array Absolute )
    Field(1)
      Application(Consumer.0001)
      Usage(1)
        GenericDesktop.0168
      Logical Minimum(-128)
      Logical Maximum(127)
      Report Size(8)
      Report Count(1)
      Report Offset(16)
      Flags( Variable Absolute )
  INPUT(2)[INPUT]
    Field(0)
      Application(GenericDesktop.SystemControl)
      Usage(3)
        GenericDesktop.SystemPowerDown
        GenericDesktop.SystemSleep
        GenericDesktop.SystemWakeUp
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(3)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Application(GenericDesktop.SystemControl)
      Usage(1)
        GenericDesktop.0168
      Logical Minimum(-128)
      Logical Maximum(127)
      Report Size(8)
      Report Count(1)
      Report Offset(8)
      Flags( Variable Absolute )
  FEATURE(5)[FEATURE]
    Field(0)
      Application(ff01.0001)
      Usage(7)
        ff01.0020
        ff01.0020
        ff01.0020
        ff01.0020
        ff01.0020
        ff01.0020
        ff01.0020
      Logical Minimum(0)
      Logical Maximum(255)
      Report Size(8)
      Report Count(7)
      Report Offset(0)
      Flags( Constant Variable Absolute )

Consumer.0000 ---> Sync.Report
Consumer.0001 ---> Key.Unknown
Consumer.0002 ---> Key.Unknown
... Key.Unknown lines left out
Consumer.002e ---> Key.Unknown
Consumer.002f ---> Key.Unknown
Consumer.0030 ---> Key.Power
Consumer.0031 ---> Key.Restart
Consumer.0032 ---> Key.Sleep
Consumer.0033 ---> Key.Unknown
Consumer.0034 ---> Key.Sleep
Consumer.0035 ---> Key.KbdIlluminationToggle
Consumer.0036 ---> Key.Btn0
Consumer.0037 ---> Key.Unknown
Consumer.0038 ---> Key.Unknown
... Key.Unknown lines left out
Consumer.003e ---> Key.Unknown
Consumer.003f ---> Key.Unknown
Consumer.0040 ---> Key.Menu
Consumer.0041 ---> Key.Select
Consumer.0042 ---> Key.Up
Consumer.0043 ---> Key.Down
Consumer.0044 ---> Key.Left
Consumer.0045 ---> Key.Right
Consumer.0046 ---> Key.Esc
Consumer.0047 ---> Key.KPPlus
Consumer.0048 ---> Key.KPMinus
Consumer.0049 ---> Key.Unknown
Consumer.004a ---> Key.Unknown
... Key.Unknown lines left out
Consumer.005e ---> Key.Unknown
Consumer.005f ---> Key.Unknown
Consumer.0060 ---> Key.Info
Consumer.0061 ---> Key.Subtitle
Consumer.0062 ---> Key.Unknown
Consumer.0063 ---> Key.VCR
Consumer.0064 ---> Key.Unknown
Consumer.0065 ---> Key.Camera
Consumer.0066 ---> Key.Unknown
Consumer.0067 ---> Key.Unknown
Consumer.0068 ---> Key.Unknown
Consumer.0069 ---> Key.Red
Consumer.006a ---> Key.Green
Consumer.006b ---> Key.Blue
Consumer.006c ---> Key.Yellow
Consumer.006d ---> Key.Zoom
Consumer.006e ---> Key.Unknown
Consumer.006f ---> Key.BrightnessUp
Consumer.0070 ---> Key.BrightnessDown
Consumer.0071 ---> Key.Unknown
Consumer.0072 ---> Key.?
Consumer.0073 ---> Key.BrightnessMin
Consumer.0074 ---> Key.BrightnessMax
Consumer.0075 ---> Key.BrightnessAuto
Consumer.0076 ---> Key.Unknown
Consumer.0077 ---> Key.Unknown
... Key.Unknown lines left out
Consumer.0080 ---> Key.Unknown
Consumer.0081 ---> Key.Unknown
Consumer.0082 ---> Key.?
Consumer.0083 ---> Key.Last
Consumer.0084 ---> Key.Enter
Consumer.0085 ---> Key.Unknown
Consumer.0086 ---> Key.Unknown
Consumer.0087 ---> Key.Unknown
Consumer.0088 ---> Key.PC
Consumer.0089 ---> Key.TV
Consumer.008a ---> Key.WWW
Consumer.008b ---> Key.DVD
Consumer.008c ---> Key.Phone
Consumer.008d ---> Key.Program
Consumer.008e ---> Key.?
Consumer.008f ---> Key.?
Consumer.0090 ---> Key.Memo
Consumer.0091 ---> Key.CD
Consumer.0092 ---> Key.VCR
Consumer.0093 ---> Key.Tuner
Consumer.0094 ---> Key.Exit
Consumer.0095 ---> Key.Help
Consumer.0096 ---> Key.Tape
Consumer.0097 ---> Key.TV2
Consumer.0098 ---> Key.Sat
Consumer.0099 ---> Key.Unknown
Consumer.009a ---> Key.PVR
Consumer.009b ---> Key.Unknown
Consumer.009c ---> Key.ChannelUp
Consumer.009d ---> Key.ChannelDown
Consumer.009e ---> Key.Unknown
Consumer.009f ---> Key.Unknown
Consumer.00a0 ---> Key.VCR2
Consumer.00a1 ---> Key.Unknown
Consumer.00a2 ---> Key.Unknown
... Key.Unknown lines left out
Consumer.00ae ---> Key.Unknown
Consumer.00af ---> Key.Unknown
Consumer.00b0 ---> Key.Play
Consumer.00b1 ---> Key.Pause
Consumer.00b2 ---> Key.Record
Consumer.00b3 ---> Key.FastForward
Consumer.00b4 ---> Key.Rewind
Consumer.00b5 ---> Key.NextSong
Consumer.00b6 ---> Key.PreviousSong
Consumer.00b7 ---> Key.StopCD
Consumer.00b8 ---> Key.EjectCD
Consumer.00b9 ---> Key.Shuffle
Consumer.00ba ---> Key.Unknown
Consumer.00bb ---> Key.Unknown
Consumer.00bc ---> Key.?
Consumer.00bd ---> Key.Unknown
Consumer.00be ---> Key.Unknown
Consumer.00bf ---> Key.Slow
Consumer.00c0 ---> Key.Unknown
Consumer.00c1 ---> Key.Unknown
... Key.Unknown lines left out
Consumer.00cb ---> Key.Unknown
Consumer.00cc ---> Key.Unknown
Consumer.00cd ---> Key.PlayPause
Consumer.00ce ---> Key.Unknown
Consumer.00cf ---> Key.VoiceCommand
Consumer.00d0 ---> Key.Unknown
Consumer.00d1 ---> Key.Unknown
... Key.Unknown lines left out
Consumer.00de ---> Key.Unknown
Consumer.00df ---> Key.Unknown
Consumer.00e0 ---> Absolute.Volume
Consumer.00e1 ---> Key.Unknown
Consumer.00e2 ---> Key.Mute
Consumer.00e3 ---> Key.Unknown
Consumer.00e4 ---> Key.Unknown
Consumer.00e5 ---> Key.BassBoost
Consumer.00e6 ---> Key.Unknown
Consumer.00e7 ---> Key.Unknown
Consumer.00e8 ---> Key.Unknown
Consumer.00e9 ---> Key.VolumeUp
Consumer.00ea ---> Key.VolumeDown
Consumer.00eb ---> Key.Unknown
Consumer.00ec ---> Key.Unknown
... Key.Unknown lines left out
Consumer.00f3 ---> Key.Unknown
Consumer.00f4 ---> Key.Unknown
Consumer.00f5 ---> Key.Slow
Consumer.00f6 ---> Key.Unknown
Consumer.00f7 ---> Key.Unknown
... Key.Unknown lines left out
Consumer.017f ---> Key.Unknown
Consumer.0180 ---> Key.Unknown
Consumer.0181 ---> Key.ButtonConfig
Consumer.0182 ---> Key.Bookmarks
Consumer.0183 ---> Key.Config
Consumer.0184 ---> Key.?
Consumer.0185 ---> Key.?
Consumer.0186 ---> Key.?
Consumer.0187 ---> Key.?
Consumer.0188 ---> Key.?
Consumer.0189 ---> Key.?
Consumer.018a ---> Key.Mail
Consumer.018b ---> Key.?
Consumer.018c ---> Key.?
Consumer.018d ---> Key.?
Consumer.018e ---> Key.Calendar
Consumer.018f ---> Key.TaskManager
Consumer.0190 ---> Key.Journal
Consumer.0191 ---> Key.Finance
Consumer.0192 ---> Key.Calc
Consumer.0193 ---> Key.Player
Consumer.0194 ---> Key.File
Consumer.0195 ---> Key.Unknown
Consumer.0196 ---> Key.WWW
Consumer.0197 ---> Key.Unknown
Consumer.0198 ---> Key.Unknown
Consumer.0199 ---> Key.Chat
Consumer.019a ---> Key.Unknown
Consumer.019b ---> Key.Unknown
Consumer.019c ---> Key.Logoff
Consumer.019d ---> Key.Unknown
Consumer.019e ---> Key.Coffee
Consumer.019f ---> Key.ControlPanel
Consumer.01a0 ---> Key.Unknown
Consumer.01a1 ---> Key.Unknown
Consumer.01a2 ---> Key.AppSelect
Consumer.01a3 ---> Key.Next
Consumer.01a4 ---> Key.Previous
Consumer.01a5 ---> Key.Unknown
Consumer.01a6 ---> Key.Help
Consumer.01a7 ---> Key.Documents
Consumer.01a8 ---> Key.Unknown
Consumer.01a9 ---> Key.Unknown
Consumer.01aa ---> Key.Unknown
Consumer.01ab ---> Key.SpellCheck
Consumer.01ac ---> Key.Unknown
Consumer.01ad ---> Key.Unknown
Consumer.01ae ---> Key.Keyboard
Consumer.01af ---> Key.Unknown
Consumer.01b0 ---> Key.Unknown
Consumer.01b1 ---> Key.ScreenSaver
Consumer.01b2 ---> Key.Unknown
Consumer.01b3 ---> Key.Unknown
Consumer.01b4 ---> Key.File
Consumer.01b5 ---> Key.Unknown
Consumer.01b6 ---> Key.?
Consumer.01b7 ---> Key.Audio
Consumer.01b8 ---> Key.Video
Consumer.01b9 ---> Key.Unknown
Consumer.01ba ---> Key.Unknown
Consumer.01bb ---> Key.Unknown
Consumer.01bc ---> Key.?
Consumer.01bd ---> Key.Info
Consumer.01be ---> Key.Unknown
Consumer.01bf ---> Key.Unknown
... Key.Unknown lines left out
Consumer.01ff ---> Key.Unknown
Consumer.0200 ---> Key.Unknown
Consumer.0201 ---> Key.New
Consumer.0202 ---> Key.Open
Consumer.0203 ---> Key.Close
Consumer.0204 ---> Key.Exit
Consumer.0205 ---> Key.Unknown
Consumer.0206 ---> Key.Unknown
Consumer.0207 ---> Key.Save
Consumer.0208 ---> Key.Print
Consumer.0209 ---> Key.Props
Consumer.020a ---> Key.Unknown
Consumer.020b ---> Key.Unknown
... Key.Unknown lines left out
Consumer.0218 ---> Key.Unknown
Consumer.0219 ---> Key.Unknown
Consumer.021a ---> Key.Undo
Consumer.021b ---> Key.Copy
Consumer.021c ---> Key.Cut
Consumer.021d ---> Key.Paste
Consumer.021e ---> Key.Unknown
Consumer.021f ---> Key.Find
Consumer.0220 ---> Key.Unknown
Consumer.0221 ---> Key.Search
Consumer.0222 ---> Key.Goto
Consumer.0223 ---> Key.HomePage
Consumer.0224 ---> Key.Back
Consumer.0225 ---> Key.Forward
Consumer.0226 ---> Key.Stop
Consumer.0227 ---> Key.Refresh
Consumer.0228 ---> Key.Unknown
Consumer.0229 ---> Key.Unknown
Consumer.022a ---> Key.Bookmarks
Consumer.022b ---> Key.Unknown
Consumer.022c ---> Key.Unknown
Consumer.022d ---> Key.?
Consumer.022e ---> Key.?
Consumer.022f ---> Key.?
Consumer.0230 ---> Key.Unknown
Consumer.0231 ---> Key.Unknown
Consumer.0232 ---> Key.Unknown
Consumer.0233 ---> Key.ScrollUp
Consumer.0234 ---> Key.ScrollDown
Consumer.0235 ---> Key.Unknown
Consumer.0236 ---> Key.Unknown
Consumer.0237 ---> Key.Unknown
Consumer.HorizontalWheel ---> Relative.HWheel
Consumer.0239 ---> Key.Unknown
Consumer.023a ---> Key.Unknown
Consumer.023b ---> Key.Unknown
Consumer.023c ---> Key.Unknown
GenericDesktop.0168 ---> Absolute.Misc
GenericDesktop.SystemPowerDown ---> Key.Power
GenericDesktop.SystemSleep ---> Key.Sleep
GenericDesktop.SystemWakeUp ---> Key.WakeUp
GenericDesktop.0168 ---> Sync.Report

旧键盘、接口的HID描述符0003:17EF:6022.0087(只有一个键盘接口):

05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 95 01 75 08 81 01 15 00 26 a4 00 19 00 2a a4 00 05 07 75 08 95 06 81 00 c0 

  INPUT[INPUT]
    Field(0)
      Application(GenericDesktop.Keyboard)
      Usage(8)
        Keyboard.00e0
        Keyboard.00e1
        Keyboard.00e2
        Keyboard.00e3
        Keyboard.00e4
        Keyboard.00e5
        Keyboard.00e6
        Keyboard.00e7
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(8)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Application(GenericDesktop.Keyboard)
      Usage(165)
        Keyboard.0000
        Keyboard.0001
        Keyboard.0002
        Keyboard.0003
        Keyboard.0004
        ... Keyboard sequence left out
        Keyboard.009f
        Keyboard.00a0
        Keyboard.00a1
        Keyboard.00a2
        Keyboard.00a3
        Keyboard.00a4
      Logical Minimum(0)
      Logical Maximum(164)
      Report Size(8)
      Report Count(6)
      Report Offset(16)
      Flags( Array Absolute )

Keyboard.00e0 ---> Key.LeftControl
Keyboard.00e1 ---> Key.LeftShift
Keyboard.00e2 ---> Key.LeftAlt
Keyboard.00e3 ---> Key.LeftMeta
Keyboard.00e4 ---> Key.RightCtrl
Keyboard.00e5 ---> Key.RightShift
Keyboard.00e6 ---> Key.RightAlt
Keyboard.00e7 ---> Key.RightMeta
Keyboard.0000 ---> Sync.Report
Keyboard.0001 ---> Sync.Report
Keyboard.0002 ---> Sync.Report
Keyboard.0003 ---> Sync.Report
Keyboard.0004 ---> Key.A
Keyboard.0005 ---> Key.B
Keyboard.0006 ---> Key.C
Keyboard.0007 ---> Key.D
Keyboard.0008 ---> Key.E
Keyboard.0009 ---> Key.F
Keyboard.000a ---> Key.G
Keyboard.000b ---> Key.H
Keyboard.000c ---> Key.I
Keyboard.000d ---> Key.J
Keyboard.000e ---> Key.K
Keyboard.000f ---> Key.L
Keyboard.0010 ---> Key.M
Keyboard.0011 ---> Key.N
Keyboard.0012 ---> Key.O
Keyboard.0013 ---> Key.P
Keyboard.0014 ---> Key.Q
Keyboard.0015 ---> Key.R
Keyboard.0016 ---> Key.S
Keyboard.0017 ---> Key.T
Keyboard.0018 ---> Key.U
Keyboard.0019 ---> Key.V
Keyboard.001a ---> Key.W
Keyboard.001b ---> Key.X
Keyboard.001c ---> Key.Y
Keyboard.001d ---> Key.Z
Keyboard.001e ---> Key.1
Keyboard.001f ---> Key.2
Keyboard.0020 ---> Key.3
Keyboard.0021 ---> Key.4
Keyboard.0022 ---> Key.5
Keyboard.0023 ---> Key.6
Keyboard.0024 ---> Key.7
Keyboard.0025 ---> Key.8
Keyboard.0026 ---> Key.9
Keyboard.0027 ---> Key.0
Keyboard.0028 ---> Key.Enter
Keyboard.0029 ---> Key.Esc
Keyboard.002a ---> Key.Backspace
Keyboard.002b ---> Key.Tab
Keyboard.002c ---> Key.Space
Keyboard.002d ---> Key.Minus
Keyboard.002e ---> Key.Equal
Keyboard.002f ---> Key.LeftBrace
Keyboard.0030 ---> Key.RightBrace
Keyboard.0031 ---> Key.BackSlash
Keyboard.0032 ---> Key.BackSlash
Keyboard.0033 ---> Key.Semicolon
Keyboard.0034 ---> Key.Apostrophe
Keyboard.0035 ---> Key.Grave
Keyboard.0036 ---> Key.Comma
Keyboard.0037 ---> Key.Dot
Keyboard.0038 ---> Key.Slash
Keyboard.0039 ---> Key.CapsLock
Keyboard.003a ---> Key.F1
Keyboard.003b ---> Key.F2
Keyboard.003c ---> Key.F3
Keyboard.003d ---> Key.F4
Keyboard.003e ---> Key.F5
Keyboard.003f ---> Key.F6
Keyboard.0040 ---> Key.F7
Keyboard.0041 ---> Key.F8
Keyboard.0042 ---> Key.F9
Keyboard.0043 ---> Key.F10
Keyboard.0044 ---> Key.F11
Keyboard.0045 ---> Key.F12
Keyboard.0046 ---> Key.SysRq
Keyboard.0047 ---> Key.ScrollLock
Keyboard.0048 ---> Key.Pause
Keyboard.0049 ---> Key.Insert
Keyboard.004a ---> Key.Home
Keyboard.004b ---> Key.PageUp
Keyboard.004c ---> Key.Delete
Keyboard.004d ---> Key.End
Keyboard.004e ---> Key.PageDown
Keyboard.004f ---> Key.Right
Keyboard.0050 ---> Key.Left
Keyboard.0051 ---> Key.Down
Keyboard.0052 ---> Key.Up
Keyboard.0053 ---> Key.NumLock
Keyboard.0054 ---> Key.KPSlash
Keyboard.0055 ---> Key.KPAsterisk
Keyboard.0056 ---> Key.KPMinus
Keyboard.0057 ---> Key.KPPlus
Keyboard.0058 ---> Key.KPEnter
Keyboard.0059 ---> Key.KP1
Keyboard.005a ---> Key.KP2
Keyboard.005b ---> Key.KP3
Keyboard.005c ---> Key.KP4
Keyboard.005d ---> Key.KP5
Keyboard.005e ---> Key.KP6
Keyboard.005f ---> Key.KP7
Keyboard.0060 ---> Key.KP8
Keyboard.0061 ---> Key.KP9
Keyboard.0062 ---> Key.KP0
Keyboard.0063 ---> Key.KPDot
Keyboard.0064 ---> Key.102nd
Keyboard.0065 ---> Key.Compose
Keyboard.0066 ---> Key.Power
Keyboard.0067 ---> Key.KPEqual
Keyboard.0068 ---> Key.F13
Keyboard.0069 ---> Key.F14
Keyboard.006a ---> Key.F15
Keyboard.006b ---> Key.F16
Keyboard.006c ---> Key.F17
Keyboard.006d ---> Key.F18
Keyboard.006e ---> Key.F19
Keyboard.006f ---> Key.F20
Keyboard.0070 ---> Key.F21
Keyboard.0071 ---> Key.F22
Keyboard.0072 ---> Key.F23
Keyboard.0073 ---> Key.F24
Keyboard.0074 ---> Key.Open
Keyboard.0075 ---> Key.Help
Keyboard.0076 ---> Key.Props
Keyboard.0077 ---> Key.Front
Keyboard.0078 ---> Key.Stop
Keyboard.0079 ---> Key.Again
Keyboard.007a ---> Key.Undo
Keyboard.007b ---> Key.Cut
Keyboard.007c ---> Key.Copy
Keyboard.007d ---> Key.Paste
Keyboard.007e ---> Key.Find
Keyboard.007f ---> Key.Mute
Keyboard.0080 ---> Key.VolumeUp
Keyboard.0081 ---> Key.VolumeDown
Keyboard.0082 ---> Key.Unknown
Keyboard.0083 ---> Key.Unknown
Keyboard.0084 ---> Key.Unknown
Keyboard.0085 ---> Key.KPComma
Keyboard.0086 ---> Key.Unknown
Keyboard.0087 ---> Key.RO
Keyboard.0088 ---> Key.Katakana/Hiragana
Keyboard.0089 ---> Key.Yen
Keyboard.008a ---> Key.Henkan
Keyboard.008b ---> Key.Muhenkan
Keyboard.008c ---> Key.KPJpComma
Keyboard.008d ---> Key.Unknown
Keyboard.008e ---> Key.Unknown
Keyboard.008f ---> Key.Unknown
Keyboard.0090 ---> Key.Hangeul
Keyboard.0091 ---> Key.Hanja
Keyboard.0092 ---> Key.Katakana
Keyboard.0093 ---> Key.HIRAGANA
Keyboard.0094 ---> Key.Zenkaku/Hankaku
Keyboard.0095 ---> Key.Unknown
Keyboard.0096 ---> Key.Unknown
    ... Key.Unknown lines left out
Keyboard.009a ---> Key.Unknown
Keyboard.009b ---> Key.Unknown
Keyboard.009c ---> Key.Delete
Keyboard.009d ---> Key.Unknown
Keyboard.009e ---> Key.Unknown
    ... Key.Unknown lines left out
Keyboard.00a3 ---> Key.Unknown
Keyboard.00a4 ---> Key.Unknown

(遇到的问题联想专业无线键盘, 一个华硕键盘... 两款无线键盘均由致伸科技制造。)

(Windows 和 GRUB 上未遇到此问题。)

(伊夫·特鲁多已经尝试过并实施了司机它忽略了额外的字节,但我宁愿使用普通内核中的一些东西和一些不那么hacky的东西。)

答案1

以下是 0003:17EF:609B.0089(新键盘)的原始 HID 描述符的翻译,使用赫德

05 01      Usage Page (Desktop),               ; Generic desktop controls (01h)
09 06      Usage (Keyboard),                   ; Keyboard (06h, application collection)
a1 01      Collection (Application),
05 07          Usage Page (Keyboard),          ; Keyboard/keypad (07h)
19 e0          Usage Minimum (KB Leftcontrol), ; Keyboard left control (E0h, dynamic value)
29 e7          Usage Maximum (KB Right GUI),   ; Keyboard right GUI (E7h, dynamic value)
15 00          Logical Minimum (0),
25 01          Logical Maximum (1),
75 01          Report Size (1),
95 08          Report Count (8),
81 02          Input (Variable),

75 08          Report Size (8),
95 01          Report Count (1),
81 01          Input (Constant),

05 08          Usage Page (LED),               ; LEDs (08h)
19 01          Usage Minimum (01h),
29 03          Usage Maximum (03h),
75 01          Report Size (1),
95 03          Report Count (3),
91 02          Output (Variable),
95 01          Report Count (1),
75 05          Report Size (5),
91 01          Output (Constant),

15 00          Logical Minimum (0),
26 ff 00       Logical Maximum (255),
19 00          Usage Minimum (00h),
2a ff 00       Usage Maximum (FFh),
05 07          Usage Page (Keyboard),          ; Keyboard/keypad (07h)
75 08          Report Size (8),
95 06          Report Count (6),
81 00          Input,

05 01          Usage Page (Desktop),           ; Generic desktop controls (01h)
0a 68 01       Usage (0168h),
15 80          Logical Minimum (-128),
25 7f          Logical Maximum (127),
95 01          Report Count (1),
75 08          Report Size (8),
81 02          Input (Variable),
c0         End Collection

它既包含Input字段(来自键盘的报告)又包含Output字段(发送到键盘的控制消息),并且它们混杂在一起,这并不奇怪。输入字段也非常标准:第一个字节具有用于修饰键的位(左移和右移/ctrl/alt/meta),后面跟着一个常量零字节,然后是最多 6 个同时按下的键的 6 个字节。正如您从报告示例中看到的,这也正是键盘发送的内容。

最后一个额外字节的范围为 -128 到 127(71-15 也是如此),并被描述为“通用桌面”,使用索引为 0x168。公开的 HID 使用表 (HUT) 版本 1.12 中未分配此索引,因此我不知道它的含义。它必须是某种模拟范围(键盘倾斜?压力?其他传感器?)。它是什么也不是特别重要,它只会被 HID 转换层忽略。

输出消息也是标准的:1个字节,其中3位控制键盘LED(num lock、caps lock、scroll lock),5位未使用。

Usage Page (Keyboard)然而,从输出字段到下一个输入字段的切换Usage Page (LED)发生在块的中间,显然这混淆了内核 HID 描述符解析器,因此它也将此输入字段解释为“LED”,这是没有意义的根本没有,并阻止它按应有的方式翻译按键。

这是一个错误:要么在内核 HID 描述符解析器中,要么在 HID 描述符中。在第一种情况下,它应该被修复,在最后一种情况下,描述符应该在内核中得到一个怪癖,以便它可以被修复。无论如何,将其作为错误报告给内核维护人员。

一旦修复,内核应该可以正常识别键盘事件。不需要额外的驱动程序(尽管在错误修复之前使用一个驱动程序作为解决方法并没有什么坏处)。

内核 HID 解析器位于 中drivers/hid/hid-core.c,以防您想自行修复它。

答案2

正确的修复已合并到 Linux 内核中:https://lkml.org/lkml/2019/3/27/350

只要 5.2 版本发布,它就会可用,并且可能会在某些发行版上向后移植。

答案3

只是为了增加 @jan-molnar 解决 HID 解析的努力,我的键盘具有非常相似的 rdesc,因为它也是由 Primax USB 芯片(PiD 4e63)驱动:

root@Ub-RL85:~# cat /sys/kernel/debug/hid/*2/rdesc
05 01 09 06 a1 01 05 07 19 e0 29 e7 15 00 25 01 75 01 95 08 81 02 75 08 95 01 81 01 05 08 19 01 29 03 75 01 95 03 91 02 95 01 75 05 91 01 15 00 26 ff 00 19 00 2a ff 00 05 07 75 08 95 06 81 00 c0 

  INPUT[INPUT]
    Field(0)
      Application(GenericDesktop.Keyboard)
      Usage(8)
        Keyboard.00e0
        Keyboard.00e1
        Keyboard.00e2
        Keyboard.00e3
        Keyboard.00e4
        Keyboard.00e5
        Keyboard.00e6
        Keyboard.00e7
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(8)
      Report Offset(0)
      Flags( Variable Absolute )
    Field(1)
      Application(GenericDesktop.Keyboard)
      Usage(256)
        LED.0000
        LED.NumLock
        LED.CapsLock
        LED.ScrollLock
        LED.Compose
        LED.Kana
        LED.0006
        LED.0007
        LED.0008
        LED.0009
        LED.000a
        LED.000b
        LED.000c
        LED.000d
        LED.000e
        LED.000f
        LED.0010
        LED.0011
        LED.0012
        LED.0013
        LED.0014
        LED.0015
        LED.0016
        LED.0017
        LED.0018
        LED.0019
        LED.001a
        LED.001b
        LED.001c
        LED.001d
        LED.001e
        LED.001f
        LED.0020
        LED.0021
        LED.0022
        LED.0023
        LED.0024
        LED.0025
        LED.0026
        LED.0027
        LED.0028
        LED.0029
        LED.002a
        LED.002b
        LED.002c
        LED.002d
        LED.002e
        LED.002f
        LED.0030
        LED.0031
        LED.0032
        LED.0033
        LED.0034
        LED.0035
        LED.0036
        LED.0037
        LED.0038
        LED.0039
        LED.003a
        LED.003b
        LED.003c
        LED.003d
        LED.003e
        LED.003f
        LED.0040
        LED.0041
        LED.0042
        LED.0043
        LED.0044
        LED.0045
        LED.0046
        LED.0047
        LED.0048
        LED.0049
        LED.004a
        LED.GenericIndicator
        LED.004c
        LED.004d
        LED.004e
        LED.004f
        LED.0050
        LED.0051
        LED.0052
        LED.0053
        LED.0054
        LED.0055
        LED.0056
        LED.0057
        LED.0058
        LED.0059
        LED.005a
        LED.005b
        LED.005c
        LED.005d
        LED.005e
        LED.005f
        LED.0060
        LED.0061
        LED.0062
        LED.0063
        LED.0064
        LED.0065
        LED.0066
        LED.0067
        LED.0068
        LED.0069
        LED.006a
        LED.006b
        LED.006c
        LED.006d
        LED.006e
        LED.006f
        LED.0070
        LED.0071
        LED.0072
        LED.0073
        LED.0074
        LED.0075
        LED.0076
        LED.0077
        LED.0078
        LED.0079
        LED.007a
        LED.007b
        LED.007c
        LED.007d
        LED.007e
        LED.007f
        LED.0080
        LED.0081
        LED.0082
        LED.0083
        LED.0084
        LED.0085
        LED.0086
        LED.0087
        LED.0088
        LED.0089
        LED.008a
        LED.008b
        LED.008c
        LED.008d
        LED.008e
        LED.008f
        LED.0090
        LED.0091
        LED.0092
        LED.0093
        LED.0094
        LED.0095
        LED.0096
        LED.0097
        LED.0098
        LED.0099
        LED.009a
        LED.009b
        LED.009c
        LED.009d
        LED.009e
        LED.009f
        LED.00a0
        LED.00a1
        LED.00a2
        LED.00a3
        LED.00a4
        LED.00a5
        LED.00a6
        LED.00a7
        LED.00a8
        LED.00a9
        LED.00aa
        LED.00ab
        LED.00ac
        LED.00ad
        LED.00ae
        LED.00af
        LED.00b0
        LED.00b1
        LED.00b2
        LED.00b3
        LED.00b4
        LED.00b5
        LED.00b6
        LED.00b7
        LED.00b8
        LED.00b9
        LED.00ba
        LED.00bb
        LED.00bc
        LED.00bd
        LED.00be
        LED.00bf
        LED.00c0
        LED.00c1
        LED.00c2
        LED.00c3
        LED.00c4
        LED.00c5
        LED.00c6
        LED.00c7
        LED.00c8
        LED.00c9
        LED.00ca
        LED.00cb
        LED.00cc
        LED.00cd
        LED.00ce
        LED.00cf
        LED.00d0
        LED.00d1
        LED.00d2
        LED.00d3
        LED.00d4
        LED.00d5
        LED.00d6
        LED.00d7
        LED.00d8
        LED.00d9
        LED.00da
        LED.00db
        LED.00dc
        LED.00dd
        LED.00de
        LED.00df
        LED.00e0
        LED.00e1
        LED.00e2
        LED.00e3
        LED.00e4
        LED.00e5
        LED.00e6
        LED.00e7
        LED.00e8
        LED.00e9
        LED.00ea
        LED.00eb
        LED.00ec
        LED.00ed
        LED.00ee
        LED.00ef
        LED.00f0
        LED.00f1
        LED.00f2
        LED.00f3
        LED.00f4
        LED.00f5
        LED.00f6
        LED.00f7
        LED.00f8
        LED.00f9
        LED.00fa
        LED.00fb
        LED.00fc
        LED.00fd
        LED.00fe
        LED.00ff
      Logical Minimum(0)
      Logical Maximum(255)
      Report Size(8)
      Report Count(6)
      Report Offset(16)
      Flags( Array Absolute )
  OUTPUT[OUTPUT]
    Field(0)
      Application(GenericDesktop.Keyboard)
      Usage(3)
        LED.NumLock
        LED.CapsLock
        LED.ScrollLock
      Logical Minimum(0)
      Logical Maximum(1)
      Report Size(1)
      Report Count(3)
      Report Offset(0)
      Flags( Variable Absolute )

Keyboard.00e0 ---> Key.LeftControl
Keyboard.00e1 ---> Key.LeftShift
Keyboard.00e2 ---> Key.LeftAlt
Keyboard.00e3 ---> Key.LeftMeta
Keyboard.00e4 ---> Key.RightCtrl
Keyboard.00e5 ---> Key.RightShift
Keyboard.00e6 ---> Key.RightAlt
Keyboard.00e7 ---> Key.RightMeta
LED.0000 ---> Sync.Report
LED.NumLock ---> LED.NumLock
LED.CapsLock ---> LED.CapsLock
LED.ScrollLock ---> LED.ScrollLock
LED.Compose ---> LED.Compose
LED.Kana ---> LED.Kana
LED.0006 ---> Sync.Report
LED.0007 ---> Sync.Report
LED.0008 ---> Sync.Report
LED.0009 ---> LED.Mute
LED.000a ---> Sync.Report
LED.000b ---> Sync.Report
LED.000c ---> Sync.Report
LED.000d ---> Sync.Report
LED.000e ---> Sync.Report
LED.000f ---> Sync.Report
LED.0010 ---> Sync.Report
LED.0011 ---> Sync.Report
LED.0012 ---> Sync.Report
LED.0013 ---> Sync.Report
LED.0014 ---> Sync.Report
LED.0015 ---> Sync.Report
LED.0016 ---> Sync.Report
LED.0017 ---> Sync.Report
LED.0018 ---> Sync.Report
LED.0019 ---> LED.?
LED.001a ---> Sync.Report
LED.001b ---> Sync.Report
LED.001c ---> Sync.Report
LED.001d ---> Sync.Report
LED.001e ---> Sync.Report
LED.001f ---> Sync.Report
LED.0020 ---> Sync.Report
LED.0021 ---> Sync.Report
LED.0022 ---> Sync.Report
LED.0023 ---> Sync.Report
LED.0024 ---> Sync.Report
LED.0025 ---> Sync.Report
LED.0026 ---> Sync.Report
LED.0027 ---> LED.Sleep
LED.0028 ---> Sync.Report
LED.0029 ---> Sync.Report
LED.002a ---> Sync.Report
LED.002b ---> Sync.Report
LED.002c ---> Sync.Report
LED.002d ---> Sync.Report
LED.002e ---> Sync.Report
LED.002f ---> Sync.Report
LED.0030 ---> Sync.Report
LED.0031 ---> Sync.Report
LED.0032 ---> Sync.Report
LED.0033 ---> Sync.Report
LED.0034 ---> Sync.Report
LED.0035 ---> Sync.Report
LED.0036 ---> Sync.Report
LED.0037 ---> Sync.Report
LED.0038 ---> Sync.Report
LED.0039 ---> Sync.Report
LED.003a ---> Sync.Report
LED.003b ---> Sync.Report
LED.003c ---> Sync.Report
LED.003d ---> Sync.Report
LED.003e ---> Sync.Report
LED.003f ---> Sync.Report
LED.0040 ---> Sync.Report
LED.0041 ---> Sync.Report
LED.0042 ---> Sync.Report
LED.0043 ---> Sync.Report
LED.0044 ---> Sync.Report
LED.0045 ---> Sync.Report
LED.0046 ---> Sync.Report
LED.0047 ---> Sync.Report
LED.0048 ---> Sync.Report
LED.0049 ---> Sync.Report
LED.004a ---> Sync.Report
LED.GenericIndicator ---> LED.Misc
LED.004c ---> LED.Suspend
LED.004d ---> LED.?
LED.004e ---> Sync.Report
LED.004f ---> Sync.Report
LED.0050 ---> Sync.Report
LED.0051 ---> Sync.Report
LED.0052 ---> Sync.Report
LED.0053 ---> Sync.Report
LED.0054 ---> Sync.Report
LED.0055 ---> Sync.Report
LED.0056 ---> Sync.Report
LED.0057 ---> Sync.Report
LED.0058 ---> Sync.Report
LED.0059 ---> Sync.Report
LED.005a ---> Sync.Report
LED.005b ---> Sync.Report
LED.005c ---> Sync.Report
LED.005d ---> Sync.Report
LED.005e ---> Sync.Report
LED.005f ---> Sync.Report
LED.0060 ---> Sync.Report
LED.0061 ---> Sync.Report
LED.0062 ---> Sync.Report
LED.0063 ---> Sync.Report
LED.0064 ---> Sync.Report
LED.0065 ---> Sync.Report
LED.0066 ---> Sync.Report
LED.0067 ---> Sync.Report
LED.0068 ---> Sync.Report
LED.0069 ---> Sync.Report
LED.006a ---> Sync.Report
LED.006b ---> Sync.Report
LED.006c ---> Sync.Report
LED.006d ---> Sync.Report
LED.006e ---> Sync.Report
LED.006f ---> Sync.Report
LED.0070 ---> Sync.Report
LED.0071 ---> Sync.Report
LED.0072 ---> Sync.Report
LED.0073 ---> Sync.Report
LED.0074 ---> Sync.Report
LED.0075 ---> Sync.Report
LED.0076 ---> Sync.Report
LED.0077 ---> Sync.Report
LED.0078 ---> Sync.Report
LED.0079 ---> Sync.Report
LED.007a ---> Sync.Report
LED.007b ---> Sync.Report
LED.007c ---> Sync.Report
LED.007d ---> Sync.Report
LED.007e ---> Sync.Report
LED.007f ---> Sync.Report
LED.0080 ---> Sync.Report
LED.0081 ---> Sync.Report
LED.0082 ---> Sync.Report
LED.0083 ---> Sync.Report
LED.0084 ---> Sync.Report
LED.0085 ---> Sync.Report
LED.0086 ---> Sync.Report
LED.0087 ---> Sync.Report
LED.0088 ---> Sync.Report
LED.0089 ---> Sync.Report
LED.008a ---> Sync.Report
LED.008b ---> Sync.Report
LED.008c ---> Sync.Report
LED.008d ---> Sync.Report
LED.008e ---> Sync.Report
LED.008f ---> Sync.Report
LED.0090 ---> Sync.Report
LED.0091 ---> Sync.Report
LED.0092 ---> Sync.Report
LED.0093 ---> Sync.Report
LED.0094 ---> Sync.Report
LED.0095 ---> Sync.Report
LED.0096 ---> Sync.Report
LED.0097 ---> Sync.Report
LED.0098 ---> Sync.Report
LED.0099 ---> Sync.Report
LED.009a ---> Sync.Report
LED.009b ---> Sync.Report
LED.009c ---> Sync.Report
LED.009d ---> Sync.Report
LED.009e ---> Sync.Report
LED.009f ---> Sync.Report
LED.00a0 ---> Sync.Report
LED.00a1 ---> Sync.Report
LED.00a2 ---> Sync.Report
LED.00a3 ---> Sync.Report
LED.00a4 ---> Sync.Report
LED.00a5 ---> Sync.Report
LED.00a6 ---> Sync.Report
LED.00a7 ---> Sync.Report
LED.00a8 ---> Sync.Report
LED.00a9 ---> Sync.Report
LED.00aa ---> Sync.Report
LED.00ab ---> Sync.Report
LED.00ac ---> Sync.Report
LED.00ad ---> Sync.Report
LED.00ae ---> Sync.Report
LED.00af ---> Sync.Report
LED.00b0 ---> Sync.Report
LED.00b1 ---> Sync.Report
LED.00b2 ---> Sync.Report
LED.00b3 ---> Sync.Report
LED.00b4 ---> Sync.Report
LED.00b5 ---> Sync.Report
LED.00b6 ---> Sync.Report
LED.00b7 ---> Sync.Report
LED.00b8 ---> Sync.Report
LED.00b9 ---> Sync.Report
LED.00ba ---> Sync.Report
LED.00bb ---> Sync.Report
LED.00bc ---> Sync.Report
LED.00bd ---> Sync.Report
LED.00be ---> Sync.Report
LED.00bf ---> Sync.Report
LED.00c0 ---> Sync.Report
LED.00c1 ---> Sync.Report
LED.00c2 ---> Sync.Report
LED.00c3 ---> Sync.Report
LED.00c4 ---> Sync.Report
LED.00c5 ---> Sync.Report
LED.00c6 ---> Sync.Report
LED.00c7 ---> Sync.Report
LED.00c8 ---> Sync.Report
LED.00c9 ---> Sync.Report
LED.00ca ---> Sync.Report
LED.00cb ---> Sync.Report
LED.00cc ---> Sync.Report
LED.00cd ---> Sync.Report
LED.00ce ---> Sync.Report
LED.00cf ---> Sync.Report
LED.00d0 ---> Sync.Report
LED.00d1 ---> Sync.Report
LED.00d2 ---> Sync.Report
LED.00d3 ---> Sync.Report
LED.00d4 ---> Sync.Report
LED.00d5 ---> Sync.Report
LED.00d6 ---> Sync.Report
LED.00d7 ---> Sync.Report
LED.00d8 ---> Sync.Report
LED.00d9 ---> Sync.Report
LED.00da ---> Sync.Report
LED.00db ---> Sync.Report
LED.00dc ---> Sync.Report
LED.00dd ---> Sync.Report
LED.00de ---> Sync.Report
LED.00df ---> Sync.Report
LED.00e0 ---> Sync.Report
LED.00e1 ---> Sync.Report
LED.00e2 ---> Sync.Report
LED.00e3 ---> Sync.Report
LED.00e4 ---> Sync.Report
LED.00e5 ---> Sync.Report
LED.00e6 ---> Sync.Report
LED.00e7 ---> Sync.Report
LED.00e8 ---> Sync.Report
LED.00e9 ---> Sync.Report
LED.00ea ---> Sync.Report
LED.00eb ---> Sync.Report
LED.00ec ---> Sync.Report
LED.00ed ---> Sync.Report
LED.00ee ---> Sync.Report
LED.00ef ---> Sync.Report
LED.00f0 ---> Sync.Report
LED.00f1 ---> Sync.Report
LED.00f2 ---> Sync.Report
LED.00f3 ---> Sync.Report
LED.00f4 ---> Sync.Report
LED.00f5 ---> Sync.Report
LED.00f6 ---> Sync.Report
LED.00f7 ---> Sync.Report
LED.00f8 ---> Sync.Report
LED.00f9 ---> Sync.Report
LED.00fa ---> Sync.Report
LED.00fb ---> Sync.Report
LED.00fc ---> Sync.Report
LED.00fd ---> Sync.Report
LED.00fe ---> Sync.Report
LED.00ff ---> Sync.Report
LED.NumLock ---> LED.?
LED.CapsLock ---> LED.?
LED.ScrollLock ---> LED.?

我问这里

不要以为伊夫·特鲁多的“司机”就是答案。我愿意帮忙。

答案4

这终于解决了!我在Ubuntu 18.04内核:4.15.0-64,Ubuntu 18.04.3内核:5.0.0-29中测试它。

键盘和鼠标似乎工作正常,没有任何问题!我必须禁用用于使其工作的解决方法!https://github.com/y-trudeau/linux_lenovo_ultraslim_plus

根据此报告,Fedora 30 中也修复了该问题:https://bugzilla.redhat.com/show_bug.cgi?id=1625415

相关内容