我~/.Xmodmap根据这个答案创建了以下文件。
keysym Delete = Menu
keysym Menu = Delete
clear Lock
keycode 0x42 = Escape
Run Code Online (Sandbox Code Playgroud)
换句话说,交换Delete和Menu,并制作Caps Lock一个额外的Escape。
下次登录时,Ubuntu 会问我是否要按~/.Xmodmap预期加载。我加载了它,但没有发生任何事情(无论是当时还是随后的登录)。如果我手动运行xmodmap ~/.Xmodmap,它会按预期工作。
我知道这在 10.10 测试版早期有效,但在我全新的 10.10 安装中失败。我没有尝试过 10.10 之前的任何东西。有任何想法吗?
编辑:我放入了一些调试语句/etc/gdm/Xsession以确保~/.Xmodmap正在加载,并且一切都神奇地开始工作。除了添加一些回声之外,我没有改变任何东西,现在我恢复了我的更改并再次重新启动它仍然有效。我见过的最奇怪的事情。
我意识到的一件事是 Xmodmap 的“重新映射 Caps Lock 以转义”部分始终有效。只是删除/菜单交换失败了。我会暂时保留这个问题,以防其他人遇到同样的问题,因为我实际上不知道问题为什么会停止。
tur*_*rbo 12
我知道这很愚蠢,但作为一种解决方法,您可以只使用 autostart xmodmap ~/.Xmodmap。
您也可以检查/etc/gdm/Xsession该行usermodmap="$HOME/.Xmodmap",如果不存在,则将其附加到文件末尾。如果您是系统的唯一用户,只需将您的更改放入/etc/X11/Xmodmap.
聚会迟到了,但这也让我发疯了;而且,像我一样固执,放弃不是一种选择。
基本上这就是我尝试过的,(作为我的用户,或者如果需要的话)
(实际上,添加xmodmap命令就可以了~/.bashrc,但是每次登录后都需要启动一个终端)
几年前(?),xkb被选中处理密钥映射和配置(与 X 接口),但在 X 会话初始化期间完成其工作xmodmap后,xkb也可能请求对 X 进行密钥相关更改。
问题是这些 xmodmap 设置应该什么时候发生?
这似乎与上述文件的过程中过早地进行处理,并且X还没有准备好接受xmodmap的变化,或将XKB覆盖它们。
注意:我向这些文件添加了一些“跟踪”以确保它们在某个时间确实在运行!
一个似乎有效的解决方案
我最初并不热衷于添加.desktop文件(一个简单的单行脚本就足够了),但是确实有效,所以就在这里。
解决方案来自如何在 Linux 中重新映射或交换特殊键盘键?“解决方案1”
基本上创建~/.config/autostart/my-xmodmap.desktop文件,并放入其中:
[Desktop Entry]
Name=MyXmodmap
Exec=/usr/bin/xmodmap /home/me/.Xmodmap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
Run Code Online (Sandbox Code Playgroud)
替换me为您的用户名(请注意,我没有费心去尝试,~/或者$HOME它可以同样有效地代替/home/me,并且可能不需要 xmodmap 的完整路径...),并添加 exec 位
chmod +x ~/.config/autostart/my-xmodmap.desktop
Run Code Online (Sandbox Code Playgroud)
~/.Xmodmap在这种情况下,xmodmap 命令必须在一个文件中(或使用该-e选项,或选择另一个文件名!)。注销并重新登录。
请注意,您可以从“启动应用程序”创建启动程序。
另一种解决方案是忘记 xmodmap 并学习如何配置xkb!
编辑(再次)
有时,可能有 25% 的登录,xmodmap似乎仍然不起作用 - 而命令实际运行时(跟踪器证明了这一点)。我此时可能得出的唯一结论是该xkb进程在登录过程中运行较晚,并且可能在xmodmap运行后结束。看起来像一个竞争条件......所以,最后,我将自动启动桌面文件exec行更改为
Exec=$HOME/bin/mystart &
Run Code Online (Sandbox Code Playgroud)
(注意&)
mystart是bin我创建的新目录中的一个脚本,其中包含
#!/bin/bash
sleep 5
/usr/bin/xmodmap /home/me/.Xmodmap &
date >> /tmp/xmodmap-has-run
Run Code Online (Sandbox Code Playgroud)
和
chmod u+x ~/bin/mystart
Run Code Online (Sandbox Code Playgroud)
该脚本在运行 xmodmap 前休眠 5 秒,并跟踪它何时运行(在文件中/tmp/xmodmap-has-run)。
希望这就是全部!