多个具有不同布局的键盘

我在一台最新的MacBook Pro上运行着Ubuntu(11.04)。我同时使用内置键盘和外接键盘。我想要将两个键盘上的Caps Lock键重新映射为Super键,并且只想在内置(苹果)键盘上交换左Alt键(Mac Option键)和左Super键(Mac Cmd键)。
Xmodmap无法对多个键盘进行不同配置,所以这个方法行不通。
我可以通过setkbmap命令行来实现这个功能。以下是我使用的脚本:
#!/bin/sh
#set caps to super
setxkbmap -option caps:super

#swap command and option for apple keyboard
setxkbmap -device `xinput list | grep -o -P 'Apple Internal Keyboard / Trackpad\s+id=\d+' | grep -o -P '\d+'` -option altwin:swap_lalt_lwin

如果必要的话,我可以将这个作为一个启动应用程序运行,但我真的很想知道是否有一个配置文件可以将这些设置添加进去。看起来我应该能够在我的xorg.conf的inputdevice部分中添加一个选项(XkbOptions),但是当我尝试这样做时,设置没有生效(也许gnome覆盖了X的设置?)。我还尝试在xorg.conf中添加一个新的inputclass,但也没有成功。正确的地方在哪里配置具有不同按键绑定的多个键盘呢?

1注意:将此脚本放入启动应用程序中可在登录时修复问题,但是从暂停恢复后,我必须再次手动运行它。肯定有更好的方法来解决这个问题! - psanford
1应该有...我一直通过/etc/default/keymap(Debian)或者/etc/X11/xorg.conf.d/00-keyboard.conf(Fedora)来设置默认布局,以避免在重新启动时出现问题,但是对于具有不同选项的多个键盘可能不起作用(在这两个操作系统上,它被用来指定控制台键盘映射和X键盘映射,因此受到一定限制)。 - dhardy
1个回答

可以在xorg配置中完成这个操作。
Section "InputClass"
  Identifier     "Keyboard Catch All"
  MatchUSBID     "058f:9410"
  Option         "XkbOptions" "caps:super,terminate:ctrl_alt_bksp"
EndSection

Section "InputClass"
  Identifier "Apple Keyboards"
  MatchUSBID     "05ac:0236"
  Option         "XkbOptions" "altwin:swap_lalt_lwin,caps:super"
EndSection

然而,GDM有自己的方式来管理键盘设置,会覆盖这些xorg设置。我还没有找到一个在GDM下能很好工作的解决方案。