Я пытаюсь заставить загнанный капслок. 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, без рута?
Изменить: По предложению Марка Плотника и на основе кода, найденного здесь , я написал и скомпилировал следующее:
#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, я не ожидал, что это сработает, но это работает ... в некотором смысле: он устанавливает светодиод, но также устанавливает статус capslock. Я не до конца понимаю весь приведенный выше код, поэтому, возможно, я сделал глупую ошибку. Видимо, строка XChangeKeyboardControl...не меняет поведение программы, а XkbLockModifiersименно то, что задает светодиод и статус колпачка.
xtermисточник, и он использует вызов XChangeKeyboardControl () для установки или сброса светодиодов, не влияя на состояние блокировки заглавных букв и т. Д. Поэтому, если вы можете скомпилировать код на C, это один из подходов.
xtermна светодиоды? Звучит как хорошая идея, я отредактирую вопрос своими результатами.
xtermвключил светодиод ScrollLock, отправив escape-последовательность ESC [3 q, в соответствии с файлом, ctlseqs.txtкоторый поставляется с источником, но не смог заставить светодиоды Num или CapsLock загореться с параметрами 1 и 2. Возможно, мне нужно сделайте конфигурацию XKB, упомянутую в ответе. xtermзвонки XChangeKeyboardControlв xtermShowLEDи xtermClearLEDs, но не вызывает XkbLockModifiersвообще нигде.
xdotool key Caps_Lockавторизованного X-клиента, хотя на самом деле это включит caps lock.