我如何找出哪個程序“擁有”熱鍵?
我在帶有 4.2.0 核心的 Gentoo 之上執行 XFCE 4.12。我鍵盤上的 PlayPause 按鈕曾經用作 VLC 的全域熱鍵。現在 VLC 甚至無法辨識密鑰。它確實看到“Alt + Media Play Pause”,但不是單獨的鍵。
有沒有辦法查看是否以及哪些程序可能正在擷取該密鑰?
當我執行文件
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
要找出哪個應用程序/程序獲取了您的密鑰,請使用 debug keysym
XF86LogGrabInfo
。用於xdotool
同時按 + 鍵XF86LogGrabInfo
,例如在終端執行中KEY=XF86AudioPlay xdotool keydown ${KEY}; xdotool key XF86LogGrabInfo; xdotool keyup ${KEY}
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”。LinuxQuestions wiki 也有一個可以使用的 X Keysyms 列表。為了使事情更容易xdotool
一些,其中一些也有別名,例如按下 Shift-Alt-Tab 將只是shift+alt+Tab
. 要驗證這確實確實點擊了該組合鍵,您可以將輸入發送到xev
,這是一個程序,它將列印到控制台的任何鍵或滑鼠事件。只需在兩秒鐘過去之前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