Ubuntu 13.04中的永久xmodmap
我无法在Ubuntu 13.04中登录时运行xmodmap。 我搜索过,包括在askubuntu和我找到的所有答案都不起作用。
我的主文件夹中有一个名为.Xmodmap的文件,其中包含所需的映射。 如果我手动运行它工作正常,所以没有错误。 为了让它在启动时运行,我尝试过:
-
使用包含以下命令之一的各种
.xinitrc
:-
xmodmap .Xmodmap
-
xmodmap ~/.Xmodmap
-
/usr/bin/xmodmap /home/NAME/.Xmodmap
-
if [ -s ~/.Xmodmap ]; then
xmodmap ~/.Xmodmap
fi
-
-
使用
.Xresources
而不是.xinitrc
具有相同的变体。 -
将其设置为启动应用程序。
以上都不适用于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 ,以便与vi
, vim
或gvim
。
与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->XkbLayout
为mylayout
(文件名),将XkbVariant
为basic
(参见上文)。 之后, 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时,这也让我感到沮丧。
幸运的是,现在(或者可能一直)在键盘首选项中可以轻松访问此设置,只需单击几下鼠标即可更改。
- 进入系统设置 > 键盘布局 > 选项…
- 在“键盘布局选项”中,单击箭头以显示▸“Ctrl”键位置选项。
- 将复选标记放在Swap Ctrl和Caps Lock中 。
你去了:左控制和大写锁定切换位置。
进行更改后,不要忘记删除~/.Xmodmap
。
我发现添加此脚本以启动满足:
while true;do xmodmap -e "keycode 87=Prior" xmodmap -e "keycode 88=Next" sleep 5 done
我尝试使用xmodmap ./Xmodmap
,但每次执行时都会出现明显的延迟。