Sto cercando di forzare l'accensione del capslock. xset
non funziona per me, quindi sto cercando di utilizzare setleds
.
In una console grafica, questo comando restituisce:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
In un terminale virtuale, funziona, tuttavia l'effetto è locale per quel terminale virtuale. Da quello che ho capito, correndo
> setleds -L +caps < /dev/tty1
da un terminale virtuale (il mio server X è seduto su tty1) dovrebbe funzionare. Tuttavia, questo richiede l'accesso come root.
C'è un modo per inviare un comando alla console sottostante un server X, sia da detto xserver o da un altro VT, senza root?
Modifica: da un suggerimento di Mark Plotnik e sulla base del codice trovato qui , ho scritto e compilato quanto segue:
#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;
}
Da quanto ha scritto Gilles xset
, non mi aspettavo che funzionasse, ma in un certo senso ... imposta il led, ma imposta anche lo stato del capslock. Non capisco completamente tutto il codice sopra, quindi potrei aver fatto un errore sciocco. Apparentemente, la linea XChangeKeyboardControl...
non cambia il comportamento del programma, ed XkbLockModifiers
è ciò che imposta lo stato del led e del capslock.
xterm
origine e utilizza una chiamata a XChangeKeyboardControl () per impostare o annullare l' impostazione dei LED senza influire sullo stato del blocco maiuscole ecc. Quindi, se è possibile compilare il codice C, questo è un approccio.
xterm
sui led? Sembra una buona idea, modificherò la domanda con i miei risultati.
xterm
accendere il LED ScrollLock inviando la sequenza di escape ESC [3 q, come per il file ctlseqs.txt
fornito con la sorgente, ma non riesco a far accendere i LED Num o CapsLock con i parametri 1 e 2. Forse dovrei fai la configurazione XKB menzionata nella risposta. xterm
chiamate XChangeKeyboardControl
in xtermShowLED
e xtermClearLEDs
, ma non chiama XkbLockModifiers
ovunque a tutti.
xdotool key Caps_Lock
a un client X autorizzato, anche se questo in realtà attiva il blocco maiuscole.