Capslock을 강제로 켜려고합니다. xset
나를 위해 작동하지 않으므로 사용하려고합니다 setleds
.
그래픽 콘솔에서이 명령은 다음을 반환합니다.
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
가상 터미널에서는 작동하지만 그 효과는 해당 가상 터미널에 국한됩니다. 내가 이해 한 것부터
> setleds -L +caps < /dev/tty1
가상 터미널 (내 X 서버가 tty1에 앉아 있음)에서 작동합니다. 그러나 루트 액세스가 필요합니다.
루트없이 X 서버 또는 다른 VT에서 X 서버의 기본 콘솔로 명령을 보내는 방법이 있습니까?
편집 : Mark Plotnik의 제안에서 here 발견 된 코드를 기반으로 다음을 작성하고 컴파일했습니다.
#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;
}
Gilles가 쓴 것에 xset
따르면, 나는 그것이 작동 할 것으로 기대하지는 않았지만 어떤 의미에서는 : led를 설정하지만 capslock 상태를 설정합니다. 위의 모든 코드를 완전히 이해하지 못했기 때문에 바보 같은 실수를했을 수도 있습니다. 분명히 라인 XChangeKeyboardControl...
은 프로그램의 동작을 변경하지 않으며 XkbLockModifiers
led 및 capslock 상태를 설정합니다.
xterm
소스, 그리고에 대한 호출 사용 XChangeKeyboardControl ()를 사용하면 하나의 접근 방식 C 코드를 컴파일 할 수있는 경우 등 정도 고정 캡의 상태에 영향을주지 않고 LED를 설정하거나 설정을 해제합니다.
xterm
led에 영향을 줍니까 ? 좋은 생각 인 것 같습니다. 결과가 포함 된 질문을 편집하겠습니다.
xterm
파일에 따라 이스케이프 시퀀스 ESC [3 q를 보내 ScrollLock이 LED에 불 ctlseqs.txt
소스와 함께 제공하지만, 매개 변수 1과 2의 빛 최대 인분 또는 등 CapsLock LED를 가져올 수 없습니다 어쩌면 내가 필요 답변에 언급 된 XKB 구성을 수행하십시오. xterm
전화 XChangeKeyboardControl
에 xtermShowLED
와 xtermClearLEDs
있지만, 호출하지 않습니다 XkbLockModifiers
어느 곳 모두에서.
xdotool key Caps_Lock
인증 된 X 클라이언트 와 같은 작업을 수행 할 수 있지만 실제로는 Caps Lock이 설정됩니다.