Estoy tratando de forzar el bloqueo del led. xset
no funciona para mí, así que estoy tratando de usarlo setleds
.
En una consola gráfica, este comando devuelve:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
En una terminal virtual, funciona, sin embargo, el efecto es local en esa terminal virtual. Por lo que entiendo, corriendo
> setleds -L +caps < /dev/tty1
desde una terminal virtual (mi servidor X está sentado en tty1) debería funcionar. Sin embargo, esto requiere acceso de root.
¿Hay alguna forma de enviar un comando a la consola subyacente a un servidor X, ya sea desde dicho servidor x o desde otro VT, sin root?
Editar: a partir de una sugerencia de Mark Plotnik, y en base al código encontrado aquí , escribí y compilé lo siguiente:
#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;
}
Por lo que Gilles escribió sobre xset
, no esperaba que funcionara, pero lo hace ... en cierto sentido: establece el led, pero también establece el estado del bloqueo de mayúsculas. No entiendo completamente todo el código anterior, por lo que es posible que haya cometido un error tonto. Aparentemente, la línea XChangeKeyboardControl...
no cambia el comportamiento del programa, y XkbLockModifiers
es lo que establece el led y el estado del bloqueo de mayúsculas.
xterm
fuente y utiliza una llamada a XChangeKeyboardControl () para configurar o deshabilitar los LED sin afectar el estado de bloqueo de mayúsculas, etc. Entonces, si puede compilar el código C, ese es un enfoque.
xterm
a los leds? Parece una buena idea, editaré la pregunta con mis resultados.
xterm
encender el LED ScrollLock enviando la secuencia de escape ESC [3 q, según el archivo ctlseqs.txt
que viene con la fuente, pero no pude hacer que los LED Num o CapsLock se iluminaran con los parámetros 1 y 2. Tal vez necesito haz la configuración XKB mencionada en la respuesta. xterm
llamadas XChangeKeyboardControl
en xtermShowLED
y xtermClearLEDs
, pero no llama XkbLockModifiers
a ningún lado.
xdotool key Caps_Lock
desde un cliente X autorizado, aunque esto realmente activará el bloqueo de mayúsculas.