मुझे उबंटू में इसके लिए कोई कमांड लाइन टूल नहीं है। (Num Lock के लिए, numlockx है ।) यहाँ एक-लाइनर है जिसे आप एक टर्मिनल विंडो में कॉपी-पेस्ट कर सकते हैं:
python -c 'from ctypes import *; X11 = cdll.LoadLibrary("libX11.so.6"); display = X11.XOpenDisplay(None); X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2), c_uint(0)); X11.XCloseDisplay(display)'
यहां यह फिर से अधिक विस्तारित रूप में है। हम सीधे X लाइब्रेरी से C फ़ंक्शन को कॉल करने के लिए पायथन ctypes लाइब्रेरी का उपयोग करते हैं। फ़ंक्शन कीबोर्ड के राज्य की स्थिति को बदलता है, कोर कीबोर्ड ( = 0x0100) पर, कैप्स लॉक (2) को प्रभावित करता है, इसे 0 (बंद) पर सेट करता है।XkbLockModifiers
XkbUseCoreKbd
#!/usr/bin/env python
from ctypes import *
X11 = cdll.LoadLibrary("libX11.so.6")
display = X11.XOpenDisplay(None)
X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2), c_uint(0))
X11.XCloseDisplay(display)
यदि आपके पास एक अटका हुआ संशोधक है, तो उस संशोधक के मुखौटे में 2 बदलें, जिसे आप बंद करना चाहते हैं। संशोधक 1 = शिफ्ट, 2 = लॉक (कैप्स लॉक), 4 = नियंत्रण, 8 = मोड 1, 16 = मोड 2, 32 = मोड 3, 64 = मोड 4, 128 = मोड 5 हैं। xmodmap -pm
Mod5 के माध्यम से Mod1 क्या देखने के लिए चलाएँ । उदाहरण के लिए, सभी संशोधक बंद करने के लिए, कॉल करें X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(255), c_uint(0))
। Num Lock को चालू करने के लिए जो Mod2 पर है और उसी समय कैप्स लॉक को बंद करें, कॉल करें X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2 | 16), c_uint(16))
।
यदि आप पायथन को लागू करने के बजाय एक छोटा बाइनरी बनाना चाहते हैं तो यहां एक सी संस्करण है। साथ संकलित करें gcc -O -Wall -o caps_lock_off caps_lock_off.c -lX11
, संकुल के साथ build-essentials
और libx11-dev
स्थापित।
#include <stdio.h>
#include <X11/X.h>
#include <X11/XKBlib.h>
int main()
{
Display *display = XOpenDisplay(NULL);
if (display == NULL) {
fprintf(stderr, "Couldn't open display\n");
return 2;
}
Bool sent = XkbLockModifiers(display, XkbUseCoreKbd, LockMask, 0);
if (!sent) {
fprintf(stderr, "Couldn't send LatchLockState\n");
return 1;
}
#ifdef REPORT_STATE
XkbStateRec xkb_state;
Status status = XkbGetState(display, XkbUseCoreKbd, &xkb_state);
if (status) {
fprintf(stderr, "XkbGetState returned %d\n", status);
return 1;
}
printf("state.group=%02x\n", xkb_state.group);
printf("state.locked_group=%02x\n", xkb_state.locked_group);
printf("state.base_group=%02x\n", xkb_state.base_group);
printf("state.latched_group=%02x\n", xkb_state.latched_group);
printf("state.mods=%02x\n", xkb_state.mods);
printf("state.base_mods=%02x\n", xkb_state.base_mods);
printf("state.latched_mods=%02x\n", xkb_state.latched_mods);
printf("state.locked_mods=%02x\n", xkb_state.locked_mods);
printf("state.compat_state=%02x\n", xkb_state.compat_state);
printf("state.grab_mods=%02x\n", xkb_state.grab_mods);
printf("state.compat_grab_mods=%02x\n", xkb_state.compat_grab_mods);
printf("state.lookup_mods=%02x\n", xkb_state.lookup_mods);
printf("state.compat_lookup_mods=%02x\n", xkb_state.compat_lookup_mods);
printf("state.ptr_buttons=%02x\n", xkb_state.ptr_buttons);
#endif
int err = XCloseDisplay(display);
if (err) {
fprintf(stderr, "XCloseDisplay returned %d\n", err);
return 1;
}
return 0;
}
संभवतः संभवतः ब्याज भी कैप्स लॉक को अस्थायी रूप से अनदेखा करने का एक तरीका है:
xkbset nullify lock
इसके बाद, कैप्स लॉक प्रभावी रूप से स्थायी रूप से बंद हो जाएगा, जब तक कि आप इसे फिर से लागू नहीं करते xkbset nullify -lock
।