Bagaimana cara menonaktifkan Caps Lock (kunci, bukan kunci) dengan command line?

Untuk beberapa alasan saya laptop terjebak di Caps Lock. Saya memiliki Caps Lock kunci dipetakan oleh xmodmap untuk hyper_l, jadi saya don't memiliki caps_lock tombol untuk mematikannya. Apakah ada cara saya dapat mematikannya dengan command line? Akan lebih baik jika aku bisa me-reset lock negara tanpa ulang komputer saya, terutama untuk referensi di masa mendatang. Ini telah terjadi sebelumnya, tapi saya ingin tahu sekarang bagaimana untuk melakukannya dengan benar kali ini.

Mengomentari pertanyaan (4)

Saya don't tahu dari setiap alat baris perintah di Ubuntu. (Untuk Num Lock, ada numlockx .) Berikut ini's one-liner yang bisa anda copy-paste ke jendela terminal:

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)'

Berikut ini adalah lagi dalam bentuk yang lebih diperluas. Kami menggunakan Python ctypes perpustakaan untuk memanggil fungsi C dari perpustakaan X secara langsung. Fungsi XkbLockModifiers perubahan keadaan keyboard kunci, pada inti keyboard (XkbUseCoreKbd = 0x0100), yang mempengaruhi Caps Lock (2), menetapkan ke 0 (off).

#!/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)

Jika anda memiliki terjebak pengubah, perubahan 2 untuk masker dari para modifikator yang ingin anda matikan. Pengubah 1=Shift, 2=Kunci (Caps Lock), 4=Kontrol, 8=Mod1, 16=Mod2, 32=Mod3, 64=Mod4, 128=Mod5. Menjalankan xmodmap -pm untuk melihat apa yang Mod1 melalui Mod5 sesuai dengan. Misalnya, untuk mematikan semua pengubah, panggilan X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(255), c_uint(0)). Untuk mengaktifkan Num Lock yang pada Mod2 dan pada saat yang sama mematikan Caps Lock, panggilan X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2 | 16), c_uint(16)).


Berikut ini's a C versi jika anda ingin membuat biner kecil bukannya memohon Python. Compile dengan gcc -O -Dinding -o caps_lock_off caps_lock_off.c -lX11, dengan paket-paketbuild-essentialsdanlibx11-dev` diinstal.

#include 
#include 
#include 
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;
}

Juga mungkin dari bunga adalah cara untuk sementara mengabaikan Caps Lock:

xkbset nullify lock

Setelah ini, Caps Lock akan secara efektif dapat secara permanen pergi, sampai anda mengaktifkan kembali dengan xkbset membatalkan -lock.

Komentar (18)

X otomatisasi alat-alat yang dapat digunakan untuk mengirimkan dibutuhkan peristiwa penting.

Catatan:
Untuk penggunaan pertama, solusi Ini membutuhkan anda untuk tape password yang benar untuk menginstal alat baru, jika anda TOPI yang sedang aktif:

  • Menggunakan SHIFT tombol untuk mengetik huruf kecil.
  • Mengaktifkan aksesibilitas, tampilan virtual keyboard.
  • Re-plug keyboard eksternal. (Terima kasih kepada chris455)
  • Open office writer, menulis password di sana, mengubah huruf, copy, kemudian paste ke dialog password.

Jika semua opsi sebelumnya adalah tidak mungkin atau tidak't bekerja, Pergi dengan Gilles' menjawab / script python. Tidak perlu menginstal alat tambahan, hanya menggunakan python & libX11 bersama lib yang pra-instal.

Menggunakan xdotool

  1. Menginstalnya

sudo apt-get install xdotool

  1. Mengirim TOPI down/up acara

xdotool kunci Caps_Lock

Alat lain adalah xte

  1. Menginstalnya

sudo apt-get install xautomation

  1. Kirim CAPS lock down/up acara

xte "kunci Caps_Lock"

Referensi:

Komentar (7)

Adapun Gilles python versi tidak bekerja di samsung ubuntus, pengaturan yang benar kembali untuk membuka tampilan tampaknya untuk melakukan trik ini:

#! /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)

(Kode diadaptasi dari https://stackoverflow.com/questions/29638210/how-can-i-use-python-xlib-to-generate-a-single-keypress)

Komentar (1)

Jika anda dapat't akses TOPI karena anda dipetakan dalam .bashrc, seperti yang saya lakukan, kemudian beralih ke virtual terminal (alt+ctl+fN) dan kemudian beralih kembali bekerja untuk saya.

Komentar (1)

Aku punya masalah ini dan mampu memperbaikinya dengan menggunakan OnBoard keyboard (di Ubuntu Mate, di bawah Universal Access).

Setelah diaktifkan, anda harus melihat kunci CapsLock merah, atau entah bagaimana menunjukkan bahwa itu terkunci. Kemudian anda dapat menekan untuk beralih off.

Komentar (0)