Я намагаюсь змусити накладений накладок. 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) має працювати. Однак для цього потрібен кореневий доступ.
Чи є спосіб надіслати команду до консолі, що лежить в основі сервера X, будь то із зазначеного xserver або з іншого VT, без кореня?
Редагувати: із пропозиції Марка Плотника і на основі знайденого тут коду я написав і склав наступне:
#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.
xterm
джерело, і воно використовує виклик XChangeKeyboardControl () для встановлення або зняття індикаторів світлодіодів, не впливаючи на стан блокування ковпачків і т. Д. Тож якщо ви можете скласти код C, це один підхід.
xterm
впливає на світлодіоди? Це звучить як гарна ідея, я відредагую питання своїми результатами.
xterm
довелося засвітити світлодіод ScrollLock, надіславши послідовність ESC [3 q, відповідно до файлу, ctlseqs.txt
що постачається з джерелом, але не вдалося засвітити світлодіоди Num або CapsLock з параметрами 1 і 2. Можливо, мені потрібно виконайте конфігурацію XKB, згадану у відповіді. xterm
дзвінки XChangeKeyboardControl
в xtermShowLED
і xtermClearLEDs
, але не викликає XkbLockModifiers
взагалі ніде.
xdotool key Caps_Lock
від авторизованого клієнта X, хоча це насправді увімкне блокування шапки.