Ich versuche, die geöffnete Feststelltaste zu erzwingen. xset
funktioniert bei mir nicht, also versuche ich es zu benutzen setleds
.
In einer grafischen Konsole gibt dieser Befehl Folgendes zurück:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
In einem virtuellen Terminal funktioniert es, der Effekt ist jedoch lokal für dieses virtuelle Terminal. Soweit ich weiß, läuft
> setleds -L +caps < /dev/tty1
von einem virtuellen Terminal (mein X-Server sitzt auf tty1) sollte funktionieren. Dies erfordert jedoch Root-Zugriff.
Gibt es eine Möglichkeit, einen Befehl an die Konsole zu senden, die einem X-Server zugrunde liegt, sei es vom X-Server oder von einem anderen VT ohne Root?
Bearbeiten: Auf Vorschlag von Mark Plotnik und basierend auf dem hier gefundenen Code habe ich Folgendes geschrieben und kompiliert:
#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;
}
Nach dem, worüber Gilles schrieb xset
, hatte ich nicht erwartet, dass es funktioniert, aber es funktioniert ... in gewissem Sinne: Es setzt die LED, aber es setzt auch den Capslock-Status. Ich verstehe den obigen Code nicht vollständig, daher habe ich möglicherweise einen dummen Fehler gemacht. Anscheinend XChangeKeyboardControl...
ändert die Zeile das Verhalten des Programms nicht und XkbLockModifiers
setzt den LED- und den Capslock-Status.
xterm
Quelle angesehen und sie verwendet einen Aufruf von XChangeKeyboardControl () , um die LEDs zu setzen oder zu deaktivieren, ohne den Status der Feststelltaste usw. zu beeinflussen. Wenn Sie also C-Code kompilieren können, ist dies ein Ansatz.
xterm
Beeinflusst die LEDs? Es klingt nach einer guten Idee, ich werde die Frage mit meinen Ergebnissen bearbeiten.
xterm
musste die ScrollLock-LED durch Senden der Escape-Sequenz ESC [3 q gemäß der ctlseqs.txt
mit der Quelle gelieferten Datei aufleuchten lassen, konnte aber die Num- oder CapsLock-LEDs nicht mit den Parametern 1 und 2 aufleuchten lassen. Vielleicht muss ich Führen Sie die in der Antwort angegebene XKB-Konfiguration durch. xterm
ruft XChangeKeyboardControl
an xtermShowLED
und xtermClearLEDs
, ruft aber XkbLockModifiers
nirgendwo an.
xdotool key Caps_Lock
von einem autorisierten X-Client aus tun , obwohl dadurch die Feststelltaste aktiviert wird.