我使用的是 Fedora 25 Gnome。我有一个罗技 K350 无线键盘。当我使用 Xubuntu 和 Manjaro 时,我可以轻松映射所有键。
现在,在 Fedora 上,某些键无法使用 Fedora 的键盘快捷键应用程序进行映射,并且当我尝试映射某些键时,某些键会执行它们的命令。例如,我的键盘上有一个额外的关闭按钮。在 Fedora 上,它使笔记本电脑休眠,我找不到它来删除它,如果我尝试添加快捷方式,如果我按下它,电脑就会休眠,而不是向我显示按钮的代码。
另外,键盘应用程序很滞后。我想知道是否可以用 XFCE 的键盘应用程序替换它
我想将所有大灰色按钮映射到顶部和左侧。但最重要的是右上角的灰色小按钮,它应该是关机按钮。
答案1
很长一段时间没有使用 Fedora 或 Gnome(或 XFCE)来实现此目的。但是将按键重新映射到功能发生在多个层上,并且在 WM 层上执行此操作在我看来很麻烦。按键/代码来自内核(来自硬件中的 IRQ 等)到 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
以及其他文件是另一个问题。 WM 对于运行哪些文件特别不标准化。不过,您始终可以手动运行它。~/.xinitrc
~/.profile
该.Xmodmap
文件每行包含一个映射,因此可用于重新映射多个键。该!
标记是该文件中的注释指示符。
这是如何运作的?
首先,让我们理解为什么我需要编写Up NoSymbol Up
而不是简单地编写Up
。实际上我不需要,但通常为一个键提供至少三个(有时是四个)映射。映射意味着当键为以下情况时要采取的操作:
= <key pressed> <shift+key> <ctrl+key> <ctrl+shift+key>
(请注意,Ctrl+Up
在某些应用程序中效果不佳,这使得这个示例不太好。)
好的,我们重新映射了一个键。但如何找到正确的操作来重新映射按键。箭头很简单:上、下、左、右;字母也可以通过添加字母作为参数来简单地重新映射。但是XF86AudioMedia
我们之前的那个东西呢?或者如何让一个按键成为睡眠或电源按钮?
要获取当前的映射,请执行以下操作:
xmodmap -pke
它打印一个很长的列表,包括几个XF86
修饰符(例如,,,XF86Sleep
)。这些可以添加到任何键,就像我们使用上面的向上箭头所做的那样。完整列表可以在 Xorg 中找到XF86PowerOff
XF86WebCam
源代码。
不幸的是,就像源代码中的评论所述:
X.Org 不会添加到 XF86 键符号集中,尽管它们已被采用并被视为 X 键符号定义的“标准”部分。 XFree86 从未正确注释过这些键符号,因此我们已尽力解释这些键的语义。
XFree86 已经删除了该时期的邮件档案,这可能会让人们对其中一些定义有更多的了解。直到/除非我们复活这些档案,这些档案都来自记忆和使用。
可能很难找到每一个的确切目的。而且,由于缺乏明确定义的标准,WM 只实现了其中的一些映射。并且不同的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
,您可能会无意中强制硬重启。
答案2
Fedora 支持切换桌面环境,如果你想安装整个xfce桌面:
yum groupinstall 'Xfce Desktop'
在登录屏幕上,您将能够选择 xfce 桌面。
如果您想坚持使用 Gnome,您可以安装 xfce 的部分内容。尝试:
yum search xfce
查找任何看起来与键盘相关的 xfce 实用程序并安装它们。