FreeBSD QandA 515
Q. ThinkPad 535 で Fn+* のキーが刻印通りに使うことができません。
PC DOS J7/V などを使っているときはちゃんと動作しています。
A. ThinkPad 535の場合、起動時に sc0 のデバイスで キーボードをリセット
しているのが原因だと思われます。リセットをしない様に修正すると Fn+* が
刻印通りに使える様になるという報告があります。
なお、Fn+F3 でサスペンドする様にするには apm に対してパッチ修正する必
要があります。
FreeBSD 2.2.5-RELEASE 以降を使っているときは以下の例の様に sc0 デバイ
スに flags 0x20 を追加します。
# syscons is the default console driver, resembling an SCO console
device sc0 at isa? port "IO_KBD" tty irq 1 flags 0x20 vector scintr
FreeBSD 2.2.2-RELEASE やそれ以前の場合このフラグが定義されていませんか
ら、/sys/i386/isa/syscons.c を修正 (以下のパッチを当てる) してから sc0
デバイスに flags 0x20 を追加します。
以下のパッチは 2.2.2-RELEASE に 2.2.5-RELEASE の該当する部分をマージし
たものです。
--- /sys/i386/isa/syscons.c.orig Fri Jan 16 10:01:30 1998
+++ /sys/i386/isa/syscons.c Fri Jan 16 10:00:25 1998
@@ -369,6 +369,19 @@
printf("sc%d: keyboard scancode set %d\n", dev->id_unit, codeset);
#endif /* DETECT_XT_KEYBOARD */
+ if ( dev->id_flags & NORESET_KBD ) {
+ write_kbd_command(sc_kbdc, KBDC_ECHO);
+ printf ("sc%d: Noreset for keyboard.\n", dev->id_unit );
+
+ if (read_kbd_data(sc_kbdc) != KBDC_ECHO) {
+ empty_both_buffers(sc_kbdc, 10 );
+ test_controller(sc_kbdc);
+ test_kbd_port(sc_kbdc);
+ if (bootverbose)
+ printf("sc%d: failed to get response from the keyboard.\n", dev->id_unit);
+ goto fail;
+ }
+ } else {
/* reset keyboard hardware */
if (!reset_kbd(sc_kbdc)) {
/* KEYBOARD ERROR
@@ -390,6 +403,7 @@
printf("sc%d: failed to reset the keyboard.\n", dev->id_unit);
goto fail;
}
+ }
/*
* Allow us to set the XT_KEYBD flag in UserConfig so that keyboards
--- /sys/i386/isa/syscons.h.orig Wed Jan 14 17:20:21 1998
+++ /sys/i386/isa/syscons.h Fri Jan 16 09:52:57 1998
@@ -71,6 +71,7 @@
#define CHAR_CURSOR 0x00004
#define DETECT_KBD 0x00008
#define XT_KEYBD 0x00010
+#define NORESET_KBD 0x00020
/* attribute flags */
#define NORMAL_ATTR 0x00
間違い・追加情報を見付けた場合は、
修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで
お知らせください。