কমান্ড লাইনের মাধ্যমে আমি ক্যাপস লক (লকটি, কীটি নয়) কীভাবে বন্ধ করব?


91

কোনও কারণে আমার ল্যাপটপ ক্যাপস লকটিতে আটকে আছে। আমার কাছে Caps Lockকীটি ম্যাপ করা xmodmapআছে hyper_l, তাই caps_lockএটি বন্ধ করার মতো চাবি আমার কাছে নেই। কমান্ড লাইনের মাধ্যমে আমি এটি বন্ধ করতে পারি এমন কোন উপায় আছে? বিশেষত ভবিষ্যতের রেফারেন্সের জন্য, আমি যদি কম্পিউটারটি পুনরায় সেট না করেই লক স্টেটটি পুনরায় সেট করতে পারি তবে ভাল লাগবে। এটি আগেও ঘটেছে, তবে এবার কীভাবে এটি সঠিকভাবে করবেন তা আমি এখন জানতে চাই।


[প্রতিধ্বনি- "" dump (ডামকিজ | গ্রেপ ^ কীম্যাপস) \ nkeycode 58 = পালানো "| সুডো লোডকিজ] [1] [.ফোন বা .বাশ_প্রফাইলে নিম্নলিখিত লাইনটি যুক্ত করা ক্যাপস লকটি নিষ্ক্রিয় করা উচিত:] [2] [xmodmap -e "লক = Caps_Lock" অপসারণ করুন] [3] [1]: Askubuntu.com/questions/ 43986 / ... [2]: askubuntu.com/questions/43986/... : [3] askubuntu.com/questions/43986/...
ওয়ান জিরো

setxkbmap -option ক্যাপস: কোনওটি নেই
পাভলোস থিওডোরো

@ পাভলোস থিওডোরো, এটি সিএপিএস কী অক্ষম করবে, এটি ওপির প্রয়োজনীয়তা হিসাবে তার স্থিতিটি টগল করবে না।
user.dz

সেখানে একটি বাগ আছে। এটি করার জন্য বর্তমানে কোনও আদেশ নেই। আপনি সেটলেড + ক্যাপ বা-ক্যাপ ব্যবহার করতে পারেন তবে এটি কার্যকর নয়। কেবলমাত্র আপনি যা করতে পারেন তার উত্তর ইতিমধ্যে দেওয়া আছে। আপনি ক্যাপগুলি পুনরায় তৈরি করতে পারবেন
পাভলোস থিওডোরো

উত্তর:


129

উবুন্টুতে আমি এর জন্য কোনও কমান্ড লাইন সরঞ্জাম জানি না। (নম লকের জন্য নামফলক রয়েছে 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)'

এখানে এটি আবার আরও প্রসারিত আকারে। আমরা সরাসরি এক্স লাইব্রেরি থেকে সি ফাংশনগুলি কল করতে পাইথন সিটিপস লাইব্রেরিটি ব্যবহার করি । ফাংশনটি মূল কীবোর্ডে ( = 0x0100) কীবোর্ড লকগুলির স্থিতি পরিবর্তন করে , ক্যাপস লককে প্রভাবিত করে (2), এটি 0 (অফ) এ সেট করে।XkbLockModifiersXkbUseCoreKbd

#!/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))। মোড 2-এ থাকা নাম লকটি চালু করতে এবং একই সাথে ক্যাপস লকটি বন্ধ করুন, কল করুন 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;
}

অস্থায়ীভাবে ক্যাপস লককে উপেক্ষা করার একটি উপায় হ'ল আগ্রহ of

xkbset nullify lock

এর পরে, ক্যাপস লক কার্যকরভাবে স্থায়ীভাবে বন্ধ হয়ে যাবে, যতক্ষণ না আপনি এটিকে পুনরায় সক্ষম করেন xkbset nullify -lock


আমি যখন আমার ল্যাপটপে থাকি তখন আমি যেতে পারি। আমি আপাতত আমার ডেস্কটপে আছি।
ইকোজেন

হুম, পাইথন পদ্ধতিটি আমার পক্ষে কাজ করত, কিন্তু ইয়াক্কেটি আপগ্রেড করার পরে তা হয় না। ক্যাপস লক আটকে যায় এমন বাগটি অবশ্যই অবিরত থাকে!
গ্রিংগো সুভেভ

@ গ্রিংসুয়েভ কেন হতে পারে তা আমার কোনও ধারণা নেই। দয়া করে শেষ কয়েকটি লাইন ইনস্টল করুন xtraceএবং চালনা করুন xtrace python -c 'from ctypes import *; X11 = cdll.LoadLibrary("libX11.so.6"); buf = (c_char*16)(); display = X11.XOpenDisplay(None); X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2), c_uint(0)); X11.XkbGetState(display, 0x0100, buf); X11.XCloseDisplay(display)'এবং এতে থাকা একটি দিয়ে শুরু করুন QueryExtension name='XKEYBOARD'। আমি দাবি করি না যে আমি আউটপুটটি বুঝতে পারি তবে আমি চেষ্টা করব।
গিলস

2
আমি একটি সেগফল্ট পেয়েছি: সিগন্যাল SIGSEGV দ্বারা সমাপ্ত (ঠিকানা সীমানা ত্রুটি) বিভাগকরণ ত্রুটি…
গ্রিংগো সুভেভ

000: <: 0005: 20: অনুরোধ (98): ক্যোয়ারি এক্সটেনশনের নাম = 'এক্সকেওয়াইবার্ড' 000:>: 0005: 32: প্রশ্নের উত্তর দিন: বর্তমান = সত্য (0x01) মেজর-অপকোড = 135 প্রথম-ইভেন্ট = 85 প্রথম-ত্রুটি = 137 000: <: 0006: 8: XKEYBOARD- অনুরোধ (135,0): এক্সটেনশন মেজর = 1 গৌণ = 0 000:>: 0006: 32: ব্যবহারের উত্তর দিন: মেজর = 1 গৌণ = 0
গ্রিংগো সুভেভ

59

প্রয়োজনীয় কী ইভেন্টগুলি প্রেরণের জন্য এক্স অটোমেশন সরঞ্জামগুলি ব্যবহার করা যেতে পারে।

দ্রষ্টব্য:
প্রথম ব্যবহারের জন্য, এই সলিউশনটি আপনাকে নতুন সরঞ্জাম ইনস্টল করার জন্য সঠিক পাসওয়ার্ডটি টেপ করতে হবে, যদি আপনার সিএপিএস বর্তমানে সক্রিয় থাকে:

  • SHIFTছোট হাতের অক্ষর টাইপ করতে কী ব্যবহার করুন ।
  • অ্যাক্সেসযোগ্যতা সক্ষম করুন, ওভারলে ভার্চুয়াল কীবোর্ড।
  • একটি বাহ্যিক কীবোর্ড পুনরায় প্লাগ করুন। (ধন্যবাদ chris455 )
  • অফিস লেখক খুলুন, সেখানে পাসওয়ার্ড লিখুন, চিঠির কেসটি পরিবর্তন করুন, অনুলিপি করুন এবং তারপরে এটি পাসওয়ার্ড সংলাপে পেস্ট করুন।

পূর্ববর্তী সমস্ত বিকল্প যদি সম্ভব না হয় বা কাজ না করে, গিলসের উত্তর / পাইথন স্ক্রিপ্টের সাথে যান । এটির জন্য কোনও অতিরিক্ত সরঞ্জাম ইনস্টল করার দরকার নেই, এটি কেবলমাত্র python& libX11ভাগ করা lib ব্যবহার করে যা প্রাক ইনস্টল করা আছে।

ব্যবহার xdotool

  1. এটি ইনস্টল করুন

    sudo apt-get install xdotool
    
  2. একটি সিএপিএস ডাউন / আপ ইভেন্ট প্রেরণ করুন

    xdotool key Caps_Lock
    

অন্য একটি সরঞ্জাম xte

  1. এটি ইনস্টল করুন

    sudo apt-get install xautomation
    
  2. একটি সিএপিএস লক ডাউন / আপ ইভেন্ট প্রেরণ করুন

    xte "key Caps_Lock"
    

তথ্যসূত্র:


যদি এটি কাজ না করে?
কোয়ান্ট_দেব

2
এটিই আমার পক্ষে কাজ করেছে। বাতিল করুন এবং অন্যরা কাজ করেনি।
লনস্টডাল

12
ইনস্টল করতে পারবেন না, পাসওয়ার্ড স্বীকৃত নয়। :(
গ্রিঙ্গো সুভেভ

2
ক্যাপস লক সক্ষম থাকা অবস্থায় আপনি ছোট হাতের অক্ষরগুলি ইনপুট দেওয়ার জন্য শিফট কী ব্যবহার করতে পারেন।
chris544

1
আপনি যদি বাহ্যিক কীবোর্ড ব্যবহার করেন তবে অন্য বিকল্প এটি পুনরায় প্লাগ করতে পারে; ক্যাপস লক সংশোধক পুনরায় সেট হতে পারে, তাই আপনি ছোট হাতের অক্ষরগুলি ইনপুট করতে পারেন।
chris544

14

গিলস অজগর সংস্করণটি নতুন উবুন্টাসে কাজ করছে না, ওপেন ডিসপ্লের জন্য সঠিক রিটার্ন সেট করা কৌশলটি মনে হচ্ছে:

#! /usr/bin/env python

from ctypes import *
import subprocess

class Display(Structure):
    """ opaque struct """

X11 = cdll.LoadLibrary("libX11.so.6")
X11.XOpenDisplay.restype = POINTER(Display)

display = X11.XOpenDisplay(c_int(0))
X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2), c_uint(0))
X11.XCloseDisplay(display)

(কোডটি https://stackoverflow.com/questions/29638210/how-can-i-use-python-xlib-to-generate-a-single-keypress থেকে অভিযোজিত )


এটি সত্যিই ভাল কাজ করে, জীবন রক্ষাকারী
গ্যারেট গ্যাং

8

আপনি যদি সিএপিএস অ্যাক্সেস করতে না পারেন কারণ আপনি এটি যেমন আমার মতো করে .bashrc এ রিম্যাপ করে ফেলেছিলেন, তবে কেবল ভার্চুয়াল টার্মিনালে (Alt + ctl + fN) স্যুইচ করা এবং তারপরে ফিরে স্যুইচ করা আমার পক্ষে কাজ করে।


1
স্যুইচিং এটি খুব একটা করেনি, তবে এটি আমাকে এমন একটি জায়গায় পৌঁছে দিয়েছে যেখানে জিনিসটি সঠিকভাবে পেতে আমি ক্যাপস লক টিপতে পারি।
গোলকধাঁধা

1

আমার এই সমস্যাটি ছিল এবং অনবোর্ড কীবোর্ড (ইউনিভার্সাল অ্যাক্সেসের আওতায় উবুন্টু মেটে) ব্যবহার করে এটি ঠিক করতে সক্ষম হয়েছি।

একবার চালু হয়ে গেলে দেখতে হবে ক্যাপসলক কীটি লাল, বা কোনওভাবে এটি লক করা আছে it তারপরে আপনি টগল বন্ধ করতে টিপতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.