Измените состояние светодиодов клавиатуры, начиная с X сеанса, без доступа root

Я пытаюсь заставить капота привести. xset не работает для меня, поэтому я пытаюсь использовать setleds .

В графической консоли эта команда возвращает:

 > LANG=C setleds -L +caps KDGKBLED: Inappropriate ioctl for device Error reading current flags setting. Maybe you are not on the console? 

В виртуальном терминале он работает, однако эффект локален для этого виртуального терминала. Из того, что я понимаю, работает

 > setleds -L +caps < /dev/tty1 

из виртуального терминала (мой X-сервер сидит на tty1) должен работать. Однако для этого требуется root-доступ.

Есть ли способ отправить команду на консоль, лежащую в основе X-сервера, будь то из упомянутого xserver или из другого VT, без root?

Edit: Из предложения Mark Plotnik и на основе кода, найденного здесь , я написал и составил следующее:

 #include <X11/Xlib.h> #include <X11/XKBlib.h> #define SCROLLLOCK 1 #define CAPSLOCK 2 #define NUMLOCK 16 void setLeds(int leds) { Display *dpy = XOpenDisplay(0); XKeyboardControl values; values.led_mode = leds & SCROLLLOCK ? LedModeOn : LedModeOff; values.led = 3; XChangeKeyboardControl(dpy, KBLedMode, &values); XkbLockModifiers(dpy, XkbUseCoreKbd, CAPSLOCK | NUMLOCK, leds & (CAPSLOCK | NUMLOCK) ); XFlush(dpy); XCloseDisplay(dpy); } int main() { setLeds(CAPSLOCK); return 0; } 

Из того, что Жиль написал о xset , я не ожидал, что он сработает, но он … в некотором смысле: он устанавливает светодиод, но также устанавливает статус «капсклока». Я не полностью понимаю весь код выше, поэтому, возможно, я сделал глупую ошибку. По-видимому, строка XChangeKeyboardControl... не изменяет поведение программы, а XkbLockModifiers – это то, что устанавливает статус led и caplock.

  • Xorg игнорирует применение вина
  • как связать AltGr с <Ctrl> + <Alt>
  • Функциональные клавиши больше не доступны для переключения рабочих областей
  • Что, если я установлю DPI больше, чем PPI монитора в gnome, используя xrandr?
  • Почему этот скрипт Python не может получить доступ к XDisplay из Root-терминала?
  • X-сервер, блокировка клавиатуры и мыши с поврежденным дисплеем
  • Можно ли контролировать, какой монитор считается основным монитором?
  • UTF8 математические символы и раскладка клавиатуры / ввод
  • One Solution collect form web for “Измените состояние светодиодов клавиатуры, начиная с X сеанса, без доступа root”

    В принципе, вы должны сделать это с помощью почтенной команды xset .

     xset led named 'Caps Lock' 

    или xset led 4 для установки светодиода № 4, если ваша система не распознает светодиоды по имени.

    Однако это, похоже, не работает надежно. На моей машине я могу установить Scroll Lock таким образом, и я не единственный . Это похоже на конфигурацию XKB .

    Следующий рабочий процесс на уровне пользователя должен работать (по большей части):

    1. Извлеките текущую конфигурацию xkb:

       xkbcomp $DISPLAY myconf.xkb 
    2. Отредактируйте файл myconf.xkb , заменив !allowExplicit с allowExplicit в соответствующих блоках:

       indicator "Caps Lock" { allowExplicit; whichModState= locked; modifiers= Lock; }; indicator "Num Lock" { allowExplicit; whichModState= locked; modifiers= NumLock; }; 
    3. Загрузите новый файл

       xkbcomp myconf.xkb $DISPLAY 

    Теперь включение и выключение светодиодов с помощью xset должно работать. Согласно отчету об ошибке, вы не сможете отключить светодиоды, когда они должны быть включены (например, если CapsLock включен).

    Interesting Posts

    Сканирование изменений файлов в некоторых каталогах раз в 6 часов

    Переключение между двумя программами framebuffer

    Установка Linux застряла в запуске из-за графических карт nvidia

    yum install всегда терпит неудачу с ошибкой в ​​CentOS 7

    Простой сценарий оболочки Korn должен содержать список всех файлов, созданных / измененных после tidemark date

    Где получить новую строку после запуска `sub` в awk

    Как измерить использование сетевого трафика?

    Linux: Как работает жесткая привязка к каталогу?

    Создайте двоичный файл ввода из hdparm -read-сектора

    Объясните команду оболочки: shift $ (($ optind – 1))

    Подключение к беспроводному USB-адаптеру – Puppy Linux Wary

    Устранение неполадок: в каком файле содержится ошибка?

    Как установить переменную среды для sudo в MacOS?

    Почему wpa_supplicant не получает новый ip при перезаписывании?

    Как я могу программно определить, соответствует ли имя файла шаблону оболочки?

    Linux и Unix - лучшая ОС в мире.