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.
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-paket
build-essentialsdan
libx11-dev` diinstal.
#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;
}
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
.
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
sudo apt-get install xdotool
xdotool kunci Caps_Lock
Alat lain adalah xte
sudo apt-get install xautomation
xte "kunci Caps_Lock"
Referensi:
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)
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.