Hi lianzhi, On Thu, Oct 14, 2021 at 03:16:27PM +0800, lianzhi chang wrote: > Switching from the desktop environment to the tty environment, > the state of the keyboard led lights and the state of the keyboard > lock are inconsistent. This is because the attribute kb->kbdmode > of the tty bound in the desktop environment (xorg) is set to > VC_OFF, which causes the ledstate and kb->ledflagstate > values of the bound tty to always be 0, which causes the switch > from the desktop When to the tty environment, the LED light > status is inconsistent with the keyboard lock status. > > Signed-off-by: lianzhi chang <changlianzhi@xxxxxxxxxxxxx> > --- > drivers/input/input.c | 7 ++++++- > drivers/tty/vt/keyboard.c | 30 +++++++++++++++++++++++++++++- > include/linux/kbd_kern.h | 2 ++ > 3 files changed, 37 insertions(+), 2 deletions(-) > > diff --git a/drivers/input/input.c b/drivers/input/input.c > index ccaeb2426385..43c09700bf68 100644 > --- a/drivers/input/input.c > +++ b/drivers/input/input.c > @@ -25,6 +25,7 @@ > #include <linux/rcupdate.h> > #include "input-compat.h" > #include "input-poller.h" > +#include <linux/kbd_kern.h> > > MODULE_AUTHOR("Vojtech Pavlik <vojtech@xxxxxxx>"); > MODULE_DESCRIPTION("Input core"); > @@ -472,8 +473,12 @@ void input_inject_event(struct input_handle *handle, > > rcu_read_lock(); > grab = rcu_dereference(dev->grab); > - if (!grab || grab == handle) > + if (!grab || grab == handle) { > input_handle_event(dev, type, code, value); > + > + if (type == EV_LED && code < LED_SCROLLL) > + update_value_ledstate(code, value); No, we should not be putting hooks for tty/vt directly into input core. The code in drivers/tty/vt/keyboard.c is getting all relevant input events and should be able to keep the led state synchronized. Please keep all the changes localized there. Thanks. -- Dmitry