UbuntuのGNOMEデスクトップと一緒にi3ウィンドウマネージャーをインストールしました-GNOME16.04。ロジクール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キーボードは2つのデバイスとして表示されます。 xinput list-props 10
とxinput list-props 11
を実行すると、最初のリストは/dev/input/event8
にマップされ、2番目のリストは/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
(これらはshowkey
出力から8ずれていますが、明らかにそれは予想されます。また、これらの値は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
ファイルのコマンドを引用符で囲んでいましたが、それは機能しません。私はそれを正しくするために上で編集しました、しかしそれは問題の根本ではありませんでした。
前の回答 で提供された情報に基づいて、ps
を実行し、起動後にGNOMEデスクトップにログインせず、i3にのみログインしたにもかかわらず、gnome-session
が実行されていることに気付きました。私の疑いは、gnomeセッションがイベントを盗んでいたということでしたが、gnome設定でそれらのキーボードショートカットのマッピングを解除しても何も変わらなかったようです。
私の解決策は、指示に従ってttyセッションを直接起動することでした ここ 、gnome-session
が開始しないようにします。単一行~/.xinitrc
を含むファイルexec i3
を作成し、起動後にttyターミナルにログインし、startx
を実行してi3を起動します。この方法では、gnomeが実行されておらず、メディアキーが機能するようになりました。
部分的な答え:
キーボードが2つのデバイスとして表示されることは問題ではありません。両方のデバイスが仮想コアキーボードに割り当てられているため、両方のデバイスが適切なキーコアイベントを生成する必要があります。
MappingNotify
イベントは、一部のアプリケーションがメディアキーに反応していることを示している可能性があります。特に、表示しなかったFocusOut
およびFocusIn
イベントが発生した場合は、他のアプリケーションが確実にそれらに作用しています。
これは、構成済みのキーを持つi3ウィンドウマネージャーである場合もあれば、別のものである場合もあります。したがって、最初にテストすることは、i3バインディングを削除またはコメントアウトし、再度テストして、Mapping/Focusイベントがまだ発生するかどうかを確認することです。
はいの場合、次のステップは、どのアプリケーションがそれを盗んでいるかを把握することです。 ps
、xlsclients
などを使用して絞り込みます。 1つの方法は、アプリケーションが盗まれなくなるまで、アプリケーションを強制終了/無効にすることです。