~/.Xmodmap
我根据这个答案创建了以下文件。
keysym Delete = Menu
keysym Menu = Delete
clear Lock
keycode 0x42 = Escape
换句话说,交换Delete
and Menu
,然后再做Caps Lock
一个Escape
.
下次我登录时,Ubuntu 询问我是否要按~/.Xmodmap
预期加载。我加载了它,但没有发生任何事情(当时或随后的登录)。如果我手动运行xmodmap ~/.Xmodmap
,它会按预期工作。
我知道这在 10.10 测试版早期就有效,但在我全新的 10.10 安装中失败了。我没有尝试过早于 10.10 的任何东西。有任何想法吗?
编辑:我放入了一些调试语句/etc/gdm/Xsession
以确保~/.Xmodmap
正在加载,并且一切都神奇地开始工作。除了添加一些回声外,我没有进行任何更改,现在我恢复了更改并再次重新启动,它仍然可以正常工作。我见过的最奇怪的事情。
我意识到的一件事是 Xmodmap 的“重新映射 Caps Lock 到 Escape”部分一直在工作。只是删除/菜单交换失败了。我将暂时保留这个问题,以防其他人有同样的问题,因为我实际上不知道为什么问题停止了。
我知道这很愚蠢,但作为一种解决方法,您可以只使用 autostart
xmodmap ~/.Xmodmap
。您也可以检查
/etc/gdm/Xsession
该行usermodmap="$HOME/.Xmodmap"
,如果不存在,只需将其附加到文件末尾即可。如果您是系统的唯一用户,只需将您的更改放入/etc/X11/Xmodmap
.派对迟到了,但这也让我发疯了;而且,像我一样固执,放弃不是一种选择。
基本上这就是我尝试过的,(作为我的用户,或者必要时为 root)
(其实添加
xmodmap
命令是可以的~/.bashrc
,但是每次登录后都需要启动一个终端)几年前(?),
xkb
被选择处理键映射和配置(与 X 接口),但在 X 会话初始化期间完成它的工作xmodmap
之后,也可能请求对 X 进行键相关更改。xkb
问题是这些 xmodmap 设置应该在什么时候发生?
似乎上述文件在此过程中处理得太早了,或者 X 还没有准备好接受 xmodmap 更改,或者 xkb 会覆盖它们。
注意:我为这些文件添加了一些“跟踪”,以确保它们在某个时间实际运行!
一个似乎有效的解决方案
我最初并不热衷于添加
.desktop
文件(一个简单的单行脚本就足够了),但它有效,所以就在这里。解决方案来自How to remap or swap special keyboard keys in Linux? “解决方案 1”
基本上创建
~/.config/autostart/my-xmodmap.desktop
文件,并将其放入:替换
me
为您的用户名(请注意,我没有费心尝试,~/
或者$HOME
它可能同样适用于/home/me
,并且可能不需要 xmodmap 的完整路径......),并添加 exec 位在这种情况下,xmodmap 命令必须在一个
~/.Xmodmap
文件中(或使用该-e
选项,或选择另一个文件名!)。注销并重新登录。请注意,您可以从“启动应用程序”创建启动程序。
另一种解决方案是忘记 xmodmap 并学习如何配置
xkb
!编辑(再次)
有时,可能有 25% 的登录,
xmodmap
但似乎仍然无法正常工作 - 而命令实际上正在运行(跟踪器证明了这一点)。我此时可能得出的唯一结论是,该xkb
进程确实在登录过程中运行较晚,并且可能在xmodmap
运行后结束。看起来像一个竞争条件......所以,最后,我将自动启动桌面文件exec
行更改为(注意
&
)mystart
是我创建的新目录中的一个脚本bin
,其中包含和
该脚本在运行 xmodmap 之前休眠 5 秒,并跟踪它何时运行(在文件中
/tmp/xmodmap-has-run
)。希望这就是全部!
这可能是一个更好的答案:http ://cweiske.de/howto/xmodmap/ar01s06.html
您可能需要稍微调整一下才能为您工作,但说明都在那里。
也许您的
~/.Xmodmap
文件中有语法错误?尝试运行:
如果有任何错误,那应该会引发错误。
不幸的是,这看起来是一个(非常)长期存在的问题,这只是因为在 Gnome 3.6 之后,
xmodmap
支持被放弃了。这在使用 xmodmap 重新映射 GNOME3.8 上的键中进行了讨论?和错误 873656 - Gnome 3.x 未加载 .Xmodmap 文件。
解决方案是移至
xkb
. 第二个链接中的评论 29提供了一些帮助。我遇到了同样奇怪的问题,尝试在登录会话时启动
xmodmap
我的会话(Ubuntu 13.04)。我终于使它与.xinitrc
我放置命令的主文件夹中的一个文件一起工作,但它具有绝对路径,即:/usr/bin/xmodmap /home/MYNAME/.Xmodmap
然后我必须重新启动(不仅仅是重新登录)才能执行它。