Я намагаюсь змусити накладений накладок. 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, хоча це насправді увімкне блокування шапки.