मैं नेतृत्व करने के लिए कैपलॉक को मजबूर करने की कोशिश कर रहा हूं। 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 सर्वर पर अंतर्निहित कंसोल पर कमांड भेजने का कोई तरीका है, क्या यह उक्त xserver से है या किसी अन्य VT से, बिना रूट के?
संपादित करें: मार्क प्लॉटनिक के एक सुझाव से, और यहां मिले कोड के आधार पर , मैंने निम्नलिखित लिखा और संकलित किया:
#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;
}
गिल्स ने जिस बारे में लिखा xsetथा, उससे मुझे काम करने की उम्मीद नहीं थी, लेकिन यह कुछ मायने में ... यह सेट का नेतृत्व करता है, लेकिन यह कैप्सलॉक की स्थिति भी निर्धारित करता है। मुझे उपरोक्त सभी कोड पूरी तरह से समझ नहीं आ रहे हैं, इसलिए मैंने एक मूर्खतापूर्ण गलती की हो सकती है। जाहिरा तौर पर, लाइन XChangeKeyboardControl...कार्यक्रम के व्यवहार को नहीं बदलता है, और XkbLockModifiersवह है जो नेतृत्व और कैपलॉक स्थिति को निर्धारित करता है।
xtermस्रोत को देखा , और यह कैप्स लॉक आदि की स्थिति को प्रभावित किए बिना एलईडी को सेट या अनसेट करने के लिए XChangeKeyboardControl () को कॉल का उपयोग करता है, इसलिए यदि आप सी कोड को संकलित कर सकते हैं, तो यह एक दृष्टिकोण है।
xtermएलईडी को प्रभावित करता है ? यह एक अच्छा विचार लगता है, मैं अपने परिणामों के साथ प्रश्न को संपादित करूंगा।
xtermफ़ाइल के अनुसार एस्केप सीक्वेंस ESC [3 q भेजकर स्क्रॉललॉक एलईडी को लाइट अप करने के लिए मिला ctlseqs.txt, लेकिन मापदंडों 1 और 2 के साथ प्रकाश करने के लिए Num या CapsLock एलईडी प्राप्त नहीं कर सका। उत्तर में उल्लिखित XKB विन्यास करते हैं। xtermकॉल XChangeKeyboardControlमें xtermShowLEDऔर xtermClearLEDsहै, लेकिन फोन नहीं करता है XkbLockModifiersसब पर कहीं भी।
xdotool key Caps_Lockअधिकृत एक्स क्लाइंट से कुछ कर सकते हैं , हालांकि यह वास्तव में कैप्स लॉक को चालू करेगा।