Я пытаюсь заставить загнанный капслок. 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.