Re: [PATCH v15] tty: Fix the keyboard led light display problem

From: Andy Shevchenko
Date: Fri Nov 26 2021 - 04:57:40 EST


On Fri, Nov 26, 2021 at 10:44:23AM +0800, lianzhi chang wrote:
> When the desktop and tty switch mutually, the led state of the
> keyboard may be inconsistent with the state of the keyboard lock.
> This is because the desktop environment (Xorg, etc.) is bound to
> a tty, and the kb->kbdmode attribute of this tty is set to VC_OFF.
> This leads to the fact that in the desktop environment, the bound
> tty will not set the keyboard light state, so in the current tty
> scene, the values of ledstate and kb->ledflagstate are always 0.
> This leads to two situations: (1) When switching from the desktop
> to another tty, the code inside VT still compares ledstate with
> the kb->ledflagstate of the next tty. If they are equal, then
> after the switch is completed, The keyboard light will maintain
> the state of the previous desktop settings, and the state of the
> keyboard lock may be inconsistent; (2) When switching from another
> tty to the desktop, according to the code logic, it may still
> trigger the desktop bound tty to set the keyboard light state.
> After the switch is completed, the keyboard light is forcibly
> turned off. I think in this case, the tty should not set the
> keyboard light, and give control to Xorg etc. to handle it.
> The current modification judges the value of kb->kbdmode.
> In some modes, when switching VT, the current tty keyboard
> light status is forcibly issued. And when switching to the
> desktop, the tty no longer sets the keyboard light.
>
> Signed-off-by: lianzhi chang <changlianzhi@xxxxxxxxxxxxx>

> Suggested-by: dmitry.torokhov <dmitry.torokhov@xxxxxxxxx>

I guess I have told you at least a couple of times that the format of these
lines should follow the pattern, where it's "Real Name <real@xxxxxxxxx>".
I truly believe there is no guy with _real_ name "dmitry.torochov".

...

> /*
> * Notifier list for console keyboard events

(1)

> @@ -412,9 +413,20 @@ static void do_compute_shiftstate(void)
> /* We still have to export this method to vt.c */
> void vt_set_leds_compute_shiftstate(void)
> {

> + /* When switching VT, according to the value of kb->kbdmode,
> + * judge whether it is necessary to force the keyboard light
> + * state to be issued.
> + */

Is it too hard to be consistent? See (1).

--
With Best Regards,
Andy Shevchenko