在 Ubuntu 13.10 中重新映射 Ctrl、Alt 和 Super 键

Posted

技术标签:

【中文标题】在 Ubuntu 13.10 中重新映射 Ctrl、Alt 和 Super 键【英文标题】:Remap Ctrl, Alt & Super keys in Ubuntu 13.10 【发布时间】:2014-03-17 16:49:34 【问题描述】:

我正在尝试重新映射键盘的最后一行以模仿 Happy Hacking 键盘布局。我创建了一个 .Xmodmap 文件,并遵循了键码更改。下面仅显示使用xmodmap -pke > ~/.Xmodmap生成的Xmodmap文件中手动更改的行。

keycode 37 = Super_L NoSymbol Super_L
keycode 64 = Control_L NoSymbol Control_L
keycode 105 = Super_R NoSymbol Super_R
keycode 108 = Control_R NoSymbol Control_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R

以上更改是使用

加载的
xmodmap ~/.Xmodmap

更改已通过运行 xev 进行验证,即 Alt 键:CtrlSuper 键:AltCtrl 键:Super

但是,当我运行emacs时,仍然是Alt key: Alt, Super key: Super & Ctrl键:Ctrl。而且,终端仍然只能通过按 Alt + Ctrl + t 而不是 Alt + 超级 + t。这些应用程序仍然反映默认的键盘布局,而不是按照我的$HOME/.Xmodmap 文件中的新配置。

xmodmap ~/.Xmodmap 添加到$HOME/.xinitrc 文件中,以便更改在应用程序中保持不变。这没有用。

另外,将以下代码添加到/etc/X11/xinit/xinitrc。但这也不起作用。

if [ -f $HOME/.Xmodmap ]; then
    /usr/bin/xmodmap $HOME/.Xmodmap
fi

请提供您的建议。

感谢您的宝贵时间。

-吉里什

一点背景:

最近从 Windows 切换到 Ubuntu。我使用 Emacs 编写代码,并发现像在 HHK 中那样映射键是有效的。避免伤害手腕的小指和RSI。

【问题讨论】:

欢迎来到 Stack Overflow。当问题尽可能简洁时,许多人会赞赏它,同时清楚地说明您要解决的问题。据我了解,您的问题是 Ubuntu 在启动时没有加载 xmodmap? 【参考方案1】:

有关信息,如果您不想陷入 Xmodmap 的痛苦中,您还可以通过 gnome 设置做很多事情。

sudo apt-get install gnome-tweak-tool,打开它,转到 Typing,然后查看 Ctrl 键位置Alt/Win 键行为 的选项:

您也可以通过gsettings 执行此操作,但不确定确切的配置条目名称。

【讨论】:

下次我想交换密钥时会记住这一点。但是,当我切换到 KDE 并在其中应用时,xmodmap 脚本工作得很好。 这里没有说明如何使用xmodmap解决问题。 这比使用xmodmap 解决了我的问题,谢谢!【参考方案2】:

最后,让键盘模仿 HHK 布局(用于键盘的最后一行)。

在对新的键映射进行更改之前,必须添加清除修饰键的命令。然后,启用修饰键。

clear control
clear mod1
clear mod4

keycode 37 = Super_L NoSymbol Super_L
keycode 64 = Control_L NoSymbol Control_L
keycode 105 = Super_R NoSymbol Super_R
keycode 108 = Control_R NoSymbol Control_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R

add control = Control_L Control_R
add mod1 = Alt_L Alt_R
add mod4 = Super_L Super_R

感谢@d4gg4d 分享您的 Xmodmap 文件。否则,我不会弄明白的。

【讨论】:

我已经阅读了一千个关于此的主题,甚至没有人提到 clear / add 关键字。非常感谢,它正在工作! 谢谢各位!很高兴知道有人欣赏这篇文章。 但是如何在启动操作系统时自动执行呢?你说的两种方法我都试过了,没用。【参考方案3】:

我成功地使用以下 xmodmap 在 ubuntu 系统中交换了我的右手 ctrlalt

https://github.com/d4gg4d/my-emacs/blob/master/.Xmodmap

但是 13.10 ubuntu 因密钥重新映射而感到头疼。因此,我认为您的问题也与此问题有关:

https://askubuntu.com/questions/363075/xmodmap-doesnt-work-for-two-layouts/405553#405553

我怀疑在登录期间自动初始化 xmodmap 将无法正常工作,直到在下一个 ubuntu 版本中修复此问题。

【讨论】:

感谢您分享此信息。是否有任何其他方法可以交换关键事件?我记得我曾使用一个名为 SharpKeys 的工具在 Windows 中做同样的事情。有没有类似的东西? 我尝试了 XKB 作为一种可能的解决方法,但它面临着同样的问题(至少快速试用)。 嗨,从您的 xmopmap 文件中,我观察到您必须使用 clearadd modcontrol 键。您能告诉我在更改 Ctrl、Alt、Super 键时应该清除/添加哪些 mod 键吗?【参考方案4】:
    打开配置/usr/share/X11/xkb/symbols/pc 使用 Super_L 和 Control_L 修改行(将 LWIN 与 LCTL 和 RWIN 以及与 RCTL 交换
key <LWIN>     [ Super_L       ]   ;
key <LCTL>     [ Control_L     ]   ;
key <RWIN>     [ Super_R       ]   ;
key <RCTL>     [ Control_R     ]   ;

3. 移除缓存 rm -rf /var/lib/xkb/* 4.重启X

【讨论】:

【参考方案5】:

是的,Ubuntu 因弄乱您的设置而臭名昭著。 如果我理解正确,您想在启动时运行xmodmap

目前对我有用的是通过启动应用程序运行它(只需从破折号中输入)。 按添加并填写以下命令:

xmodmap .Xmodmap

【讨论】:

是的,你是对的。我希望我的 Xmodmap 在启动时运行。我无法按照你的修复。你能详细说明一下吗? 对不起.. 学习缓慢。我在启动应用程序中添加了命令。马上要重启了。 可能是您系统上的某些东西搞砸了。作为一种变通方法,您可以将对 xmodmap 的调用放入 ~/.bashrc。每次启动图形终端时都会加载它。 我将 xmodmap ~/.Xmodmap 添加到 ~/.bashrc。它没有达到预期的效果。会不会是 Xmodmap 文件的问题。这是定义映射的正确方法吗? 我在工作场所的代理后面。无法访问您的文件。【参考方案6】:

如果您希望 Alt 为 Ctrl(即,将 ctrl 映射到 alt)、Super 为 Alt 和 Ctrl 为 Super,并且希望左右手都使用,那么在我的 ubuntu 16.10 上,您可以简单地执行以下任何操作:

    和hwjp's answer一样,使用Gnome的工具选择altwin:ctrl_alt_win选项, 在 KDE 中,类似地查看系统设置/输入设备/键盘/高级中的 altwin:ctrl_alt_win 选项, 在终端上写setxkbmap -option altwin:ctrl_alt_win。请注意,setxkbmap -option 已撤消此操作。

避免使用 xmodmap,并且 KDE/Gnome 设置仍将保持不变。

顺便说一句,我也会这样做,但我的华硕笔记本电脑没有正确的 Win 键。因此,为了在左侧做同样的事情并且只在右侧交换 alt 和控件,我在 /usr/share/X11/xkb/symbols/ 添加了一个 xkb 选项,我可以再次打开/关闭类似setxkbmap -option tp500:emacs_b_row。如果你想知道如何,你可以在 askubuntu 上关注this answer。请注意,在最后一个链接中,您可能不需要他的第 4 步,而您需要 sudo 电源。这种方法感觉比 user259819 的 xkb solution 更合适和良性。

我可能已将此答案添加为评论,但我的声誉很低!

【讨论】:

以上是关于在 Ubuntu 13.10 中重新映射 Ctrl、Alt 和 Super 键的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Ubuntu 13.10 后,Apache 上的 laravel 项目出现 403 错误

ubuntu13.10设置永久静态IP重启不失效

Ubuntu 13.10不能启动VirtualBox怎么办

Eclipse Kepler 在 Ubuntu 13.10 上经常崩溃

Ubuntu 13.10 中的 websocket 连接失败

使用 Apache 虚拟主机在 ubuntu 13.10 上设置 zf2