我在 Ubuntu-GNOME 16.04 上安装了 i3 窗口管理器和 GNOME 桌面。我无法使用 Logitech G610 键盘来操作媒体键。
我的文件中有以下内容~/.config/i3/config
:
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle
并确认这些命令在终端中有效。我看到的问题是XF86AudioRaiseVolume
未注册等按键事件。
如果我尝试xev -event keyboard
查看键码,当我按下多媒体键时,我得到的只是以下内容:
MappingNotify event, serial 30, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 248
KeymapNotify event, serial 31, synthetic NO, window 0x0,
keys: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
并且没有像其他键一样报告键码。但是,使用sudo showkey -k
,我得到了以下预期值:
keycode 113 press
keycode 113 release
keycode 115 press
keycode 115 release
keycode 114 press
keycode 114 release
运行时xinput
,我看到以下内容
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech MX Master id=12 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=15 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=16 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Logitech Gaming Keyboard G610 id=10 [slave keyboard (3)]
↳ Logitech Gaming Keyboard G610 id=11 [slave keyboard (3)]
↳ Dell WMI hotkeys id=13 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
↳ DELL Wireless hotkeys id=17 [slave keyboard (3)]
其中 Logitech 键盘显示为两个设备。运行后xinput list-props 10
,xinput list-props 11
我看到第一个列表映射到/dev/input/event8
,而第二个列表映射到/dev/input/event9
。
如果我运行,xinput test 10
我会看到我的键盘的第一个列表响应所有普通键盘键但不响应媒体键,而xinput test 11
仅响应媒体键:
key press 121
key release 121
key press 123
key release 123
key press 122
key release 122
(这些值与输出相差 8 showkey
,但显然这是预料之中的。此外,这些值与 的映射输出相匹配xmodmap -pke
,即keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
)。运行sudo evtest /dev/input/event8
和sudo evtest /dev/input/event9
产生类似的结果。
因此,我对按键和处理之间的过程的理解相当模糊,但似乎可能是因为普通键和媒体键位于不同的输入设备上,导致媒体按键事件无法进入 X 会话(如未显示 ? 所示xev
),因此无法进入 i3?这在 GNOME 桌面上运行良好,那么我需要配置什么才能让它们在 i3 上运行?我不知道该如何继续,任何帮助都将不胜感激。
编辑
我最初在文件中的命令周围加了引号~/.config/i3/config
,但这样不起作用。我已对上述内容进行了编辑以使其正确,但这不是问题的根源。
答案1
答案2
部分答案:
键盘显示为两个设备不是问题。两个设备都分配给了虚拟核心键盘,因此两个设备都应该产生正确的按键核心事件。
该MappingNotify
事件可能表明某个应用程序正在对媒体键做出反应。具体来说,如果您收到FocusOut
未FocusIn
向我们显示的事件,则肯定有其他应用程序正在对这些事件做出反应。
现在这可能是具有您配置的键的 i3 窗口管理器,也可能是其他东西。因此,首先要测试的是删除或注释掉您的 i3 绑定,然后再次测试,看看您是否仍会收到 Mapping/Focus 事件。
如果是,下一步是找出哪个应用程序正在窃取数据。使用ps
等xlsclients
来缩小范围。一种方法是终止/禁用应用程序,直到它们不再被窃取。