misc/126841: Add eee900 keyboard layout to /usr/share/syscons/keymaps/

Peter pb at ludd.ltu.se
Tue Aug 26 01:20:03 UTC 2008


>Number:         126841
>Category:       misc
>Synopsis:       Add eee900 keyboard layout to /usr/share/syscons/keymaps/
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Aug 26 01:20:02 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Peter
>Release:        FreeBSD 7 i386
>Organization:
>Environment:
>Description:
Console keymap for FreeBSD on Asus Eee 900 linux variant keyboard netbook.
I suggest adding this to the '/usr/share/syscons/keymaps/' directory.

For Asus Eee models with Swedish, Danish, Norwegian, Finnish or Icelandic
keyboard layout. In particular this fixes the '|' character on Z and +? key.

The part name for the keyboard:
  Asus Nordic (SE-DK-NW-FI-IS) Keyboard 80-Keys Linux

# $FreeBSD: src/share/syscons/keymaps/nordic_eee900.kbd,v 1.0 2008/08/26 02:38:48 pb Exp $
#                                                         alt
# scan                       cntrl          alt    alt   cntrl lock
# code  base   shift  cntrl  shift  alt    shift  cntrl  shift state
# ------------------------------------------------------------------
  000   nop    nop    nop    nop    nop    nop    nop    nop     O
  001   esc    esc    esc    esc    esc    esc    debug  esc     O
  002   '1'    '!'    nop    nop    nop    nop    nop    nop     O
  003   '2'    '"'    nul    nul    '@'    '@'    nul    nul     O
  004   '3'    '#'    nop    nop    163    nop    nop    nop     O
  005   '4'    164    nop    nop    '$'    nop    nop    nop     O
  006   '5'    '%'    nop    nop    nop    nop    nop    nop     O
  007   '6'    '&'    nop    nop    nop    nop    nop    nop     O
# Alt + Shift + 7 = ÷
  008   '7'    '/'    nop    nop    '{'    '÷'    nop    nop     O
  009   '8'    '('    nop    nop    '['    nop    nop    nop     O
  010   '9'    ')'    nop    nop    ']'    nop    gs     nop     O
  011   '0'    '='    nop    nop    '}'    nop    nop    nop     O
  012   '+'    '?'    nop    nop    '\'    nop    fs     nop     O
# For left of backspace key, gives with Alt=' and Alt+Shift+Key=|
  013   128    '`'    nop    nop    39     '|'    nop    nop     O
  014   bs     bs     del    del    bs     bs     del    del     O
  015   ht     btab   nop    nop    ht     btab   nop    nop     O
  016   'q'    'Q'    dc1    dc1    'q'    'Q'    dc1    dc1     C
  017   'w'    'W'    etb    etb    'w'    'W'    etb    etb     C
# Alt + Ctrl + E = French e (as in café)
  018   'e'    'E'    enq    enq    164    'E'    'é'    enq     C
# Alt + R = Copyright sign
  019   'r'    'R'    dc2    dc2    '®'    'R'    dc2    dc2     C
  020   't'    'T'    dc4    dc4    't'    'T'    dc4    dc4     C
  021   'y'    'Y'    em     em     'y'    'Y'    em     em      C
# Alt + U = Mikro,  Alt + Shift + U = German u
  022   'u'    'U'    nak    nak    'µ'    'U'    'ü'    'Ü'     C
  023   'i'    'I'    ht     ht     'i'    'I'    ht     ht      C
# Alt + O = Norwegian/Danish Ö
  024   'o'    'O'    si     si     'ø'    'Ø'    si     si      C
# Alt + P = Pi
  025   'p'    'P'    dle    dle    '¶'    'P'    dle    dle     C
  026   229    197    nop    nop    '}'    ']'    nop    nop     C
  027   168    '^'    nop    nop    '~'    nop    nop    nop     O
  028   cr     cr     nl     nl     cr     cr     nl     nl      O
  029   lctrl  lctrl  lctrl  lctrl  lctrl  lctrl  lctrl  lctrl   O
# Alt + A = At sign,  Ctrl+Alt = ae,  Ctrl+Alt+Shift = AE
  030   'a'    'A'    soh    soh    '@'    'A'    'æ'    'Æ'     C
  031   's'    'S'    dc3    dc3    's'    'S'    dc3    dc3     C
  032   'd'    'D'    eot    eot    'd'    'D'    eot    eot     C
  033   'f'    'F'    ack    ack    'f'    'F'    ack    ack     C
  034   'g'    'G'    bel    bel    'g'    'G'    bel    bel     C
  035   'h'    'H'    bs     bs     'h'    'H'    bs     bs      C
  036   'j'    'J'    nl     nl     'j'    'J'    nl     nl      C
  037   'k'    'K'    vt     vt     'k'    'K'    vt     vt      C
  038   'l'    'L'    ff     ff     'l'    'L'    ff     ff      C
  039   246    214    nop    nop    '|'    '\'    nop    nop     C
  040   228    196    nop    nop    '{'    '['    nop    nop     C
  041   167    189    nop    nop    '\'    '|'    nop    nop     O
  042   lshift lshift lshift lshift lshift lshift lshift lshift  O
  043   '''    '*'    nop    nop    nop    nop    nop    nop     O
# Alt + Z = Pipe
  044   'z'    'Z'    sub    sub    '|'    'Z'    sub    sub     C
  045   'x'    'X'    can    can    'x'    'X'    can    can     C
  046   'c'    'C'    etx    etx    'c'    'C'    etx    etx     C
  047   'v'    'V'    syn    syn    'v'    'V'    syn    syn     C
# Ctrl + Shift + B = German B
  048   'b'    'B'    stx    'ß'    'b'    'B'    stx    stx     C
  049   'n'    'N'    so     so     'n'    'N'    so     so      C
# Alt + M = Mikro
  050   'm'    'M'    cr     cr     181    'M'    cr     cr      C
# Alt + [,/;] = <
  051   ','    ';'    nop    nop    '<'    '<'    nop    nop     O
# Alt + [./:] = >
  052   '.'    ':'    nop    nop    '>'    '>'    nop    nop     O
  053   '-'    '_'    us     nop    '/'    '?'    nop    nop     O
  054   rshift rshift rshift rshift rshift rshift rshift rshift  O
  055   '*'    '*'    '*'    '*'    '*'    '*'    '*'    '*'     O
  056   lalt   lalt   lalt   lalt   lalt   lalt   lalt   lalt    O
  057   ' '    ' '    nul    ' '    ' '    ' '    susp   ' '     O
  058   clock  clock  clock  clock  clock  clock  clock  clock   O
  059   fkey01 fkey13 fkey25 fkey37 scr01  scr11  scr01  scr11   O
  060   fkey02 fkey14 fkey26 fkey38 scr02  scr12  scr02  scr12   O
  061   fkey03 fkey15 fkey27 fkey39 scr03  scr13  scr03  scr13   O
  062   fkey04 fkey16 fkey28 fkey40 scr04  scr14  scr04  scr14   O
  063   fkey05 fkey17 fkey29 fkey41 scr05  scr15  scr05  scr15   O
  064   fkey06 fkey18 fkey30 fkey42 scr06  scr16  scr06  scr16   O
  065   fkey07 fkey19 fkey31 fkey43 scr07  scr07  scr07  scr07   O
  066   fkey08 fkey20 fkey32 fkey44 scr08  scr08  scr08  scr08   O
  067   fkey09 fkey21 fkey33 fkey45 scr09  scr09  scr09  scr09   O
  068   fkey10 fkey22 fkey34 fkey46 scr10  scr10  scr10  scr10   O
  069   nlock  nlock  nlock  nlock  nlock  nlock  nlock  nlock   O
  070   slock  slock  slock  slock  slock  slock  slock  slock   O
  071   fkey49 '7'    '7'    '7'    '7'    '7'    '7'    '7'     N
  072   fkey50 '8'    '8'    '8'    '8'    '8'    '8'    '8'     N
  073   fkey51 '9'    '9'    '9'    '9'    '9'    '9'    '9'     N
  074   fkey52 '-'    '-'    '-'    '-'    '-'    '-'    '-'     N
  075   fkey53 '4'    '4'    '4'    '4'    '4'    '4'    '4'     N
  076   fkey54 '5'    '5'    '5'    '5'    '5'    '5'    '5'     N
  077   fkey55 '6'    '6'    '6'    '6'    '6'    '6'    '6'     N
  078   fkey56 '+'    '+'    '+'    '+'    '+'    '+'    '+'     N
  079   fkey57 '1'    '1'    '1'    '1'    '1'    '1'    '1'     N
  080   fkey58 '2'    '2'    '2'    '2'    '2'    '2'    '2'     N
  081   fkey59 '3'    '3'    '3'    '3'    '3'    '3'    '3'     N
  082   fkey60 '0'    '0'    '0'    '0'    '0'    '0'    '0'     N
  083   del    '.'    '.'    '.'    '.'    '.'    boot   boot    N
  084   nop    nop    nop    nop    nop    nop    nop    nop     O
  085   nop    nop    nop    nop    nop    nop    nop    nop     O
  086   '<'    '>'    nop    nop    '|'    nop    nop    nop     O
  087   fkey11 fkey23 fkey35 fkey47 scr11  scr11  scr11  scr11   O
  088   fkey12 fkey24 fkey36 fkey48 scr12  scr12  scr12  scr12   O
  089   cr     cr     nl     nl     cr     cr     nl     nl      O
  090   rctrl  rctrl  rctrl  rctrl  rctrl  rctrl  rctrl  rctrl   O
  091   '/'    '/'    '/'    '/'    '/'    '/'    '/'    '/'     N
  092   nscr   pscr   debug  debug  nop    nop    nop    nop     O
  093   ralt   ralt   ralt   ralt   ralt   ralt   ralt   ralt    O
  094   fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49  O
# Alt+Arrow up = Page up
  095   fkey50 fkey50 fkey50 fkey50 fkey51 fkey50 fkey50 fkey50  O
  096   fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51  O
# Alt+Arrow left = Home
  097   fkey53 fkey53 fkey53 fkey53 fkey49 fkey53 fkey53 fkey53  O
# Alt+Arrow right = End
  098   fkey55 fkey55 fkey55 fkey55 fkey57 fkey55 fkey55 fkey55  O
  099   fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57  O
# Alt+Arrow down = Page down
  100   fkey58 fkey58 fkey58 fkey58 fkey59 fkey58 fkey58 fkey58  O
  101   fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59  O
  102   fkey60 paste  fkey60 fkey60 fkey60 fkey60 fkey60 fkey60  O
  103   fkey61 fkey61 fkey61 fkey61 fkey61 fkey61 boot   fkey61  O
  104   slock  saver  slock  saver  susp   nop    susp   nop     O
  105   fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62  O
  106   fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63  O
  107   fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64  O
  108   nop    nop    nop    nop    nop    nop    nop    nop     O

Same compressed with bzip -9z:

begin 0 nordic_eee900.kbd.bz2
M0EIH.3%!62936?2"?QP`"#7_G_$P"`!_______________\``0,``0`!1($@
M`,1@"$YH^>YAZWM3C&[S8.V6/8`#0)2*FGIJ!H&@&@``R:-&@:`8 at T!D``'J
M>"FF"#4](&U($E-,1CU!D``FF```$8````1@`-(VJ,J/4R`9&@```T`#0!D`
M```:```)-2BC)ZIZGJ?HD```````$8`F$9&:`"8``<`#330`&0``#0``#0``
M,@`!H:`"1)`"8$4\0283(R9-`#1H`::```-,0&C1H:01`!`O\F2B5%`TI(MW
MWK/97[VK&"0M$%D]:2%>4>%FR!SX1D4\CA\%8T#7MK=!58+X_1IR$"0GDVI-
M$@2DA2``HH5H5`X*`<!@(3)!)WY)]:LJYUF\)N#$6,/[6A*%Y`GYVX67#X=-
M"%V`:R6"BXT4R(XZ')0Y*'0P&2T4O2Y',AEL'+0ICB8V4`(W5+TO;'*AF01B
M)`QU3$4&,%%8R+`CC1Q4&>JVZ!NC.!M=NFI_AR>UCS.WNW:7;L(TU<C"<SST
M(W2K0I]SI8#:)#$;`L,9QHD:&PG)U.#4ZT-A.*6PEL#G0I%A545-,D25:T,;
M),IU9*F%BM>U[WM@?`Y[G0Q4TXI*J:5'?/JZ6=6>UUKK"ULAIKG8OH8/&S*3
MX886)K.M*UE&L34((((7.[M&$(UF=4]JVEF%<+0AJKKXG&0DCR4)":7HJD@`
MFU:KY9:KK:LIYJ;-5!HDY##M,;`"9B6M)DZ3%,T*23)%5M=M^O4L%>L%6BM%
M965E9=<[HS at 41ILXA3!2RUK4S%XO'"#!X.9TO%I"ST#-H;%A,)*]B0'RH$94
M$K@]!F;/7HZ/;7=:\_&B3_*#$A6JH:);J`CQH%DPM5>P1+GS0$FI@`@@&@<<
MOHP<3J:12T<7Y6R$J:6CHZ.O_;2TM at DDDDDDDDDDDDE6Q$#-V+LT*JJ)18LM
M:,U;JJ--42KES*J5542L"@U2BQ**DG8D_$?2P@`PY_/X$ID@=U\D!1,E$SV]
MS&]P-[>R]E[,C,K"YA<R&(2'8JM-EOTV;MQT1(=3;&L\\\LL=?7%6^$7N"[`
M>Z+:]XKQ7BO%O%@+`50L!8"MX^K<^KCA\!W.:><<XY/./+.2>:?1JF82<HUH
MS^P1GL\BC^_*(YMC8Y,=4]I4G*=6M-F6/#)]#U)'L.G&-$X_!LG#Q:UFA\H#
MPX0W3`[G*#COK+F]U'PI.//^/Q_1Z>G#NJ_\@%M<T/>CV?=5LU6QL9IE2H5J
MS334O=;;:>>>=BY5S]5COZ)\[*%`6"HP6"K`6"HD1(B18*B1$B)$2(P%D@"*
MJBK]E55192*HJK34*1)N4NM`B$`P.V?6E^/:_?Z:.EW8`KW*!3:\Y".`=?YW
M^8?'%?QK-5GEGOQ&MUSSI`ME%6D(3$+9@!:IMIH`)BGM$@A`202B!202$"D@
MD("2"0@)()"`J6(2$!4L0K80!`T@%0 at HZ4"-0T$>*,HBCXV2E7/)MD2E*FJ<
M"=%6`%U5X7R02D*40*)1B(IHF)8LS!M9"8E$G/*,6&8#"^>%I##+*F6:=)$D
M)F=3A"N8`4PR9L6:(9B69CH,QM:,69B,H6-KY7U<8OEDSS<,6J\A"<(+(`5O
M))))))))Y>:,:8P-S2M=:8I?ACBIT81+.IP at L0!2\DDDDFC,2<68B`3/.J5]
M]97IHABSJ0 at KP!2X`*050%4!5(*`I"^W16W68;KG%@Q8;IX(HB44U7`3W`-I
M- at 41`$$0`R&V6647>BE6Y[I(P-[.\@!:UX`H("Z@:5:1K.EUUU*&!+UB()&P
M`I"A`!,J)HTG&,JNGM)5 at S,IR`F`KL`HUM%+;78FJNSD[X32!\>/#-,`V,)L
MT%$&48M/(?<&1BC86P3N7;VVT1'F-"(I,Y*1,`35MA94DSFD6UJ$8EC5E$IB
ML06U1!%#?5,TL*$@H*%)+P%A$46XU8A198Z3'(F9C5(-A`1("(R at X/L85=^S
MK\,>@/]6-/ODVLM.]D$-\$0R$<I6)4&?4`,ZJ at HMV^1`,0G.!X&$]U,B"&B0
M at 5FT!I5EQG2`6UPQUCI82,=F=H78RH[^YWY7:%2<=6T[L^::;RR'3"7\'<'"
M,!@;D@$=9_X&W(LH'2 at 0'@8"EPH,VDV at TXE402)J(**S;MW5C%XP-)/574HW
MG-H"DER.4 at 6TG.X65>%PUV%YHQM(4'H5;1`(Z>PHV[6Q,NB'"1B)%@RL`S!J
MF?*$H2A!(#4".F"*PKK.IORSE4F-N'@Z2>-I7V9&Y3,;1J`B&("$-`FQ)- at F
MQ$-(AA&E"NGR"A%^(71RTA3T3GYRYBUI"`[/Z1U[[VF7!N-\DA`7+O2QE@;=
MD4W*@Q$KB:4@!3 at 5,":F\EOY8"K.:8AQ!0!7K2QX>.6JS$RZ%A,D\)32`%1I
MP\&,YPR2DE+BF'`)P-E\S[3.M`IAAPY1B.SV]E!4:L4DSR*R*#DX:2C9&A,$
M-:S=L#5&>F\`9QC91.QMY6P%:H1,93+U:"TMV4#R"<Y%<C at 2F.4R]"!%P;W)
2>PP531KB%_XNY(IPH2'I!/XX
`
end


Useful application to find the keys:
/*
google: KDSKBMODE K_CODE

Original code found on freebsd-hackers mailing list in 2000:
  http://docs.freebsd.org/cgi/getmsg.cgi?fetch=337902+0+archive/2000/freebsd-hackers/20000109.freebsd-hackers
  http://www.mavetju.org/mail/view_message.php?list=freebsd-hackers&id=728901
*/
#include <fcntl.h>
#include <stdio.h>
#include <termios.h>
#include <errno.h>

#include <sys/kbio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int                   fd;
  unsigned char         onecode, keybuf[2];
  int                   oldmode;
  int                   newmode = K_CODE;
  struct termios        old_t, new_t;
  int                   rr;
 
  if (argc > 1 && strcmp(argv[1], "-k") == 0)
    newmode = K_CODE;
 
  if ((fd = open("/dev/ttyv0", O_RDWR)) < 0) {
    (void) fprintf(stderr, "/dev/kbd0: %s\n", strerror(errno));
    exit(1);
  }
  if (ioctl(fd, KDGKBMODE, &oldmode) < 0) {
    (void) fprintf(stderr, "KDGKBMODE: %s\n", strerror(errno));
    exit(1);
  }
  printf("Old mode is %d\n", oldmode);
  if (tcgetattr(fd, &old_t) != 0) {
    (void) fprintf(stderr, "tcgetattr: %s\n", strerror(errno));
    exit(1);
  }
  new_t = old_t;
  cfmakeraw(&new_t);
  if (tcsetattr(fd, 0, &new_t) != 0) {
    (void) fprintf(stderr, "tcsetattr: %s\n", strerror(errno));
    exit(1);
  }
 
  if (ioctl(fd, KDSKBMODE, newmode) < 0) {
    (void) tcsetattr(fd, 0, &old_t);
    (void) fprintf(stderr, "KDSKBMODE: %s\n", strerror(errno));
    exit(1);
  }
 
  printf("Keycodes as in the leftmost column in /usr/share/syscons/keymaps/*.kbd\r\n");
  printf("Quit with key 'q'\r\n\n");
 
   for(;;){
    read(fd, &keybuf[0], 1);
    read(fd, &keybuf[1], 1);
    printf("%03d  (0x%02X)\r\n",        // \r needed due raw mode
      (unsigned)keybuf[1], (unsigned)keybuf[1] );

    // If key == 'q' then quit
    //
    if(  keybuf[0] == 16 || keybuf[1] == 16  )
      break;
    }

  if(  rr < 0  ) {
    (void) fprintf(stderr, "keyboard read: %s\r\n", strerror(errno));
    }

  (void) tcsetattr(fd, 0, &old_t);
  if (ioctl(fd, KDSKBMODE, oldmode) < 0) {
    (void) fprintf(stderr,
                   "Danger, Will Robinson! Can't restore keyboard: %s\n",
                   strerror(errno));
    exit(1);
  }

  exit(0);
}

>How-To-Repeat:
Buy an eee ;)
>Fix:
Don't buy an eee.

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list