Fedora gnome 鍵盤應用程序的替代方案
我在 Fedora 25 Gnome 上。我有一個羅技 K350 無線鍵盤。當我在 Xubuntu 和 Manjaro 上時,我可以輕鬆地映射所有鍵。
現在在 Fedora 上,一些鍵無法使用 Fedora 的鍵盤快捷鍵應用程序進行映射,並且當我嘗試映射它們時,一些鍵會執行它們的命令。例如,我的鍵盤上有一個額外的關閉按鈕。在 Fedora 上,它使筆記型電腦進入睡眠狀態,我找不到它來刪除它,如果我嘗試添加快捷方式,如果我按下它,電腦會進入睡眠狀態,而不是向我顯示按鈕的程式碼。
加上鍵盤應用程序滯後。我想知道是否可以用 XFCE 的鍵盤應用程序替換它
我想在頂部和左側映射所有灰色大按鈕。但最重要的是右上角的灰色小按鈕,應該是關機按鈕。
很長時間沒有為此目的使用 Fedora 或 Gnome(或 XFCE)。但是重新映射函式的鍵發生在幾個層上,在我的拙見中,在 WM 層上做這件事很麻煩。擊鍵/程式碼來自核心(來自硬體中的 IRQ 等)到 Xorg,Xorg 將它們全部編號並傳遞回應用程序(是否將它們全部傳遞給應用程序是另一回事)。
Xorg 傳遞密鑰程式碼的應用程序包括 WM(XFCE 或 Gnome 甚至 KDE),以及由這些應用程序打開的視窗。像鍵盤映射桌面應用程序這樣的工具所做的是,它們點擊 Xorg 的鍵碼配置。通過創建新鍵盤 (
setxkbmap
) 修改鍵 (xmodmap
) 或什至在將程式碼重新發送到視窗 (IME) 之前在記憶體中重新映射。如果我們自己使用 Xorg 鍵碼,我們可以為任何系統(即執行 Xorg)配置鍵盤。我將使用自己的鍵盤:
大綱顯示了一個我將用作範例的鍵,即帶有音符的鍵。我們將使該鍵作為向上箭頭工作。
首先讓我們看看 Xorg 是如何看待我的鍵盤的:
$ xinput ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Logitech USB Optical Mouse id=10 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [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)] ↳ USB 2.0 Camera id=11 [slave keyboard (3)] ↳ Asus Laptop extra buttons id=12 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
好吧,我猜我的鍵(音符)在“華碩筆記型電腦額外按鈕”中。這意味著它在虛擬鍵盤下。很好,這意味著我可以通過
xev
以下方式找到它的鍵碼:xev -event keyboard
如果它不是虛擬鍵盤的一部分,我將需要遍歷所有事件(包括滑鼠事件),這將使其難以找到,不是不可能,而是很難。然後我在執行時按下我的音符鍵,
xev
發現 Xorg 對它的理解如下:KeyPress event, serial 28, synthetic NO, window 0x1a00001, root 0x496, subw 0x0, time 32080036, (381,333), root:(382,352), state 0x0, keycode 234 (keysym 0x1008ff32, XF86AudioMedia), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False
很好,這意味著它是鍵碼 234。這也表明它映射到
XF86AudioMedia
在我的 WM 上什麼都不做(xmonad,因為它忽略了很多 XF86 標準)。但無論如何,我們有一把重新映射的鑰匙。為了做到這一點,我們這樣做:xmodmap -e 'keycode 234 = Up NoSymbol Up'
我的音符鍵用作向上箭頭。此外,這是獨立於 WM 的。要使其在重新啟動時工作,您需要將
xmodmap
表達式放入~/.Xmodmap
文件中:keycode 234 = Up NoSymbol Up
並執行
xmodmap ~/.Xmodmap
在 WM 初始化期間。在 XFCE 初始化期間執行哪些文件
~/.xprofile
,~/.xinitrc
,~/.profile
, 是另一個問題。WM 在執行哪些文件方面特別不標準化。不過,您始終可以手動執行它。該
.Xmodmap
文件每行包含一個映射,因此可用於重新映射多個鍵。!
標記是該文件中的註釋指示符。這是如何運作的?
首先,讓我們了解為什麼我需要編寫
Up NoSymbol Up
而不是簡單地編寫Up
. 實際上我不需要,但通常為一個鍵提供至少三個(有時是四個)映射。映射意味著當鍵是時要採取的行動:= <key pressed> <shift+key> <ctrl+key> <ctrl+shift+key>
(請注意,
Ctrl+Up
這在某些應用程序中效果不佳,這使得這個例子不是那麼好。)好的,所以我們重新映射了一個鍵。但是如何找到正確的操作來重新映射鍵。箭頭很簡單:上、下、左、右;字母也可以通過添加字母作為參數來簡單地重新映射。
XF86AudioMedia
但是我們之前的那個東西呢?或者如何使按鍵成為睡眠或電源按鈕?要獲取您目前的映射,您可以:
xmodmap -pke
它列印一個很長的列表,包括幾個
XF86
修飾符(例如XF86Sleep
,XF86PowerOff
,XF86WebCam
)。就像我們使用上面的向上箭頭一樣,這些可以添加到任何鍵。完整列表可以在 Xorg原始碼中找到。不幸的是,就像源中的評論一樣:
X.Org 不會添加到 XF86 鍵符集,儘管它們已被採用並被視為 X 鍵符定義的“標準”部分。XFree86 從未正確註釋過這些鍵符,因此我們已盡力解釋這些鍵的語義含義。
XFree86 已經刪除了他們那個時期的郵件檔案,這可能更清楚地說明了其中的一些定義。直到/除非我們復活這些檔案,這些檔案來自記憶和使用。
可能很難找到其中每一個的確切目的。而且,由於缺乏明確定義的標準,WM 只實現了其中的一些映射。並且不同的WM實現不同的映射。此外,一些 WM 具有這些映射功能的配置工具,而另一些則沒有。一些 WM 幾乎忽略了所有這些映射。
測試您的 WM 是否支持特定映射的一種方法是嘗試一下。例如,我將
XF86XK_ToDoList
首先嘗試從定義中刪除XK
並重新映射未使用的鍵碼:xmodmap -e 'keycode 248 = XF86_ToDoList'
並
xdotool
用來組成這樣一個鍵碼的按鍵:xdotool keydown 248 xdotool keyup 248
我的 WM 肯定不支持
XF86_ToDoList
,因為什麼都沒發生(實際上我認為沒有任何 WM 支持那個)。然後,您可以搜尋密鑰所需的功能,並在找到該功能後重新映射它們。當然,鑑於 XFCE 支持它。
警告
如果您在不同語言之間更改鍵盤,使用或在後台
setxkbmap
呼叫的工具,映射將被撤消。setxkbmap
IME 很好,因為它們獨立於 Xorg 執行。登錄時映射工作。您可以創建一個“開機”鍵
測試類似的東西時要小心
XF86PowerOff
,您可能會無意中強制硬重啟。