http://members.at.infoseek.co.jp/hattoushin_uma/
最高です。本当に素晴しい。 Dvorak 配列がいいとか、SandS 使いたいとか、括弧はシフト押さずに入力したいとかで、いろいろ苦労していたけど、これで幸せになれました。ありがとうございます。
Linux では uinput というカーネルモジュールを使っているので X もコンソールも一緒にカスタマイズできる。
インストール方法等は README ファイルに書かれているが、私の手順をここに書いておく。
コンパイルとインストール
 ./configure --prefix=/home/ancient/local/opt/mayu --datadir=/home/ancient/local/opt/mayu/share
make
make install
自動起動のために mayu_init_script を作成
 #! /bin/sh
### BEGIN INIT INFO
# Provides:          mayu
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: mayu
### END INIT INFO
# PATH should only include /usr/* if it runs after the mountnfs.sh script
HOME=/home/ancient
PATH=$HOME/local/opt/mayu/bin:/sbin:/usr/sbin:/bin:/usr/bin
DESC="mayu"
NAME=mayu
DAEMON=$HOME/local/opt/mayu/bin/$NAME
DAEMON_ARGS="-v"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --background --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --background --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
}
case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
        exit 3
        ;;
esac
:
Debian なので update-rc.d する。
 cd /etc/inid.d
sudo ln -s /home/ancient/letter/dot.file/mayu_init_script mayu
update-rc.d  mayu defaults
~/.mayu
 def key Esc Escape                      =    0x01
def key _1                              =    0x02 # 1!
def key _2                              =    0x03 # 2@
def key _3                              =    0x04 # 3#
def key _4                              =    0x05 # 4$
def key _5                              =    0x06 # 5%
def key _6                              =    0x07 # 6^
def key _7                              =    0x08 # 7&
def key _8                              =    0x09 # 8*
def key _9                              =    0x0a # 9(
def key _0                              =    0x0b # 0)
def key HyphenMinus Hyphen Minus        =    0x0c # -_
def key EqualsSign Equal                =    0x0d # =+
def key BackSpace BS Back               =    0x0e
def key Tab                             =    0x0f
def key Q                               =    0x10
def key W                               =    0x11
def key E                               =    0x12
def key R                               =    0x13
def key T                               =    0x14
def key Y                               =    0x15
def key U                               =    0x16
def key I                               =    0x17
def key O                               =    0x18
def key P                               =    0x19
def key LeftSquareBracket OpenBracket   =    0x1a # [{
def key RightSquareBracket CloseBracket =    0x1b # ]}
def key Enter Return                    =    0x1c
def key LeftControl LControl LCtrl      =    0x1d
def key A                               =    0x1e
def key S                               =    0x1f
def key D                               =    0x20
def key F                               =    0x21
def key G                               =    0x22
def key H                               =    0x23
def key J                               =    0x24
def key K                               =    0x25
def key L                               =    0x26
def key Semicolon                       =    0x27 # ;:
def key Apostrophe Quote                =    0x28 # '"
def key GraveAccent BackQuote           =    0x29 # `~
def key LeftShift LShift                =    0x2a
def key ReverseSolidus BackSlash        =    0x2b # \|
def key Z                               =    0x2c
def key X                               =    0x2d
def key C                               =    0x2e
def key V                               =    0x2f
def key B                               =    0x30
def key N                               =    0x31
def key M                               =    0x32
def key Comma                           =    0x33 # ,<
def key FullStop Period                 =    0x34 # .>
def key Solidus Slash                   =    0x35 # /?
def key RightShift RShift               =    0x36
def key NumAsterisk NumMultiply         =    0x37 # Numpad *
def key LeftAlt LAlt LMenu              =    0x38
def key Space                           =    0x39
def key CapsLock Capital Caps           =    0x3a # CapsLock
def key F1                              =    0x3b
def key F2                              =    0x3c
def key F3                              =    0x3d
def key F4                              =    0x3e
def key F5                              =    0x3f
def key F6                              =    0x40
def key F7                              =    0x41
def key F8                              =    0x42
def key F9                              =    0x43
def key F10                             =    0x44
def key NumLock                         =    0x45
def key ScrollLock Scroll               =    0x46
def key Num7                            =    0x47 # Numpad 7
def key Num8                            =    0x48 # Numpad 8
def key Num9                            =    0x49 # Numpad 9
def key NumHyphenMinus NumMinus         =    0x4a # Numpad -
def key Num4                            =    0x4b # Numpad 4
def key Num5                            =    0x4c # Numpad 5
def key Num6                            =    0x4d # Numpad 6
def key NumPlusSign NumPlus             =    0x4e # Numpad +
def key Num1                            =    0x4f # Numpad 1
def key Num2                            =    0x50
def key Num3                            =    0x51
def key Num0                            =    0x52
def key NumFullStop NumPeriod           =    0x53 # Numpad .
def key F11                             =    0x57
def key F12                             =    0x58
def key F13                             =    0xb7
def key F14                             =    0xb8
def key F15                             =    0xb9
def key F16                             =    0xba
def key F17                             =    0xbb
def key F18                             =    0xbc
def key F19                             =    0xbd
def key F20                             =    0xbe
def key F21                             =    0xbf
def key F22                             =    0xc0
def key F23                             =    0xc1
def key F24                             =    0xc2
def key NumEnter NumReturn              =    0x60
def key RightControl RControl RCtrl     =    0x61
def key NumSolidus NumSlash             =    0x62 # テンキー /
def key PrintScreen Snapshot            =    0x63
def key RightAlt RAlt RMenu             =    0x64
def key Home                            =    0x66
def key Up                              =    0x67
def key PageUp Prior                    =    0x68
def key Left                            =    0x69
def key Right                           =    0x6a
def key End                             =    0x6b
def key Down                            =    0x6c
def key PageDown Next                   =    0x6d
def key Insert                          =    0x6e
def key Delete Del                      =    0x6f
def key Pause                           =    0x77 # Pause
def key Yen                             =    0x7c
def key LeftWindows LWindows LWin       =    0x7d
def key RightWindows RWindows RWin      =    0x7e
def key Applications Apps               =    0x7f
def key Henkan                          =    0x5c
def key Hiragana                        =    0x5d
def key Muhenkan                        =    0x5e
def key GraveAccent BackQuote           =    0x59
# def overflow                          =    0xff # overflow (ignore)
def mod Shift   = LShift RShift
def mod Alt     = LAlt RAlt
def mod Control = LControl RControl
def mod Windows = LWindows RWindows
# Key Sequence
keyseq $ToggleIME               = A-BackQuote
keyseq $CapsLock                = CapsLock
keyseq $SPACE                   = ~S-*Space                     # space
keyseq $EXCLAMATION_MARK        =  S-*_1                        # !
keyseq $QUOTATION_MARK          =  S-*Apostrophe                # "
keyseq $NUMBER_SIGN             =  S-*_3                        # #
keyseq $DOLLAR_SIGN             =  S-*_4                        # $
keyseq $PERCENT_SIGN            =  S-*_5                        # %
keyseq $AMPERSAND               =  S-*_7                        # &
keyseq $APOSTROPHE              = ~S-*Apostrophe                # '
keyseq $LEFT_PARENTHESIS        =  S-*_9                        # (
keyseq $RIGHT_PARENTHESIS       =  S-*_0                        # )
keyseq $ASTERISK                =  S-*_8                        # *
keyseq $PLUS_SIGN               =  S-*EqualsSign                # +
keyseq $COMMA                   = ~S-*Comma                     # ,
keyseq $HYPHEN-MINUS            = ~S-*HyphenMinus               # -
keyseq $FULL_STOP               = ~S-*FullStop                  # .
keyseq $SOLIDUS                 = ~S-*Solidus                   # /
keyseq $DIGIT_ZERO              = ~S-*_0                        # 0
keyseq $DIGIT_ONE               = ~S-*_1                        # 1
keyseq $DIGIT_TWO               = ~S-*_2                        # 2
keyseq $DIGIT_THREE             = ~S-*_3                        # 3
keyseq $DIGIT_FOUR              = ~S-*_4                        # 4
keyseq $DIGIT_FIVE              = ~S-*_5                        # 5
keyseq $DIGIT_SIX               = ~S-*_6                        # 6
keyseq $DIGIT_SEVEN             = ~S-*_7                        # 7
keyseq $DIGIT_EIGHT             = ~S-*_8                        # 8
keyseq $DIGIT_NINE              = ~S-*_9                        # 9
keyseq $COLON                   =  S-*Semicolon                 # :
keyseq $SEMICOLON               = ~S-*Semicolon                 # ;
keyseq $LESS-THAN_SIGN          =  S-*Comma                     # <
keyseq $EQUALS_SIGN             = ~S-*EqualsSign                # =
keyseq $GREATER-THAN_SIGN       =  S-*FullStop                  # >
keyseq $QUESTION_MARK           =  S-*Solidus                   # ?
keyseq $COMMERCIAL_AT           =  S-*_2                        # @
keyseq $LATIN_CAPITAL_LETTER_A  =  S-*A                         # A
keyseq $LATIN_CAPITAL_LETTER_B  =  S-*B                         # B
keyseq $LATIN_CAPITAL_LETTER_C  =  S-*C                         # C
keyseq $LATIN_CAPITAL_LETTER_D  =  S-*D                         # D
keyseq $LATIN_CAPITAL_LETTER_E  =  S-*E                         # E
keyseq $LATIN_CAPITAL_LETTER_F  =  S-*F                         # F
keyseq $LATIN_CAPITAL_LETTER_G  =  S-*G                         # G
keyseq $LATIN_CAPITAL_LETTER_H  =  S-*H                         # H
keyseq $LATIN_CAPITAL_LETTER_I  =  S-*I                         # I
keyseq $LATIN_CAPITAL_LETTER_J  =  S-*J                         # J
keyseq $LATIN_CAPITAL_LETTER_K  =  S-*K                         # K
keyseq $LATIN_CAPITAL_LETTER_L  =  S-*L                         # L
keyseq $LATIN_CAPITAL_LETTER_M  =  S-*M                         # M
keyseq $LATIN_CAPITAL_LETTER_N  =  S-*N                         # N
keyseq $LATIN_CAPITAL_LETTER_O  =  S-*O                         # O
keyseq $LATIN_CAPITAL_LETTER_P  =  S-*P                         # P
keyseq $LATIN_CAPITAL_LETTER_Q  =  S-*Q                         # Q
keyseq $LATIN_CAPITAL_LETTER_R  =  S-*R                         # R
keyseq $LATIN_CAPITAL_LETTER_S  =  S-*S                         # S
keyseq $LATIN_CAPITAL_LETTER_T  =  S-*T                         # T
keyseq $LATIN_CAPITAL_LETTER_U  =  S-*U                         # U
keyseq $LATIN_CAPITAL_LETTER_V  =  S-*V                         # V
keyseq $LATIN_CAPITAL_LETTER_W  =  S-*W                         # W
keyseq $LATIN_CAPITAL_LETTER_X  =  S-*X                         # X
keyseq $LATIN_CAPITAL_LETTER_Y  =  S-*Y                         # Y
keyseq $LATIN_CAPITAL_LETTER_Z  =  S-*Z                         # Z
keyseq $LEFT_SQUARE_BRACKET     = ~S-*LeftSquareBracket         # [
keyseq $REVERSE_SOLIDUS         = ~S-*ReverseSolidus            # \
keyseq $RIGHT_SQUARE_BRACKET    = ~S-*RightSquareBracket        # ]
keyseq $CIRCUMFLEX_ACCENT       =  S-*_6                        # ^
keyseq $LOW_LINE                =  S-*HyphenMinus               # _
keyseq $GRAVE_ACCENT            = ~S-*GraveAccent               # `
keyseq $LATIN_SMALL_LETTER_A    = ~S-*A                         # a
keyseq $LATIN_SMALL_LETTER_B    = ~S-*B                         # b
keyseq $LATIN_SMALL_LETTER_C    = ~S-*C                         # c
keyseq $LATIN_SMALL_LETTER_D    = ~S-*D                         # d
keyseq $LATIN_SMALL_LETTER_E    = ~S-*E                         # e
keyseq $LATIN_SMALL_LETTER_F    = ~S-*F                         # f
keyseq $LATIN_SMALL_LETTER_G    = ~S-*G                         # g
keyseq $LATIN_SMALL_LETTER_H    = ~S-*H                         # h
keyseq $LATIN_SMALL_LETTER_I    = ~S-*I                         # i
keyseq $LATIN_SMALL_LETTER_J    = ~S-*J                         # j
keyseq $LATIN_SMALL_LETTER_K    = ~S-*K                         # k
keyseq $LATIN_SMALL_LETTER_L    = ~S-*L                         # l
keyseq $LATIN_SMALL_LETTER_M    = ~S-*M                         # m
keyseq $LATIN_SMALL_LETTER_N    = ~S-*N                         # n
keyseq $LATIN_SMALL_LETTER_O    = ~S-*O                         # o
keyseq $LATIN_SMALL_LETTER_P    = ~S-*P                         # p
keyseq $LATIN_SMALL_LETTER_Q    = ~S-*Q                         # q
keyseq $LATIN_SMALL_LETTER_R    = ~S-*R                         # r
keyseq $LATIN_SMALL_LETTER_S    = ~S-*S                         # s
keyseq $LATIN_SMALL_LETTER_T    = ~S-*T                         # t
keyseq $LATIN_SMALL_LETTER_U    = ~S-*U                         # u
keyseq $LATIN_SMALL_LETTER_V    = ~S-*V                         # v
keyseq $LATIN_SMALL_LETTER_W    = ~S-*W                         # w
keyseq $LATIN_SMALL_LETTER_X    = ~S-*X                         # x
keyseq $LATIN_SMALL_LETTER_Y    = ~S-*Y                         # y
keyseq $LATIN_SMALL_LETTER_Z    = ~S-*Z                         # z
keyseq $LEFT_CURLY_BRACKET      =  S-*LeftSquareBracket         # {
keyseq $VERTICAL_LINE           =  S-*ReverseSolidus            # |
keyseq $RIGHT_CURLY_BRACKET     =  S-*RightSquareBracket        # }
keyseq $TILDE                   =  S-*GraveAccent               # ~
def subst *Minus                                = *LeftSquareBracket
def subst *Equal                                = *RightSquareBracket
def subst S-*_9                                 = $LESS-THAN_SIGN
def subst S-*_0                                 = $GREATER-THAN_SIGN
def subst *Q                                    = *Quote
def subst ~S-*W                                 = $LEFT_PARENTHESIS
def subst ~S-*E                                 = $RIGHT_PARENTHESIS
def subst S-*W                                  = $COMMA
def subst S-*E                                  = $FULL_STOP
def subst *R                                    = *P
def subst *T                                    = *Y
def subst *Y                                    = *F
def subst *U                                    = *G
def subst *I                                    = *C
def subst *O                                    = *R
def subst *P                                    = *Equal
def subst *LeftSquareBracket                    = *Slash
def subst *RightSquareBracket                   = *Semicolon
def subst *A                                    = *A
def subst *S                                    = *O
def subst *D                                    = *E
def subst *F                                    = *U
def subst *G                                    = *I
def subst *H                                    = *D
def subst *J                                    = *H
def subst *K                                    = *T
def subst *L                                    = *N
def subst *Semicolon                            = *S
def subst *Quote                                = *Minus
def subst *Z                                    = *L
def subst *X                                    = *Q
def subst *C                                    = *J
def subst *V                                    = *K
def subst *B                                    = *X
def subst *N                                    = *B
def subst *M                                    = *M
def subst *Comma                                = *W
def subst *Period                               = *V
def subst *Slash                                = *Z
keymap Global
mod control   +=   CapsLock
key *CapsLock  =  *LControl
# SandS
mod shift += !!Space
key R-*Space = &Ignore
mod alt       += Henkan
key *Henkan   =  *LeftAlt
#mod alt       += Hiragana
#key *Hiragana =  *LeftAlt