The .Xmodmap suggestion is of course a solution if XQuartz had (and honoured) a systemwide file e.g. /usr/X11/lib/X11/xinit/.Xmodmap where to put XQuartz keyboard initialisations used for :0 because ~/.Xmodmap residing on NFS-server obviously has to work with all other X11 platforms too attached to it remotely; therefore there really is no room for XQuartz-specific stuff in ~/.Xmodmap.
You're right. Please file a bug for this, and I'll do that for the next release-candidate.
Actually, it should be doing that already... Look at DarwinKeyboardReloadHandler() in quartzKeyboard.c const char *sysmodmap = PROJECTROOT "/lib/X11/xinit/.Xmodmap"; ... /* Check for system .Xmodmap */ if (access(xmodmap, F_OK) == 0) { if (access(sysmodmap, F_OK) == 0) { snprintf (cmd, sizeof(cmd), "%s %s", xmodmap, sysmodmap); X11ApplicationLaunchClient(cmd); } } /* Check for user's local .Xmodmap */ if (homedir != NULL) { snprintf (usermodmap, sizeof(usermodmap), "%s/.Xmodmap", homedir); if (access(usermodmap, F_OK) == 0) { snprintf (cmd, sizeof(cmd), "%s %s", xmodmap, usermodmap); X11ApplicationLaunchClient(cmd); } } Now, I see I should be checking access() for the local .Xmodmap, but that is unrelated... You should be able to use a system .Xmodmap with releases since November 3rd (which is when this change went into the tree). --Jeremy