Since there appears to be no objections to moving away from the
deprecated adb keycodes over to linux keycodes I have been thinking
about a way to make the transition as painless as possible.
Problems:
1) the kernel needs to be reconfigured with CONFIG_MAC_ADBKEYCODES=n
this will require that a new i386 keymap be installed or the console
will be unusable.
2) console-data needs to start setting up i386 maps instead of Mac
maps. on upgrade it needs to change over to an i386 map, coinciding
with kernel replacement.
Proposal:
* Woody ships with a 2.2.19 (or 2.2.20) kernel with
CONFIG_MAC_ADBKEYCODES=n
* console-data is changed to install a i386 map by default on new
woody install.
* console-data when upgraded from previous versions will check the
status of the dev/mac_hid/keyboard_sends_linux_keycodes sysctl:
- If it exists and is set to 1, do nothing, the admin has already
taken care of the transition.
- If it exists and is set to 0 we have a standard potato install
put up a message informing the user of the situation and
what to do about it [1].
- If the sysctl does not exist at all we have either a custom,
misconfigured kernel, or a very old potato kernel. Explain
this situation and what to do about it [2].
[1] Your system is using obsolete Macintosh keycodes and keymap. In
order to properly transition to the standard Linux keycodes you must
upgrade your kernel to a version which has the configuration option
`CONFIG_MAC_ADBKEYCODES' set to NO *AND* you *MUST* reselect an i386
keymap. You may select the keymap now, but you must upgrade your
kernel before you reboot again or the console will become unusable.
Options:
1) Reconfigure keymap now
2) Reconfigure keymap later
Option 1 will select and install a i386 keymap and run sysctl -w
dev/mac_hid/keyboard_sends_linux_keycodes=1 which will keep the
console usable until the next reboot, at which point the user must
have replaced the kernel with a properly configured version.
One other possibility is have Option 1 also create a new temporary
initscript with the following and link it to 06 in runlevel S:
/etc/init.d/keycode-fix.sh
#!/bin/sh
if [ "$(/sbin/sysctl -n dev/mac_hid/keyboard_sends_linux_keycodes)" = 0 ] ; then
echo -n "WARNING: Fixing kernel keycodes...
/sbin/sysctl -w dev/mac_hid/keyboard_sends_linux_keycodes=1 >/dev/null
echo "done."
elif [ "$(/sbin/sysctl -n dev/mac_hid/keyboard_sends_linux_keycodes)" = 1 ] ; then
rm -f /etc/rcS.d/S06keycode-fix.sh 2> /dev/null
rm -f /etc/init.d/keycode-fix.sh 2> /dev/null
fi
this script would fix the sysctl until the user fixed the kernel at
which point it would delete itself as its no longer needed. i
personally find this rather hideous but it would save the user some
hassle if they forget to fix the kernel after fixing the keymap... of
course this would not work in the next scenario.
[2] Your system is using the deprecated Macintosh keycodes and your
kernel does not support the new input later or standard Linux
keycodes. You should upgrade your kernel before attempting to
reconfigure the keymap.
This all does nothing about X11, I presume the XFree packages should
do something of their own to note the change.
Bugs will have to be filed against:
* relevant XFree package to use i386 keymaps instead of Macintosh during configuration.
* console-data (see above)
* kernel-image-pmac turn off CONFIG_MAC_ADBKEYCODES
This is all still a bit rough, I am looking for comments and
suggestions on how to proceed. I want this transition to occur for
woody so it needs to start ASAP.
--
Ethan Benson
http://www.alaska.net/~erbenson/