为MacBook Pro调优FreeBSD

修正键盘映射(keymap)

我使用NVIDIA的驱动提供的自动生成Xorg.conf配置(也可以使用 xorg -configure 配置),但是默认的家盘布局实际上和MacBook键盘有差异,例如无法输入反引号和波浪号(同一个按键,在TAB键上方,数字键1左方)。

原因是 /usr/local/share/X11/xkb/symbols/us 配置中 TLDELSGT 映射对于MAC键盘恰好是反的,需要对换,具体步骤方法如下:

  • 修改 /usr/local/share/X11/xkb/symbols/usxkb_symbols "mac" 段落,将 TLDELSGT 内容对换,也就是将:

    xkb_symbols "mac" {
    
        include "us(basic)"
        name[Group1]= "English (Macintosh)";
        key.type[group1]="FOUR_LEVEL";
    
        // Slightly improvised from http://homepage.mac.com/thgewecke/kblayout.jpg
        key <LSGT> { [   section,  plusminus,       section,        plusminus ] };
        key <TLDE> { [     grave, asciitilde,    dead_grave,        dead_horn ] };
        key <AE01> { [         1,     exclam,    exclamdown,            U2044 ] };
    

修改成:

xkb_symbols "mac" {

    include "us(basic)"
    name[Group1]= "English (Macintosh)";
    key.type[group1]="FOUR_LEVEL";

    // Slightly improvised from http://homepage.mac.com/thgewecke/kblayout.jpg
    key <TLDE> { [   section,  plusminus,       section,        plusminus ] };
    key <LSGT> { [     grave, asciitilde,    dead_grave,        dead_horn ] };
    key <AE01> { [         1,     exclam,    exclamdown,            U2044 ] };
  • 然后在图形桌面的终端模拟器中执行:

    setxkbmap -layout us -variant mac
    

这样后续在图形界面中就能够正确输入反引号和波浪号。

备注

我现在很矬,还没有搞定 xsession 自动执行 setxkbmap 。不过,我暂时将这条 setxkbmap 命令放在 .shrc 中,因为我的工作原因,每次登陆桌面必然会打开终端模拟程序,所以一定会执行到 .shrc 中指令。

后续有空再优化吧…

自动化

备注

以下是我尝试自动完成上述执行命令 setxkbmap -layout us -variant mac 但目前还没有成功,待探索

startx 以及任何Display manager都是用 ~/.xinitrc~/.xsession ,所以可以在这两个文件中添加:

exec setxkbmap -layout us -variant mac

或者直接编辑 ~/.xprofile 中添加:

setxkbmap -layout us -variant mac &
  • (尚未实践)对于终端字符(非图形界面),则使用 kbdmap 命令,具体设置方法可以参考 How to change keyboard mapping in the console? (原文是设置西班牙语键盘,应该可参考,不过我没有实践)

  • (尚未实践成功)原文还介绍使xorg默认就按照上述映射,修订 /etc/X11/xorg.conf 配置添加:

    Section "InputClass"
            Identifier "libinput keyboard catchall"
            MatchIsKeyboard "on"
            MatchDevicePath "/dev/input/event*"
            Driver "libinput"
            Option "XkbRules" "evdev"
            Option "XkbLayout" "us"
            Option "XkbVariant" "mac"
    EndSection
    

参考