01/10/13 22:01 Q/kw9Cxc
たぶん結構知られた問題。
本当にそれでいいのかどうかわからんが、
linux/driver/input/keybdev.cのx86_keycodesのテーブルを
修正すると直る。
こんな感じのパッチを当ててkeybdev.oをリコンパイル。
モジュールにしてないなら、カーネル全体を再make
--- linux.org/drivers/input/keybdev.c Thu Apr 26 06:35:25 2001
+++ linux/drivers/input/keybdev.c Wed Aug 22 22:27:41 2001
@@ -59,7 +59,7 @@
360, 93, 94, 95, 98,376,100,101,357,316,354,304,289,102,351,355,
103,104,105,275,281,272,306,106,274,107,288,364,358,363,362,361,
291,108,381,290,287,292,279,305,280, 99,112,257,258,113,270,114,
- 118,117,125,374,379,259,260,261,262,263,264,265,266,267,268,269,
+ 118,117,125,374,379,115,112,125,121,123,264,265,266,267,268,269,
271,273,276,277,278,282,283,295,296,297,299,300,301,302,303,307,
308,310,313,314,315,317,318,319,320,321,322,323,324,325,326,330,
332,340,341,342,343,344,345,346,356,359,365,368,369,370,371,372 };
でも、カーネルにパッチを当てるのを良く忘れるので、
#!/usr/bin/perl
@ARGV == 1 || die "No file specified";
open(IN, $ARGV[0]) || die "Read open error";
read(IN, $target, 100000) || die "Read error";
close(IN);
$match = pack("v*", 118,117,125,374,379,
259,260,261,262,263,
264,265,266,267,268,269);
($p = index($target, $match)) >= 0 || die "Search error";
$p == rindex($target, $match) || die "Search error";
substr($target, $p + 10, 10, pack("v*", 115,112,125,121,123));
open(OUT, ">$ARGV[0]") || die "Write open error";
print OUT $target;
close(OUT);
のようなスクリプトを書いて気が付いたら
keybdev.oを直接書き換えてる。