Saya mencoba untuk memaksa capslock menyala. xset
tidak bekerja untuk saya, jadi saya coba gunakan setleds
.
Di konsol grafis, perintah ini mengembalikan:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
Di terminal virtual, ia berfungsi, namun efeknya bersifat lokal ke terminal virtual itu. Dari apa yang saya mengerti, berlari
> setleds -L +caps < /dev/tty1
dari terminal virtual (server X saya duduk di tty1) harus berfungsi. Namun, ini membutuhkan akses root.
Apakah ada cara untuk mengirim perintah ke konsol yang mendasari server X, baik itu dari xserver tersebut atau dari VT lain, tanpa root?
Sunting: Dari saran dari Mark Plotnik, dan berdasarkan kode yang ditemukan di sini , saya menulis dan menyusun yang berikut:
#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;
}
Dari apa yang ditulis Gilles xset
, saya tidak berharap itu berfungsi, tetapi ternyata ... dalam beberapa hal: itu yang mengatur, tetapi juga menetapkan status capslock. Saya tidak sepenuhnya memahami semua kode di atas, jadi saya mungkin telah melakukan kesalahan konyol. Rupanya, garis XChangeKeyboardControl...
tidak mengubah perilaku program, dan XkbLockModifiers
itulah yang mengatur status memimpin dan capslock.
xterm
sumbernya, dan ia menggunakan panggilan ke XChangeKeyboardControl () untuk mengatur atau menghapus pengaturan LED tanpa memengaruhi status caps lock dll. Jadi, jika Anda dapat mengkompilasi kode C, itu salah satu pendekatan.
xterm
mempengaruhi leds? Kedengarannya seperti ide yang bagus, saya akan mengedit pertanyaan dengan hasil saya.
xterm
menyalakan ScrollLock LED dengan mengirimkan urutan escape ESC [3 q, sesuai file ctlseqs.txt
yang disertakan dengan sumbernya, tetapi tidak bisa membuat LED Num atau CapsLock menyala dengan parameter 1 dan 2. Mungkin saya perlu lakukan konfigurasi XKB yang disebutkan dalam jawaban. xterm
panggilan XChangeKeyboardControl
masuk xtermShowLED
dan xtermClearLEDs
, tetapi tidak menelepon XkbLockModifiers
sama sekali.
xdotool key Caps_Lock
dari klien X resmi, meskipun ini sebenarnya akan mengaktifkan caps lock.