私はカーネル4.2.0がインストールされているGentooでXFCE 4.12を実行しています。私のキーボードのPlayPauseボタンはVLCのグローバルショートカットとして機能しました。今、VLCはキーも認識しません。 「Alt+メディア再生の一時停止」は表示されますが、個別のキーは表示されません。
どのプログラムがそのキーをキャプチャしたかを確認する方法はありますか?
xdotool key "XF86LogGrabInfo"
ファイルを実行するとtail /var/log/Xorg.0.log
読みます。
[ 10138.690] (II) Printing all currently active device grabs:
[ 10138.690] (II) End list of active device grabs
答え1
どのアプリケーション/プログラムがキーを取得したかを確認するには、デバッグキーシンボルを使用します。XF86LogGrabInfo
。xdotool
端末で実行するときなど、+キーを同時に押すために使用されます。XF86LogGrabInfo
KEY=XF86AudioPlay
xdotool keydown ${KEY}; xdotool key XF86LogGrabInfo; xdotool keyup ${KEY}
次に、with と this は記録されなくなりますが、代わりに記録されることtail /var/log/Xorg.0.log
を使用して出力を確認します。gnome 3/gdm
systemd
Xorg.0.log
雑誌)。この場合は実行できます
journalctl -f
その後、他の端末でコマンドを実行してくださいxdotool
。最初の端末に切り替えると、次の内容が表示されます。
/usr/lib/gdm/gdm-x-session[629]: Active grab 0x40c0a58e (xi2) on device 'Virtual core keyboard' (3):
/usr/lib/gdm/gdm-x-session[629]: client pid 708 /usr/bin/gnome-shell
/usr/lib/gdm/gdm-x-session[629]: at 32595124 (from passive grab) (device frozen, state 6)
/usr/lib/gdm/gdm-x-session[629]: xi2 event mask for device 3: 0xc000
/usr/lib/gdm/gdm-x-session[629]: passive grab type 2, detail 0xac, activating key 172
上記の例では、キーを取得するプログラム(クライアント)はですgnome-shell
。
このキーの名前はどのようにわかりますか?
または、xdotool
使用に関するマンページを確認してください。man xdotool
オンライン版、多くの特殊キーがリストされているからです。たとえば、「alt+r」、「Control_L+J」、「ctrl+alt+n」、「BackSpace」などです。 Linux質問WikiにもありますXキーシンボルリスト1つを使用できます。作業を容易にするために、xdotool
一部にはShift-Alt-Tabなどのエイリアスもありますshift+alt+Tab
。これが実際にキーの組み合わせをクリックしたことを確認するために入力を送信することができ、xev
プログラムはコンソールに渡されるすべてのキーまたはマウスイベントを印刷します。 2秒が経過する前にsleep 2; xdotool keydown ${KEY}
そのウィンドウに切り替えると、xev
そのウィンドウでクリックされたキーが表示されます。次に、次の一連のイベントを出力する必要があります。
PropertyNotify event, serial 168, synthetic NO, window 0x1e00001,
atom 0x13e (_GTK_EDGE_CONSTRAINTS), time 4390512, state PropertyNewValue
MappingNotify event, serial 168, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 248
KeyPress event, serial 168, synthetic NO, window 0x1e00001,
root 0x163, subw 0x0, time 4390719, (882,657), root:(1000,771),
state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 169, synthetic NO, window 0x1e00001,
root 0x163, subw 0x0, time 4390738, (882,657), root:(1000,771),
state 0x8, keycode 23 (keysym 0xff09, Tab), same_screen YES,
XLookupString gives 1 bytes: (09) " "
XmbLookupString gives 1 bytes: (09) " "
XFilterEvent returns: False
答え2
次のコマンドは、キーボードショートカットを使用するすべてのプログラムを識別するのに役立ちました。
$ lsof -c Xorg | grep ".log" # find out the path for the Xorg log file
Xorg 16025 sr 4w REG 254,1 225839 3933229 /home/sr/.local/share/xorg/Xorg.0.log
$ xdotool key XF86LogGrabInfo # prints all Xorg registered grabs
$ cat /home/sr/.local/share/xorg/Xorg.0.log | grep grabs
[ 39303.019] (II) Printing all currently active device grabs:
[ 39303.019] (II) End list of active device grabs
[ 39303.019] Printing all currently registered grabs
[ 39303.019] Printing all registered grabs of client pid 16024 xinit /home/sr/.xinitrc -- /etc/X11/xinit/xserverrc :0 vt1 -keeptty -auth /tmp/serverauth.6AO52I3zhe
[ 39303.019] Printing all registered grabs of client pid 16045 unclutter
[ 39303.019] Printing all registered grabs of client pid 16047 xscreensaver
[ 39303.019] Printing all registered grabs of client pid 16109 /usr/lib/firefox/firefox
[ 39303.019] Printing all registered grabs of client pid 16055 xscreensaver-systemd
[ 39303.019] Printing all registered grabs of client pid 16057 xbindkeys
[ 39303.027] Printing all registered grabs of client pid 16039 /usr/bin/openbox --startup /usr/lib/openbox/openbox-autostart OPENBOX
[ 39303.039] Printing all registered grabs of client pid 16048 copyq
[ 39303.039] Printing all registered grabs of client pid 16049 konsole
[ 39303.039] Printing all registered grabs of client pid 16095 /usr/bin/copyq --clipboard-access monitorClipboard
[ 39303.039] Printing all registered grabs of client pid 16109 /usr/lib/firefox/firefox
[ 39303.039] Printing all registered grabs of client pid 16456 subl --detached
[ 39303.039] Printing all registered grabs of client pid 16465 /usr/lib/at-spi2-registryd --use-gnome-session
[ 39303.039] Printing all registered grabs of client pid 17178 xdotool key XF86LogGrabInfo
[ 39303.039] End list of registered passive grabs
だから私の場合、次のアプリケーションにキーバインディングが適用されます:xinit、unclutter、xscreensaver、firefox、xbindkeys、openbox、copyq、konsole、subl、at-spi2-registryd