为什么登录时我的〜/ .Xmodmap文件不会加载?

我根据这个答案创建了以下~/.Xmodmap文件。

 keysym Delete = Menu keysym Menu = Delete clear Lock keycode 0x42 = Escape 

换句话说,交换DeleteMenu ,并使Caps Lock成为额外的Escape

我下次登录时,Ubuntu问我是否~/.Xmodmap预期加载~/.Xmodmap 。 我加载了它,但没有任何反应(当时或后续登录)。 如果我手动运行xmodmap ~/.Xmodmap ,它按预期工作。

我知道这在10.10测试版的早期有效,但是在我的10.10安装上失败了。 我没有尝试过10.10之前的任何事情。 有任何想法吗?

编辑:我在/etc/gdm/Xsession放了一些调试语句,以确保~/.Xmodmap正在加载,一切都神奇地开始工作。 我没有更改任何东西,除了添加一些回声,它现在仍在工作,我恢复我的更改并重新启动。 我见过的最奇怪的事情。

我意识到的一件事是Xmodmap的“重新映射Caps Lock to Escape”部分始终有效。 只是删除/菜单交换失败了。 我现在打开这个问题以防其他人有同样的问题,因为我实际上不知道为什么问题会停止。

我知道这很愚蠢,但作为一种解决方法,你可以自动启动xmodmap ~/.Xmodmap

你也可以检查/etc/gdm/Xsessionusermodmap="$HOME/.Xmodmap" ,如果它不存在,只需将它附加在文件的末尾。 如果您是系统的唯一用户,只需将更改放入/etc/X11/Xmodmap

这可能是一个更好的答案: http : //cweiske.de/howto/xmodmap/ar01s06.html

您可能需要稍微调整一下才能为您工作,但说明就在那里。

也许你的~/.Xmodmap文件中有语法错误?

试试跑步:

 $ xmodmap ~/.Xmodmap 

如果有的话,应该发出错误。

晚到了派对,但这也让我疯了; 而且,我很顽固,放弃不是一种选择。

基本上这就是我尝试过的(作为我的用户,或者必要的根)

  • 〜/ .Xmodmap only
  • 〜/ .xsession,〜/ .xsessionrc
  • 〜/ .gnomerc
  • 〜/ .xprofile
  • 的〜/ .xinitrc
  • /etc/X11/Xsession.d/myscript
  • /usr/share/X11/xorg.conf.d/( 配置文件,没碰到它

(实际上,将xmodmap命令添加到~/.bashrc有效,但每次登录后都需要启动一个终端)

几年前(?),选择xkb来处理密钥映射和配置(与X连接),但xmodmap也可能在xkb在X会话初始化期间完成其工作后请求对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 

me的用户名替换me (请注意,我没有费心去尝试~/$HOME ,这可能同样适用于/home/me ,并且xmodmap的完整路径可能不是必需的……),并添加exec位

 chmod +x ~/.config/autostart/my-xmodmap.desktop 

在这种情况下,xmodmap命令必须位于~/.Xmodmap文件中(或使用-e选项,或选择其他文件名!)。 退出并重新登录。

请注意,您可以从“启动应用程序”创建启动程序。

另一种解决方案是忘记xmodmap并学习如何配置xkb

编辑 (再次)

有时,可能有25%的登录, xmodmap似乎仍无法正常工作 – 而命令实际上是运行的(跟踪器certificate了这一点)。 我此时可能得出的唯一结论是xkb进程在登录过程中运行较晚,并且可能在xmodmap运行后结束。 看起来像竞争条件……所以,最后,我将自动启动桌面文件exec行更改为

 Exec=$HOME/bin/mystart & 

(注意&mystart是我创建的包含的新目录bin的脚本

 #!/bin/bash sleep 5 /usr/bin/xmodmap /home/me/.Xmodmap & date >> /tmp/xmodmap-has-run 

 chmod u+x ~/bin/mystart 

该脚本在运行xmodmap之前会hibernate5秒,并在运行时跟踪它(在文件/tmp/xmodmap-has-run )。

希望这将是全部!

我遇到了同样奇怪的问题,尝试在登录我的会话时启动我的Xmodmap(ubuntu 13.04)。 我终于使用我的Home文件夹中的.xinitrc文件工作了,我放了命令,但是有绝对路径,那就是:

/ usr / bin / xmodmap /home/MYNAME/.Xmodmap

然后我不得不重新启动(不只是重新启动),以便它将被执行。