J'essaie de forcer le verrouillage des majuscules. xset
ne fonctionne pas pour moi, donc j'essaie d'utiliser setleds
.
Dans une console graphique, cette commande renvoie:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
Dans un terminal virtuel, cela fonctionne, mais l'effet est local sur ce terminal virtuel. D'après ce que je comprends, courir
> setleds -L +caps < /dev/tty1
à partir d'un terminal virtuel (mon serveur X est assis sur tty1) devrait fonctionner. Cependant, cela nécessite un accès root.
Existe-t-il un moyen d'envoyer une commande à la console sous-jacente à un serveur X, que ce soit à partir dudit serveur x ou d'un autre VT, sans root?
Edit: D'après une suggestion de Mark Plotnik, et basé sur le code trouvé ici , j'ai écrit et compilé ce qui suit:
#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;
}
D'après ce que Gilles a écrit xset
, je ne m'attendais pas à ce que cela fonctionne, mais ça le fait ... dans un certain sens: cela définit la LED, mais cela définit également le statut de verrouillage. Je ne comprends pas bien tout le code ci-dessus, donc j'ai peut-être fait une erreur stupide. Apparemment, la ligne XChangeKeyboardControl...
ne change pas le comportement du programme, et XkbLockModifiers
c'est ce qui définit le statut de la led et du capslock.
xterm
source et il utilise un appel à XChangeKeyboardControl () pour définir ou désactiver les LED sans affecter l'état du verrouillage des majuscules, etc. Donc, si vous pouvez compiler du code C, c'est une approche.
xterm
les leds? Cela semble être une bonne idée, je vais modifier la question avec mes résultats.
xterm
allumer la LED ScrollLock en envoyant la séquence d'échappement ESC [3 q, selon le fichier ctlseqs.txt
fourni avec la source, mais je n'ai pas pu allumer les LED Num ou CapsLock avec les paramètres 1 et 2. Peut-être que je dois faire la configuration XKB mentionnée dans la réponse. xterm
appels XChangeKeyboardControl
à xtermShowLED
et xtermClearLEDs
, mais ne remet pas XkbLockModifiers
nulle part.
xdotool key Caps_Lock
partir d'un client X autorisé, bien que cela active le verrouillage des majuscules.