Estou tentando forçar o capslock liderado. xset
não funciona para mim, então estou tentando usar setleds
.
Em um console gráfico, este comando retorna:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
Em um terminal virtual, ele funciona, no entanto, o efeito é local para esse terminal virtual. Pelo que entendi, correndo
> setleds -L +caps < /dev/tty1
de um terminal virtual (meu servidor X está no tty1) deve funcionar. No entanto, isso requer acesso root.
Existe uma maneira de enviar um comando para o console subjacente a um servidor X, seja do referido xserver ou de outro VT, sem raiz?
Edit: A partir de uma sugestão de Mark Plotnik, e com base no código encontrado aqui , escrevi e compilei o seguinte:
#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;
}
Pelo que Gilles escreveu xset
, eu não esperava que funcionasse, mas funciona ... em certo sentido: define o led, mas também define o status do capslock. Como não entendo completamente todo o código acima, posso ter cometido um erro bobo. Aparentemente, a linha XChangeKeyboardControl...
não altera o comportamento do programa e XkbLockModifiers
é o que define o status do led e do capslock.
xterm
fonte e ela usa uma chamada para XChangeKeyboardControl () para definir ou desabilitar os LEDs sem afetar o estado do caps lock etc. Portanto, se você pode compilar o código C, essa é uma abordagem.
xterm
os leds? Parece uma boa ideia, editarei a pergunta com meus resultados.
xterm
acendi o LED ScrollLock enviando a seqüência de escape ESC [3 q, conforme o arquivo ctlseqs.txt
que acompanha a fonte, mas não consegui que os LEDs Num ou CapsLock acendessem com os parâmetros 1 e 2. Talvez eu precise faça a configuração XKB mencionada na resposta. xterm
chamadas XChangeKeyboardControl
em xtermShowLED
e xtermClearLEDs
, mas não chama XkbLockModifiers
a lugar nenhum.
xdotool key Caps_Lock
um cliente X autorizado, embora isso realmente ative o caps lock.