由于某种原因,CTRL和ALT键映射到Shift

我安装了Ubuntu 14.04,我很喜欢它。 但是,在玩一款名为Garry’s Mod的游戏时,我注意到我的有线键盘上的CTRLALT键都被检测为Shift 。 我查看了键盘布局图并确认了这一点。 我还注意到我的Windows,或Super Key, Right CTRLRight ALT都被映射到Left Shift

他们都工作得很完美,他们只是被发现错了。 我选择了美国的布局,这是我的键盘应该是在Windows中。 有人可以帮忙吗? 我的键盘被检测为SONiX USB键盘(实际的键盘品牌是Avazz)。

  • 我的xev -event keyboard输出是每一个:

     KeyRelease event, serial 28, synthetic NO, window 0x4a00001, root 0xdc, subw 0x0, time 2446369, (730,547), root:(795,599), state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False 

    唯一改变的是时间。

  • sudo evtest命令显示所有修饰键

     type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1v type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 0 
  • 对于lsusb ,它使用的驱动程序是usbhid驱动程序。

    lsusb显示出令人困惑的东西; 与其他命令中显示的键盘相同的端口在lsusb显示为我的无线鼠标驱动程序, Logitech, Inc. Unifying Receiver 。 这可能是问题所在,但我可能只是错误地认为它在哪个端口上。 因此,我不确定什么驱动器是什么。 我要张贴所有这些,虽然这可能很烦人。 我有一个单独的键盘插在我的主要一侧,顺便使用CTRLSuperALT ,所以不要被罗技经典键盘驱动程序混淆。

     Bus 001 Device 009: ID 0bda:8172 Realtek Semiconductor Corp. RTL8191SU 802.11n WLAN Adapter Bus 001 Device 008: ID 046d:c315 Logitech, Inc. Classic Keyboard 200 Bus 001 Device 007: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB Bus 001 Device 006: ID 0480:0200 Toshiba America Info. Systems, Inc. Bus 001 Device 004: ID 0c45:6340 Microdia Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 004: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller Bus 002 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver Bus 002 Device 002: ID 0c45:7603 Microdia Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 

    对于lsusb -t ,正在使用的驱动程序是usbhid

  • for i in $(ls /sys/module/usbhid/parameters/); do echo -ne "$i\t"; more /sys/module/usbhid/parameters/$i; done for i in $(ls /sys/module/usbhid/parameters/); do echo -ne "$i\t"; more /sys/module/usbhid/parameters/$i; done是:

     ignoreled 0 mousepoll 0 quirks (null),(null),(null),(null) 
  • 我不认为你需要这个,因为我说它是usbhid ,但无论如何都是这样。

    for i in $(ls /sys/module/hid/parameters/); do echo -ne "$i\t"; more /sys/module/hid/parameters/$i; done for i in $(ls /sys/module/hid/parameters/); do echo -ne "$i\t"; more /sys/module/hid/parameters/$i; done输出。

    debug 0 ignore_special_drivers 0

  • modinfo usbhid的输出是:

     filename: /lib/modules/3.18.3-031803-generic/kernel/drivers/hid/usbhid/usbhid.ko license: GPL description: USB HID core driver author: Jiri Kosina author: Vojtech Pavlik author: Andreas Gal srcversion: A395FA22EA2729BAC1557C9 alias: usb:v*p*d*dc*dsc*dp*ic03isc*ip*in* depends: hid intree: Y vermagic: 3.18.3-031803-generic SMP mod_unload modversions signer: Magrathea: Glacier signing key sig_key: 29:DB:FD:FC:5A:CC:82:3C:C5:2C:39:4C:C1:C7:4C:01:C3:BE:BF:78 sig_hashalgo: sha512 parm: mousepoll:Polling interval of mice (uint) parm: ignoreled:Autosuspend with active leds (uint) parm: quirks:Add/modify USB HID quirks by specifying quirks=vendorID:productID:quirks where vendorID, productID, and quirks are all in 0x-prefixed hex (array of charp) 
  • cat /sys/kernel/debug/usb/usbmon/2u > /tmp/usb.mon.out告诉我找不到,即使我将2更改为我的总线ID。 我在这做错了什么? 澄清你是否可以取悦,有点困惑。 我试着把202002sudo ls /sys/kernel/debug/usb/usbmon/0s 0u 1s 1t 1u 2s 2t 2u

我的键盘是Perixx P1800。 它作为相同的lsusb标识(0c45:7603 Microdia)显然,它使用与azio L70键盘相同的板。

键盘的linux驱动程序是手工制作的,可在此地址获得 。

在Debian上,它对我来说非常好(在update-initramfs ),除了接近Enter的单个键(*在Azerty键盘中,键盘的*工作正常)。

我也有这个问题。 我忍受了几个月,但后来我试图找到解决它的方法。

这是司机; 虽然我的键盘不是那个品牌,但它的效果非常好。 我希望它也能解决你的问题。 驱动程序和说明在这里:

https://bitbucket.org/Swoogan/aziokbd

PD:我没有写驱动程序,我刚发现它。

– 在#GrammarNazy xD的建议之后编辑