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


16

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

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

换句话说,交换DeleteMenu,并Caps Lock增加一个Escape

下次登录时,Ubuntu问我是否要按~/.Xmodmap预期加载。我加载了它,但是什么也没有发生(无论是那时还是随后的登录)。如果我手动运行xmodmap ~/.Xmodmap,它将按预期工作。

我知道这在10.10 Beta中很早就起作用了,但是在我的新10.10安装中却失败了。我没有尝试过10.10之前的任何版本。有任何想法吗?

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

我意识到的一件事是Xmodmap的“重新映射Caps Lock to Escape”部分一直在工作。只是删除/菜单交换失败。万一其他人遇到同样的问题,我将暂时保留此问题,因为我实际上不知道为什么问题会停止。


我自己也遇到了同样的问题,让我发疯了。如果我找出原因,我将确保发布答案。
乔治·佩尼亚

Answers:


11

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

您也可以检查/etc/gdm/Xsession该行usermodmap="$HOME/.Xmodmap",如果没有,只需将其附加在文件末尾。如果您是系统的唯一用户,只需将更改放入即可/etc/X11/Xmodmap


2
您如何“自动启动”命令?
miguel.martin 2014年

请参阅自动启动。最简单的方法可能只是在中添加一个条目Settings->Session and Startup,或沿这些行添加一些内容。
Mateen Ulhaq

或者例如,将其添加到您的外壳中,因此,如果您经常打开外壳,它将运行它。进入Gnome时,我做的第一件事通常是打开外壳,这是一种可行的方法。
trusktr

3

晚会晚了,但这也让我发疯了;而且,尽管我很固执,但放弃是没有选择的。

基本上,这就是我尝试过的方法(作为用户,如果需要,则以root用户身份)

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

(实际上,将xmodmap命令添加到~/.bashrc工作中,但是每次登录后都需要启动终端)

几年前(?)xkb被选择来处理键映射和配置(与X接口),但是在X会话初始化期间完成了X的工作xmodmap之后,还可能要求对X进行键相关的更改xkb

问题是这些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您的用户名(请注意,我没有刻意去尝试~/$HOME可替代的效果一样好/home/me,而xmodmap的完整路径可能是没有必要的......),并添加EXEC位

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

~/.Xmodmap在这种情况下,xmodmap命令必须位于文件中(或使用该-e选项,或选择另一个文件名!)。注销并重新登录。

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

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

再次编辑

有时,也许有25%的登录xmodmap仍然无法正常工作-当命令实际运行时(跟踪器证明了这一点)。我此时可能得出的唯一结论是,该xkb过程确实在登录过程中运行较晚,并且可能在xmodmap运行之后结束。看起来像是竞争条件...因此,最后,我将自动启动桌面文件exec行更改为

Exec=$HOME/bin/mystart &

(请注意&mystartbin我创建的新目录中的一个脚本,其中包含

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

chmod u+x ~/bin/mystart

该脚本在运行xmodmap之前会休眠5秒钟,并跟踪它何时运行(在文件中/tmp/xmodmap-has-run)。

希望这就是全部!


编辑xkb配置文件对我有用
17:23


2

也许您的~/.Xmodmap文件中存在语法错误?

尝试运行:

$ xmodmap ~/.Xmodmap

如果有的话应该会引发错误。


0

我有一个奇怪的问题,尝试在登录会话时启动Xmodmap(ubuntu 13.04)。我终于使它与主目录中的.xinitrc文件一起使用,在其中放置了命令,但具有绝对路径,即:

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

然后,我必须重新启动(而不仅仅是重新登录),以便可以执行它。


2
对我来说,这在Ubuntu 14.04下不起作用。
miguel.martin 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.