Spontaneous numlock
#51
Fn plus one of the top row keys turns off the touchpad. Not sure which key but it's marked as such.

So if you did that without holding Fn, I'd say surely your Fn key is stuck on.
  Reply
#52
I was carefully pushing Fn, then a key, then letting up the key, then Fn because I was trying to see the Fn key.  And redirecting the output to a file so I wasn't actually seeing anything.  And I had rebooted and done this before I started X.

Code:
kb mode was UNICODE
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
0x9c
0x7d 0x19
0x19 0x99 0xfd
0x71
0x71 0xf1
0x72
0x72 0xf2
0x73
0x73 0xf3
0x6e
0x6e 0xee
0x45
0x45 0xc5
0x46
0xc6
0x77
0x77 0xf7
0x45
0x45 0xc5
But I don't see a scancode for Fn.  There should be one hex number that's in all of them and there isn't..  I'm not sure what the pairings of scancodes are, maybe press and release.

Fn isn't stuck on, I use the F9 key all the time in mc.  And shift-Fn-insert to paste.  I let the laptop sit turned off and went back t0 sleep, when I got up it was OK.
  Reply
#53
I don't know, it's not so bad I guess so I'll mark it solved. My numlock is controlled by other keys but that's a matter of having the wrong mapping. If you look in /usr/share/X11 much of it deals with locales and keytboard layouts which are interrelated in strange ways I'm not going to study or try to make sense of. This isn't an off-the-shelf Keytronics or Apple or IBM keyboard. So unless somebody took time to make up a keymap it'll probably always be a little off. My numlock didn't turn itself on, I hit some key that did it, but not the one marked NumLock because that does something different.
  Reply
#54
My head is spinning trying to follow this thread.

What I can gather (barely) is that you get the same results on different operating systems, with different U-boots. So the problem is in the keyboard itself. It's either the keyboard firmware, or the keyboard switches.

Please do this simple test (for my sake):
Run xev. Press F9, then F10, F11, and F12, by themselves, and report just the keycode.
I get 75, 76, 95, and 96, respectively. Next, press Fn+F9, then Fn+F10, Fn+F11, and Fn+F12. I get 111, 77, 78, and 110. What do you get for these?

To make this clearer:
Code:
F9       75
F10      76
F11      95
F12      96
Fn+F9   111
Fn+F10   77
Fn+F11   78
Fn+F12  110
  Reply
#55
OK, I tried that.  But what you can't tell from this is that where it says scroll lock I was actually pressing num lock.  It did log num lock a few times but I was pressing something else.  I more or less started with F9 and went through F12, a few times.  I pressed Esc between.  I had 3 rxvt windows open, one for xev, one to paste into later, and one to pkill xev.  I used the Shift-Fn-Pageup to backscroll up, then point-click, shift and drag down to get the whole thing highlighted, then clicked in the log window and did shift-fn-insert to paste.  The F8/insert key seems normal.  Then I saved as text, copied to /tmp, opened in Firefox and copied and pasted here.

Code:
KeymapNotify event, serial 44, synthetic NO, window 0x0,
    keys:  68  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 

PropertyNotify event, serial 44, synthetic NO, window 0x4e00001,
    atom 0x18d (_NET_WM_ICON_GEOMETRY), time 75841993, state PropertyNewValue

PropertyNotify event, serial 45, synthetic NO, window 0x4e00001,
    atom 0x18d (_NET_WM_ICON_GEOMETRY), time 75842108, state PropertyNewValue

PropertyNotify event, serial 45, synthetic NO, window 0x4e00001,
    atom 0x18d (_NET_WM_ICON_GEOMETRY), time 75842162, state PropertyNewValue

KeyPress event, serial 45, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75848254, (-1276,-458), root:(463,398),
    state 0x0, keycode 75 (keysym 0xffc6, F9), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75848374, (-1276,-458), root:(463,398),
    state 0x0, keycode 75 (keysym 0xffc6, F9), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75858102, (-1276,-458), root:(463,398),
    state 0x0, keycode 75 (keysym 0xffc6, F9), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75858230, (-1276,-458), root:(463,398),
    state 0x0, keycode 75 (keysym 0xffc6, F9), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75898582, (-1276,-458), root:(463,398),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
    XmbLookupString gives 1 bytes: (1b) "
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75898702, (-1276,-458), root:(463,398),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75916213, (-1276,-458), root:(463,398),
    state 0x0, keycode 75 (keysym 0xffc6, F9), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75916325, (-1276,-458), root:(463,398),
    state 0x0, keycode 75 (keysym 0xffc6, F9), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75928365, (-1276,-458), root:(463,398),
    state 0x0, keycode 76 (keysym 0xffc7, F10), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75928493, (-1276,-458), root:(463,398),
    state 0x0, keycode 76 (keysym 0xffc7, F10), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75944221, (-1276,-458), root:(463,398),
    state 0x0, keycode 95 (keysym 0xffc8, F11), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75944381, (-1276,-458), root:(463,398),
    state 0x0, keycode 95 (keysym 0xffc8, F11), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75950637, (-1276,-458), root:(463,398),
    state 0x0, keycode 96 (keysym 0xffc9, F12), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75950709, (-1276,-458), root:(463,398),
    state 0x0, keycode 96 (keysym 0xffc9, F12), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75958869, (-1276,-458), root:(463,398),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
    XmbLookupString gives 1 bytes: (1b) "
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75958957, (-1276,-458), root:(463,398),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75965285, (-1276,-458), root:(463,398),
    state 0x0, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75965397, (-1276,-458), root:(463,398),
    state 0x10, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75968045, (-1276,-458), root:(463,398),
    state 0x10, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75968173, (-1276,-458), root:(463,398),
    state 0x10, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75970533, (-1276,-458), root:(463,398),
    state 0x10, keycode 127 (keysym 0xff13, Pause), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75970677, (-1276,-458), root:(463,398),
    state 0x10, keycode 127 (keysym 0xff13, Pause), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75974109, (-1276,-458), root:(463,398),
    state 0x10, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 75974261, (-1276,-458), root:(463,398),
    state 0x10, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76023356, (-1276,-458), root:(463,398),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
    XmbLookupString gives 1 bytes: (1b) "
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76023452, (-1276,-458), root:(463,398),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76029892, (-1276,-458), root:(463,398),
    state 0x0, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76030052, (-1276,-458), root:(463,398),
    state 0x10, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76032044, (-1276,-458), root:(463,398),
    state 0x10, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76032196, (-1276,-458), root:(463,398),
    state 0x10, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76033884, (-1276,-458), root:(463,398),
    state 0x10, keycode 127 (keysym 0xff13, Pause), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76034100, (-1276,-458), root:(463,398),
    state 0x10, keycode 127 (keysym 0xff13, Pause), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76035700, (-1276,-458), root:(463,398),
    state 0x10, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76035852, (-1276,-458), root:(463,398),
    state 0x10, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76038468, (-1276,-458), root:(463,398),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76038804, (-1276,-458), root:(463,398),
    state 0x4, keycode 54 (keysym 0x63, c), same_screen YES,
    XLookupString gives 1 bytes: (03) ""
    XmbLookupString gives 1 bytes: (03) ""
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76038876, (-1276,-458), root:(463,398),
    state 0x4, keycode 54 (keysym 0x63, c), same_screen YES,
    XLookupString gives 1 bytes: (03) ""
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76039276, (-1276,-458), root:(463,398),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

FocusOut event, serial 48, synthetic NO, window 0x4e00001,
    mode NotifyNormal, detail NotifyNonlinear

PropertyNotify event, serial 48, synthetic NO, window 0x4e00001,
    atom 0x18d (_NET_WM_ICON_GEOMETRY), time 76049291, state PropertyNewValue
Terminated
root@pbp:/data/mp3/Pink_Floyd#
=======================================
KeymapNotify event, serial 43, synthetic NO, window 0x0,
    keys:  68  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 

PropertyNotify event, serial 44, synthetic NO, window 0x4e00001,
    atom 0x18d (_NET_WM_ICON_GEOMETRY), time 76621652, state PropertyNewValue

PropertyNotify event, serial 45, synthetic NO, window 0x4e00001,
    atom 0x18d (_NET_WM_ICON_GEOMETRY), time 76621753, state PropertyNewValue

KeyPress event, serial 45, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76635623, (728,-67), root:(731,425),
    state 0x0, keycode 76 (keysym 0xffc7, F10), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76635791, (728,-67), root:(731,425),
    state 0x0, keycode 76 (keysym 0xffc7, F10), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76640839, (728,-67), root:(731,425),
    state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76640959, (728,-67), root:(731,425),
    state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

FocusOut event, serial 48, synthetic NO, window 0x4e00001,
    mode NotifyNormal, detail NotifyNonlinear

PropertyNotify event, serial 48, synthetic NO, window 0x4e00001,
    atom 0x18d (_NET_WM_ICON_GEOMETRY), time 76653986, state PropertyNewValue
Terminated
root@pbp:/data/mp3/Pink_Floyd#
===================================== again, just numlock
KeyPress event, serial 45, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76788156, (728,-80), root:(731,412),
    state 0x0, keycode 76 (keysym 0xffc7, F10), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76788244, (728,-80), root:(731,412),
    state 0x0, keycode 76 (keysym 0xffc7, F10), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76793821, (728,-80), root:(731,412),
    state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 48, synthetic NO, window 0x4e00001,
    root 0x22b, subw 0x0, time 76793933, (728,-80), root:(731,412),
    state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

FocusOut event, serial 48, synthetic NO, window 0x4e00001,
    mode NotifyNormal, detail NotifyNonlinear

PropertyNotify event, serial 48, synthetic NO, window 0x4e00001,
    atom 0x18d (_NET_WM_ICON_GEOMETRY), time 76801809, state PropertyNewValue
Terminated

The KeymapNotify with zeroes is a start of an xev run. When I press Fn by itself nothing gets logged in xev. This was all F9 to F12 except Esc between to mark run ends.

I think it's a matter of keymaps, because there are 3 levels at least. There's one set by locale (I'm using C.UTF-8), then one by "keyboard model" (I'm using "Generic 105key PC (int)") then a 3rd by "keyboard layout" (I'm using English (US)). Not Cherokee, dvorak, etc.

Using dpkg-reconfigure locales which brings up a Whiptail dialog box like when you install or like raspi-config gets you. I have a few Raspberry Pi computers too and Raspbian is mostly like Debian.

I think if you open up a PBP and write down the numbers on the back of the keyboard, then Google them you might be able to find a manufacturer's data sheet that will list raw hardware scan codes. I think I've seen them for other keyboards. I'm not sure I trust what xev says, I'd rather trust showkey -s because that doesn't need X running. My Numlock key, shifted with Fn, gives me 0x46 0xC6 each time I push it. That's 70, 198 in decimal. I see the same thing if I ctrl-alt-f2 and look at a raw console without X. That 70 should probably be 71 or 72 to be NumLock.
  Reply
#56
If I'm reading that right, all your presses without Fn are the same as mine. In that case your keyboard switches and scanning hardware/software is all correct. But your Fn presses are different. I'm not sure if the operating system can change that; I don't know what level the keycodes come from. It could be anywhere between the keyboard firmwear to the operating system. If you choose a different keyboard layout for the operating system, either the keycodes will change or be the same. I'll try this later if I get a chance.

I have been unsuccessful trying. I cannot make my keyboard layout change within X to use xev. But at this point, I'd recommend reflashing the keyboard firmware. My best initial guess is that's where the problem lies.
  Reply
#57
Having more fun, in /etc/default (in Debian anyway) are files keyboard and locale among others.  I changed my locale to en_GB.UTF-8 as a test but in the keyboard file XKBLAYOUT is still "us".  I thought those were linked.  At one point I had a GB layout and the # key printed the Pounds Sterling symbol.  XKBVARIANT and XKBOPTIONS are both empty ("").  But XKBMODEL is pc105, so that's where that comes from.  There are 78 keys, not 105.

Try apropos keyboard.  There's an xkbprint (with a man page) which is supposed to print the layout for any compiled .xkm file.  But locate doesn't find any.  You can enable symbols (or codes?).  Man page from 1998 though.   This stuff has been around for 40 years but much has been gutted.

There's xkbcomp which is a compiler that makes .xkm files from .xkb.  /usr/share/X11/xkb might have some, but no, there are none.  Obsolete I guess.

In Debian xev is in a package called x11-utils.  There's another, x11-xkb-utils hat has xkbprint, also xkbwatch which lights up on modifier keys.

Keycodes are supposed to be changeable, scancodes shouldn't be, they should come from the hardware.  They get processed through the mapping and become keycodes.  Except I've also seen something about sometimes the mapping provides scancodes by working backwards.  I've got to open this thing up to fix the hinge sometime soon.  Usually there are rows of wires going one way and columns of wires going the other, when you press a key it connects a row to a column, that should give a scancode.

Like this: https://www.dribin.org/dave/keyboard/one_html/  What's wired isn't going to be changeable by software.

One of my first computers was an Interact 8080, which had really cheap keys that acted up after a month or so. So I got this industrial grade surplus keyboard and hooked it up on a big fat cable. Painted the keycaps white, lettered them with ink, put varnish over them. I learned how keyboards work.

Code:
From man 7 X:

KEYBOARDS
       The X keyboard model is broken into two layers:  server-specific  codes
       (called  keycodes)  which represent the physical keys, and server-inde‐
       pendent symbols (called keysyms) which represent the letters  or  words
       that  appear  on  the keys.  Two tables are kept in the server for con‐
       verting keycodes to keysyms:

       modifier list
               Some keys (such as Shift, Control, and Caps Lock) are known  as
               modifier  and are used to select different symbols that are at‐
               tached to a single key (such as Shift-a generates a capital  A,
               and  Control-l  generates  a control character ^L).  The server
               keeps a list of keycodes corresponding to the various  modifier
               keys.  Whenever a key is pressed or released, the server gener‐
               ates an event that contains the keycode of the indicated key as
               well  as  a  mask that specifies which of the modifier keys are
               currently pressed.  Most servers set up this list to  initially
               contain  the various shift, control, and shift lock keys on the
               keyboard.

       keymap table
               Applications translate event keycodes and modifier  masks  into
               keysyms  using  a  keysym table which contains one row for each
               keycode and one column for various modifier states.  This table
               is initialized by the server to correspond to normal typewriter
               conventions.  The exact semantics of how the  table  is  inter‐
               preted  to  produce  keysyms depends on the particular program,
               libraries, and language input method used,  but  the  following
               conventions  for  the first four keysyms in each row are gener‐
               ally adhered to:

       The first four elements of the  list  are  split  into  two  groups  of
       keysyms.   Group  1 contains the first and second keysyms; Group 2 con‐
       tains the third and fourth keysyms.  Within each group,  if  the  first
       element  is alphabetic and the the second element is the special keysym
       NoSymbol, then the group is treated as equivalent to a group  in  which
       the first element is the lowercase letter and the second element is the
       uppercase letter.

       Switching between groups is controlled by the keysym named MODE SWITCH,
       by  attaching that keysym to some key and attaching that key to any one
       of the modifiers Mod1  through  Mod5.   This  modifier  is  called  the
       ``group  modifier.''   Group  1 is used when the group modifier is off,
       and Group 2 is used when the group modifier is on.

       Within a group, the modifier state determines which keysym to use.  The
       first  keysym  is  used when the Shift and Lock modifiers are off.  The
       second keysym is used when the Shift modifier is on, when the Lock mod‐
       ifier  is on and the second keysym is uppercase alphabetic, or when the
       Lock modifier is on and is interpreted as ShiftLock.   Otherwise,  when
       the  Lock  modifier  is on and is interpreted as CapsLock, the state of
       the Shift modifier is applied first to select a  keysym;  but  if  that
       keysym is lowercase alphabetic, then the corresponding uppercase keysym
       is used instead.
  Reply
#58
Your keyboard wiring cannot be wrong based on what you've reported.

If software says it's a hardware problem, which I suspect is true, then the problem must be in the firmware.

Have you ever updated the firmware?  That is, are you still using the firmware that was installed when the keyboard was in possession of Pine 64?

(By the way, the difference between the keyboard in the PBP and the keyboard for your Interact 8080 is a layer of hardware abstraction. It is achieved by a microprocessor inside the keyboard unit. The famous analogy is the 6502 hidden inside Amiga keyboards. But most common keyboards since long before that had a microprocessor in the keyboard for this purpose.)
  Reply
#59
This Interact: http://www.oldcomputers.net/interact.html  I don't think I tried to take the keyboard apart but I've since fixed remotes with the same sort of keyboard.  There's a circuit board with contacts.  Another sits on top of it and has bubbles in plastic with contacts at the top, when you push a button the bubble flattens so the bubble's contacts touch the lower board.  If you take them apart and clean the contacts with alcohol you can usually get them working again, for a while.  This was 1980s.

Yes, firmware updated in December.  And it says this:
Code:
When done, if some of the keys produce incorrect characters, please check
your OS’s language settings.  For ANSI users, the default OS shipped with
English UK as the default language.  You can change it to English US if
desired.
So software settings can affect the characters typed.

I haven't done this, which I think is just for the brightness keys, since I went from mrfixit Stretch to the Daniel Thompson Bullseye.  https://github.com/ayufan-rock64/linux-package  Looks like the fix lives in your eMMC or sd card so it would be only on the eMMC.  I have nothing in /etc/udev/hwdb.d
  Reply
#60
The Interact, like many other computers of the time, used the main CPU for keyboard decoding. But keyboards with separate processors built in for decoding were already in use, and are the norm now. I don't know when keyboards started having dedicated microprocessors. But for a time, RS232 terminals and then keyboards were the norm, and every RS232 terminal or keyboard has some kind of processing, discreet component or microprocessor based.

You could probably fix this problem in software. But you shouldn't have to; it's an error in the firmware. I would try a different version of it. I wonder if it's possible to revert to an earlier version. I thought someone had an open source one that you could modify at will. That might be the way to go.

If you fix this problem in the operating system, you will have to do that for every operating system that you might use, now and in the future.
  Reply


Forum Jump:


Users browsing this thread: 35 Guest(s)