Magic Sysreg key problems.

Marko Vojinovic vvmarko at gmail.com
Thu Aug 23 09:59:12 UTC 2012


On Wednesday, 22. August 2012. 15.05.05 Joe Zeff wrote:
> On 08/22/2012 02:17 PM, jdow wrote:
> > Even with the reminders I've seen people keep forgetting that most
> > modern keyboards are two key roll-over keyboards. The keys are matrix
> > scanned in a fashion that any two keys pressed at the same time can
> > be detected but more than two keys pressed at the same time is very
> > iffy. You guys may be fighting an inherent keyboard problem rather
> > than an OS deficiency.
> 
> That may be why some of the instructions for this call for pressing
> Alt-SysRq (pause) Command, and why I've had best luck with pressing the
> keys one at a time and holding them down until all are pressed.

Umm, no, you are *supposed* to keep them pressed. The problem with two-key 
rollover keyboard is that it will not detect a third keypress until one of the 
previous two was released. And that is the dealbreaker in using the MagicSysRq 
functionality.

It is a good thing to understand how this sysrq thing actually works, and for 
that one needs to know how a keyboard actually works (on a fairly low level).

When a key is pressed, the press-scancode of that key is sent to the keyboard 
buffer. When the key is released, the release-scancode of that key is sent. 
Note that press-scancode and release-scancode are different things. If you 
press the key and keep it pressed, eventually the keyboard-repeat 
functionality kicks in, and the press-scancode starts being sent over and 
over. All keys on the keyboard work that way (and I mean *all*, bar maybe the 
"Fn" key on some laptops).

The press- and release-scancodes in the keyboard buffer are being interpreted 
by the kernel, translated via a table into keypress/keyrelease combinations, 
and then sent down to everything else, including X and stuff. Now, the kernel 
can react (independently of anything else) to some specific scancode 
combinations, before any other app even gets the idea that something was 
pressed on the keyboard. That's where the MagicSysRq functionality kicks in.

The trick is that this specific scancode combo that needs to be sent to the 
kernel needs to be convoluted enough so that it cannot occur accidentally. 
Therefore, it is a sequence of *press-scancodes*, corresponding to the 
combinations such as ctrl+alt+sysrq+b, and no release-scancodes in between. 
This means the following:

(1) you need to press the buttons in *that* particular *order* , one by one,
(2) you must not release any of them until all have been pressed,
(3) you must be fast enough so that keyboard-repeat doesn't kick in (most 
commonly this means faster than 1/4 of a second),
(4) your keyboard hardware must be able to detect four keys pressed in a row 
(without releasing any of them).

Various cheap keyboards cannot satisfy (4), various people are not fast enough 
for (3), and various instruction manuals do not emphasize (1) and (2) well-
enough.

In addition to this, note that left-ctrl/shift/alt have *different* scancodes 
than right-ctrl/shift/alt. I am not sure if the kernel is designed to watch 
out for all combinations (ll, lr, rl, rr), nor the interchange in order of 
ctrl and alt. So it is best to try out all combinations, to be certain.

Finally, the "b" key is where "b" is meant to be on a QWERTY keyboard. If you 
have a keyboard with a different layout (DVORAK for example), this key will 
likely be labbeled as something else, so watch out for that.

There is a nice table with all keys and their functions in sysrq mode here:

  http://en.wikipedia.org/wiki/Magic_SysRq_key

As a side note, I've also seen keyboards with a spacebar that has two "key"-
mechanisms beneath (on the left and right side), so that two different press-
scancodes are being sent when you press the spacebar, detecting whether you 
have pressed it from the left or right side. This was exploited in some 
pinball games, with options "kick the pinball machine with the left/right 
foot" were simulated by pressing the spacebar from the left or from the 
right... ;-)

If you want to experiment with scancodes and keycodes, read "man showkey" and 
try it out in the text terminal (outside X).

HTH, :-)
Marko




More information about the users mailing list