当前位置: 首页>>技术问答>>正文


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(据我所知,这有助于per-window键盘布局等)。

system-wideMap文件位于

/usr/share/X11/xkb/symbols/

这些Map似乎是分层加载的,pc映射为根,以及任何语言(例如en)作为根的子级。

在我的特殊情况下,我在键盘上将Page Up with Home和Page Down with End进行了物理交换,因此我非常粗略地对system-wide pcMap进行了更改,如下所示:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

注意:要强制Xorg使用新的键盘映射,您可能必须使用remove the existing pre-compiled maps(* .xkm)

/var/lib/xkb/

然后重启Xorg。

xkb上有各种资源,但this one与Ubuntu有关。

次佳解决思路

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

检查bug report #1243642(注释#6)和download it here

第三种解决思路

我在Ubuntu 14.04中遇到了这个问题,并找到了解决方案here。显然,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中)。

此用户的键盘行为将通过重新引导和注销保持持久性,但不会挂起。 Persistence through suspend can be achieved,但不幸的是只在系统级别,而不是在用户级别。

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

在今天的计算世界中,Caps Lock密钥几乎没有用处。通常,应该通过netiquettethe separation of presentation and content来避免使用ALL 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的up-applicication脚本,在* settings-daemon(对我来说是xfce4)运行晚于脚本的情况下启动up-applicication脚本也是如此 – 并且命令不能真正受到影响。

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

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

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic只是一个名字,我们稍后再见。

  • name[Group1]同样只是一个名字,但它以后不起作用。

  • include "us"包括普通的键盘。实际上us是同一目录中的另一个文件。这是我们正在调整的键盘布局。根据需要选择不同的一个。注意:没有分号可以结束此行。

  • key系列是键盘的一个改编版,更多可以跟随。 <AE03>可以在/usr/share/X11/xkb/keycodes下的文件中找到。使用xev程序确定“3”键具有键码12,并且在键码文件Xfree86中将其映射到<AE03>

  • 最后另一个include指令激活另一个键盘选项,在这种情况下我想让正确的Alt-key成为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年初的更新打破了持久性 – 暂停或休眠后键盘映射的auto-reload。由于使用/etc/pm/sleep.d脚本的方法停止工作(不建议使用?),只留下了更新的方法,使用/lib /systemd /system-sleep和略有不同的脚本(开始处理键盘映射!)。

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

请注意,这是一个per-user解决方案。有关per-device的答案,请参阅how to apply a keymap to a single device。这种方法可以适用于此处。

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

xmodmap .Xmodmap

然后转换为.xkb文件:

xkbcomp $DISPLAY $HOME/.xkbmap

在启动时打开auto-load,打开“启动应用程序”,单击“添加”,然后在“命令行”上输入:

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

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

现在,每次系统启动时都会加载键映射,但不会在挂起或休眠状态下继续存在。为此,在/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

(Ref.)如上所述,将”user”替换为实际用户名。

键映射现在应该是auto-load并保持持久性。注意:

  • 适用于当前LTS版本,16.04,以及可能更晚版本。

  • 取自above-linked错误线程的post 14

  • 早期的评论适用于原帖。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1354.html,未经允许,请勿转载。