交换alt和super


27

我有一台运行Linux的Macbook Air。我想互相交换键盘两侧的altsuper键。

如何使用cli工具做到这一点?

更新资料

在Drav Sloan回答之后,我使用了以下内容:

keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R

1
奇怪的是,当我仅将前6行而不是bototm存入一个文件并在其中运行xmobmap文件时,事情对我有用(mac air)。有了底线,我有错误。
Leo Ufimtsev

Answers:


20

一种方法是通过xmodmap。您可以运行xev以获取关键事件。在运行时,xev将出现一个框,您可以将其聚焦,然后按要交换的键。它应该输出类似于该Alt密钥的详细信息:

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

我在PC上,没有“命令键”,但是有等效的“ Windows键”,xev给出:

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

由于xmodmap不了解state,并且很容易破坏键映射,因此建议您执行以下操作:

xmodmap -pke > defaults

然后我们创建一个xmodmap文件:

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

请注意我如何使用xev返回的键码。同样在这里,我只替换左的super和alt键(并将右的键保留其旧的行为)。然后,我们可以简单地运行xmodmap来设置以下键:

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

您可以运行而无需-v(详细)开关以进行静默运行,但是如果您在modmap文件中犯了错误,我发现它很有用。如果情况变得混乱,则只需重新应用默认值即可:

xmodmap defaults

Modmap通常是在X的启动时运行的,因此,如果将modmap命令放入,则可以将它们作为默认值应用~/.xmodmaprc


有办法做到这一点setxkbmap吗?我想setxkbmap -option compose:ralt与此一起使用选项。

我在另一个答案中使用了swap_opt_cmd解决方案,但是这个解决方案应该是透彻的,因为它写得很透彻,清晰。先生,先生
约翰·富兰克林

谢谢。我弄错了xmodmap并感谢您是否可以帮助askubuntu.com/questions/1026246/…–
蒂姆

26

如果要在Apple键盘上执行此操作,请尝试以下操作:

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

要使其在较低版本的Linux上运行,您可以尝试以下操作:http : //blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html


尽管其他答案也可以,但是这是Mac Books 解决方案。像魅力一样运作!
sinisterstuf

1
为什么这不是默认值?
约翰·富兰克林

我对此文件没有写权限。:-(
itmuckel

1
@ Micha90-您需要使用teeecho "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin

2
花一小时配置xmodmap。有用。然后看第二个答案...
Bilow

17

如果只想交换左alt和超级键,请在终端中执行以下命令:

setxkbmap -option altwin:swap_alt_win

要恢复默认行为,请使用:

setxkbmap -option

注意:这是临时的。如果您想要效果永久添加到您的启动文件。


4
这应该是公认的解决方案,因为它很干净并且使用内置函数。您应该提到,要恢复默认行为,您可以使用setxkbmap -option。如果只想交换左alt和超级键,请使用以下命令:setxkbmap -option altwin:swap_lalt_lwin
erik

1
我有Logitech键盘,可以用左alt(Alt_L)切换Windows键(Super_L)。谢谢!
德里克(Derek)

4
$ xmodmap -pke

请注意alt和super绑定到哪个键代码,然后在主文件夹中打开/创建一个新文件.xmodmaprc。例如,我的超级/替代键是这样绑定的

keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R

但是要交换密钥,请将以下内容放在.xmodmaprc中

keycode  64 = Super_L NoSymbol Super_L
keycode 108 = Super_R NoSymbol Super_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R

覆盖键码/角色关联...很简单,并且可以正常工作。想知道与该remove ...解决方案相比是否有任何缺点。
环Ø

请记住,您可以使用它grep来过滤输出,因此xmodmap -pke | grep -i "super\|alt"应该使查看所需内容更加容易。
本杰明·R

0

如果您是像我这样不幸的人之一,却无法使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

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.