Измените состояние светодиодов клавиатуры, начиная с 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.

  • Можно ли контролировать, какой монитор считается основным монитором?
  • Получение PID окна, нажав на него
  • Debian - X11 не отображается до переключения VT
  • Совместное использование X-сервера (сеанса) на компьютерах
  • Как запустить Xserver с драйвером VESA сверху с использованием 24bpp
  • Как изменить код ключа с помощью setkeycodes
  • Масштабирование HiDPI для приложений, которые не знакомы
  • i3-wm не изменяет разрешение экрана при входе в систему
  • 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

    Подстановки команд vs обратные сбрасывания экранов в цитируемой строке

    Нет графического интерфейса пользователя, полный диск, сломанная система после обновления источников

    Linux-рейд собрал «сам» с неисправным приводом. Зачем?

    Выбор для persistent-ipoib.rules для установки без RDMA? (rhel7.3)

    ошибка при попытке восстановить / прочитать только

    SSH и / tmp на 100%

    Декодировать флаги для команды Kill

    Почему чтение из двух связанных pty вызывает бесконечный цикл?

    Как вы обрабатываете всю команду как sudo, которая включает перенаправление или конвейер?

    На дисплее диска нет места, но нет свободного места

    Условный оператор, «ожидаемый унарный оператор»

    Как печатать первые три строки и последние две строки файла, используя perl?

    Смущенный этим сценарием с вилкой бомбы

    Debian jessie. нуво, MMIO читал ошибку в … но. Любая работа вокруг?

    Как сделать снимок экрана окна gksudo?

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