重新映射正确的alt以表现正确的ctrl


8

我正在尝试重新映射我right alt的行为使其像我一样,right ctrl以便可以使用右手拇指按下ctrl按钮。这是Ubuntu 12.04。

我已经在主文件夹中创建了.Xmodmap文件,其内容如下:

clear control
clear mod1
!keycode 64 = Alt_L Meta_L
keycode 108 = Alt_R Meta_R
add control = Control_L Control_R Alt_R
add mod1 = Alt_L Meta_L

您可能会猜到,我的左alt键的键码为64,而left alt键的键码为108。

实际上,这在某种意义上是可行的,因为我的右Alt键的行为就像我按下该ctrl键一样。

但是,我的左键alt现在什么也不做,这意味着我没有alt左键了。考虑到xmodmap给出以下输出,这很奇怪:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69),  Alt_R (0x6c)
mod1        Alt_L (0x40),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

奇怪的是,当我将Alt_R映射删除到时controlalt键起作用。

(即,将倒数第二行更改为:)

add control = Control_L Control_R

现在,即使是我正确的alt行为也让我alt感到困惑。从控制行中删除Alt_R映射后,输出xmodmap为:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

希望你们能提供帮助。

ps。我使用网站作为来源。

Answers:


6

您应该能够简单地使用键盘布局>>选项>> Ctrl键位置>> Right Alt作为Right Ctrl,但这是行不通的。这已经针对Debian提交为Bug#663218

1)通过删除〜/ .Xmodmap重新开始。

2)请注意,您无需清除 Control和Mod1。这样可以更轻松地仅更改您想要的内容。您的〜/ .Xmodmap应该是:

!Swap right control and right alt
remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

2

如果您是像我这样不幸的人之一,却无法让xmodmap用正确的Ctrl切换正确的Alt,那么这可能会有所帮助。

如果按向右Alt和e,然后得到é,则此解决方案适合您(需要改进)。

在终端中运行此命令(使用xev检查您的键码):

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

然后将此代码放在您的.Xmodmap中:

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

此代码将Alt_Gr键设置为Alt_R,然后将其与Ctrl_R交换。

如果要在注销后保留此命令,请将以下命令放在任何启动外壳文件中,例如〜/ .profile:

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

资料来源:Question1 Question2


1

在Ubuntu 19.04上,要在整个系统范围内进行映射,应更改两个文件:

  • / usr / share / X11 / xkb / symbols / altwin
  • / usr / share / X11 / xkb / symbols / pc

将以下部分添加到前一个部分中:

// Ctrl is mapped to the Alt.
partial modifier_keys
xkb_symbols "right_alt" {
    key <LALT> { [ Alt_L, Meta_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Control_R, Control_R ] };
    modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
    modifier_map Control { <LCTL>, <RALT> };
};

并替换include "altwin(meta_alt)"include "altwin(right_alt)"后者。


这回答了问题并起作用。但是接受的答案会交换正确的alt和正确的ctrl。最初并不是问这个问题,但是我认为这是许多人正在寻找的解决方案(在右边有两个控件并不是很方便)。您介意添加如何将正确的控制权映射到正确的alt吗?
Tedward
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.