Tôi đang cố gắng buộc capslock dẫn vào. xset
không làm việc cho tôi, vì vậy tôi đang cố gắng sử dụng setleds
.
Trong bảng điều khiển đồ họa, lệnh này trả về:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
Trong một thiết bị đầu cuối ảo, nó hoạt động, tuy nhiên hiệu ứng là cục bộ của thiết bị ảo đó. Từ những gì tôi hiểu, chạy
> setleds -L +caps < /dev/tty1
từ một thiết bị đầu cuối ảo (máy chủ X của tôi đang ngồi trên tty1) sẽ hoạt động. Tuy nhiên, điều này đòi hỏi quyền truy cập root.
Có cách nào để gửi lệnh đến bàn điều khiển bên dưới máy chủ X, từ máy chủ xs đã nói hoặc từ VT khác, không có root?
Chỉnh sửa: Từ một đề xuất từ Mark Plotnik và dựa trên mã được tìm thấy ở đây , tôi đã viết và biên soạn như sau:
#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;
}
Từ những gì Gilles đã viết xset
, tôi không mong đợi nó hoạt động, nhưng nó ... theo một nghĩa nào đó: nó đặt đèn led, nhưng nó cũng đặt trạng thái capslock. Tôi không hiểu đầy đủ tất cả các mã ở trên, vì vậy tôi có thể đã phạm một lỗi ngớ ngẩn. Rõ ràng, dòng XChangeKeyboardControl...
không thay đổi hành vi của chương trình, và XkbLockModifiers
là những gì thiết lập trạng thái led và trạng thái capslock.
xterm
nguồn này và nó sử dụng lệnh gọi XChangePalControl () để đặt hoặc hủy đặt đèn LED mà không ảnh hưởng đến trạng thái khóa mũ, v.v. Vì vậy, nếu bạn có thể biên dịch mã C, đó là một cách tiếp cận.
xterm
ảnh hưởng đến đèn led không? Nghe có vẻ là một ý tưởng tốt, tôi sẽ chỉnh sửa câu hỏi với kết quả của tôi.
xterm
làm sáng LED ScrollLock bằng cách gửi chuỗi thoát ESC [3 q, theo tệp ctlseqs.txt
đi kèm với nguồn, nhưng không thể làm cho đèn LED Num hoặc CapsLock sáng lên với tham số 1 và 2. Có lẽ tôi cần phải làm cấu hình XKB được đề cập trong câu trả lời. xterm
gọi XChangeKeyboardControl
trong xtermShowLED
và xtermClearLEDs
, nhưng không gọi XkbLockModifiers
bất cứ nơi nào cả.
xdotool key Caps_Lock
từ máy khách X được ủy quyền, mặc dù điều này thực sự sẽ bật nắp khóa.