Ubuntu 13.04中的永久xmodmap

我无法在Ubuntu 13.04中登录时运行xmodmap。 我搜索过,包括在askubuntu和我找到的所有答案都不起作用。

我的主文件夹中有一个名为.Xmodmap的文件,其中包含所需的映射。 如果我手动运行它工作正常,所以没有错误。 为了让它在启动时运行,我尝试过:

  1. 使用包含以下命令之一的各种.xinitrc

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. 使用.Xresources而不是.xinitrc具有相同的变体。

  3. 将其设置为启动应用程序。

以上都不适用于Ubuntu 13.04(64位)。 我还看到了一些有关全局更改键盘映射的想法,但大多数都不适用于Ubuntu 13.04(即相应的文件在指定的位置不存在),我不想触摸全局设置。

Ubuntu不再使用xmodmap ,而是使用xkb (据我所知,这有利于每个窗口的键盘布局等)。

系统范围的地图文件位于

 /usr/share/X11/xkb/symbols/ 

这些映射似乎是按层次加载的,以pc映射为根,以及与根的子级相同的语言(例如en )。

在我的特殊情况下,我在键盘上将Page Up with Home和Page Down with End进行了实际交换,因此我非常粗略地对系统范围的pc地图进行了更改,如下所示:

  key  { [ Prior ] }; key  { [ Home ] }; key  { [ Next ] }; key  { [ End ] }; 

注意:要强制Xorg使用新的键盘映射,您可能必须删除现有的预编译映射 (* .xkm)

 /var/lib/xkb/ 

然后重启Xorg。

xkb上有各种资源,但这个资源与Ubuntu有关。

对我来说,如果要以系统设置中不可用的方式重新映射1或2个密钥,则xkb配置过于复杂。 另外,解决方案应该保留在用户端,而不需要编辑’/ usr / share / X11 / xkb / symbols /’等。使用启动应用程序强制’xmodmap~ / .Xmodmap’加载只能暂停,更改用户或更改键盘布局。 因此,正如holocronweaver建议的那样,我发现代码片段,我在会话启动时加载了一个python脚本,在需要时重新加载’〜/ .Xmodmap’。

检查错误报告#1243642 (评论#6),并在此处下载 。

我在Ubuntu 14.04中遇到了这个问题,并在此处找到了解决方案。 显然,Ubuntu无法在登录后立即配置键盘,但稍晚一点。 所以如果你添加一个命令

 sleep 4 && xmodmap ~/.Xmodmap & 

~/.bash_profile然后它应该工作(它对我来说)。

编辑:这似乎只有在登录后才能工作,而不是在启动后。 我将在稍后进行调查。

Caps Lock转换为Esc以供vim使用

这是我的键映射启动脚本的变体。 它可以在任何键盘上将Caps Lock转换为Esc ,以便与vivimgvim

与q4w56的答案不同,这个答案不会使用任何无限的while; do 循环。 否则,我的双核CPU的一个核心每5秒就会达到42%,严重降低了我的笔记本电池电量。

 #!/bin/bash sleep 4 xmodmap -e "clear Lock" xmodmap -e "keysym Caps_Lock = Escape" 

将其另存为脚本。 使用chmod +x使文件可执行。 将脚本名称和位置添加到Session and Startup → Application Autostart (在Xubuntu中)。

此用户的键盘行为将通过重新引导和注销保持持久性,但不会挂起。 可以实现通过挂起的持久性 ,但不幸的是仅在系统级别,而不是在用户级别。

此键盘重新映射的基本原理

在今天的计算世界中, Caps Lock键几乎没有用处。 一般来说,人们应该通过网络礼节和表达与内容的分离来避免使用全部CAPS 。 此外,在用vim编辑文本时不小心碰到Caps Lock键并不总是立即注意到,但总是导致相当讨厌的vim行为 。 一起禁用Caps Lock键并将其重新用作易于触及的Esc键,可以获得vim使用的双赢。

我在使用fcitx的Ubuntu 16.04上遇到了问题,并且在fcitx wiki上有解决方案,但它需要fcitx有4.2.7或更高版本

  • touch ~/.Xmodmap
  • 写配置
  • 重启,fcitx会尝试自动加载

原因也有一些解释。

@丹尼尔的回答指出了正确的方法,但我想延伸一下。

适用于Linux Mint 17.2和Ubuntu 16.04。

我尝试了所有可以想到继续使用xmodmap ,但是当系统进入睡眠模式时它们都会失败。 对于使用setxkbmap启动应用程序脚本setxkbmap ,如果* settings-daemon(对我来说是xfce4)运行的时间晚于脚本—并且命令不能真正受到影响。

我最终想出的具有以下成分:

1)为/usr/share/X11/xkb/symbols写一个最小的键盘映射文件。 让我们调用文件mylayout就可以了

 xkb_symbols "basic" { name[Group1] = "My Layout"; include "us" key  { [ 3, numbersign, sterling, sterling] }; include "level3(ralt_switch)" } 
  • basic只是一个名字,我们以后再见。
  • name[Group1]同样只是它看起来的名字,但它以后不起作用。
  • include "us"包括普通的键盘。 实际上us是同一目录中的另一个文件。 这是我们正在调整的键盘布局。 根据需要选择不同的一个。 注意:没有分号可以结束此行。
  • key是键盘的一个改编,更多可以遵循。 可以在/usr/share/X11/xkb/keycodes 下的文件中找到。 使用xev程序确定“3”键具有键码12,并且在键码文件Xfree86它被映射到
  • 最后另一个include指令激活另一个键盘选项,在这种情况下我想让正确的Alt键成为3级移位键,即可以访问我在上面定义的sterling符号的键。 level3只是与ralt_switch相同的文件夹中的一个文件名的一部分。 环顾四周,选择您需要包含的内容。

2)我没有将mylayout放入系统文件夹。 相反,我只是从系统文件夹到我喜欢的文件夹的软链接,立即看到这不是库存软件。

3)此外,我没有修复evdev.xml ,再次防止更新麻烦。 但是在键盘配置编辑器中找到mylayout是必要的(对于xfce4,它是xfce4-keyboard-settings )。 相反,我使用xfce4-settings-editor并将keyboard-layout->XkbLayoutmylayout (文件名),将XkbVariantbasic (参见上文)。 之后, mylayout/basic也会显示在键盘设置编辑器中。 evdev.xml的条目似乎只需要能够选择布局。

这样,键盘设置现在可以在睡眠模式下恢复并重新启动。

更多背景信息可以在这里找到: http : //www.charvolant.org/~doug/xkb/html/node5.html 。

另一种修复睡眠模式问题的方法(我自己没试过)可以在这里找到: https : //www.vinc17.net/unix/xkb.en.html 。

更新:与Mint 18.3一起工作的同时我更改了xfce4-settings-editor中的设置,如上所述。

修订

2018年初的更新打破了持久性 – 在挂起或hibernate后自动重新加载键映射。 由于使用/etc/pm/sleep.d脚本的方法停止工作(不建议使用?),只留下了更新的方法,使用/ lib / systemd / system-sleep和略有不同的脚本(开始处理键盘映射!)。

所以这篇文章更新为更新的持久化方法,并包括正常的初始键映射加载,它也开始工作。 将.Xmodmap文件转换为.xkbmap的例程保持不变。

请注意,这是一个按用户解决方案。 对于每设备的答案,请参阅如何将键映射应用于单个设备 。 这种方法可以适用于此处。

首先根据需要修改.Xmodmap文件。 这些比.xkbmap文件更容易直接编辑。 加载时:

xmodmap .Xmodmap

然后转换为.xkb文件:

xkbcomp $ DISPLAY $ HOME / .xkbmap

要在启动时自动加载,请打开“启动应用程序”,单击“添加”,然后在“命令行”上输入:

xkbcomp /home/user/.xkbmap“:0”

(“user”替换为实际用户名。)对于Name,可能输入Load Keyboard Map。 如果需要,添加评论并点击保存。

现在,每次系统启动时都会加载键映射,但不会在挂起或hibernate状态下继续存在。 为此,在/ lib / systemd / system-sleep中创建一个新文件,可能名为60_xkbmap,其中包含:

 #!/bin/sh case $1/$2 in pre/*) # Place pre-suspend commands here exit 0 ;; post/*) # Place post-suspend commands here export DISPLAY=":0" export XAUTHORITY="/home/user/.Xauthority" su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null" ;; esac 

( 参考 )如上所述,将“user”替换为实际用户名。

键映射现在应该自动加载并保持持久性。 注意:

  • 适用于当前LTS版本,16.04,以及可能更晚版本。
  • 摘自上面链接的bug线程的第14篇 。
  • 早期的评论适用于原帖。

当我从Ubuntu 12.04升级到13.04时,这也让我感到沮丧。

幸运的是,现在(或者可能一直)在键盘首选项中可以轻松访问此设置,只需单击几下鼠标即可更改。

  1. 进入系统设置 > 键盘布局 > 选项…
  2. 在“键盘布局选项”中,单击箭头以显示▸“Ct​​rl”键位置选项。
  3. 将复选标记放在Swap Ctrl和Caps Lock中

你去了:左控制和大写锁定切换位置。

进行更改后,不要忘记删除~/.Xmodmap

我发现添加此脚本以启动满足:

 while true;do xmodmap -e "keycode 87=Prior" xmodmap -e "keycode 88=Next" sleep 5 done 

我尝试使用xmodmap ./Xmodmap ,但每次执行时都会出现明显的延迟。