为什么登录时我的〜/ .Xmodmap文件不会加载?
我根据这个答案创建了以下~/.Xmodmap
文件。
keysym Delete = Menu keysym Menu = Delete clear Lock keycode 0x42 = Escape
换句话说,交换Delete
和Menu
,并使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/Xsession
行usermodmap="$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
然后我不得不重新启动(不只是重新启动),以便它将被执行。