Sto cercando di forzare l'accensione del capslock. xsetnon 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.
xtermorigine 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.
xtermsui led? Sembra una buona idea, modificherò la domanda con i miei risultati.
xtermaccendere il LED ScrollLock inviando la sequenza di escape ESC [3 q, come per il file ctlseqs.txtfornito 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. xtermchiamate XChangeKeyboardControlin xtermShowLEDe xtermClearLEDs, ma non chiama XkbLockModifiersovunque a tutti.
xdotool key Caps_Locka un client X autorizzato, anche se questo in realtà attiva il blocco maiuscole.