何らかの理由で、ラップトップがCaps Lockでスタックしています。私が持っています Caps Lock キーはxmodmap
によってhyper_l
にマップされているため、無効にするcaps_lock
キーはありません。コマンドラインで無効にする方法はありますか?特に将来の参照のために、コンピューターをリセットせずにロック状態をリセットできたらいいですね。これは以前にも起こりましたが、今回は適切に行う方法を知りたいと思います。
Ubuntuのコマンドラインツールは知りません。 (Num Lockの場合、 numlockx 。)これは、ターミナルウィンドウにコピーアンドペーストできる1行のライナーです。
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)'
ここでも、より拡張された形式になっています。 Pythonctypesライブラリ を使用して、C関数を Xライブラリ から直接呼び出します。関数 XkbLockModifiers
は、コアキーボード上のキーボードロックの状態を変更し(XkbUseCoreKbd
= 0x0100)、Caps Lock(2)に影響を与え、0(オフ)に設定します。
#!/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 = Shift、2 = Lock(Caps Lock)、4 = Control、8 = Mod1、16 = Mod2、32 = Mod3、64 = Mod4、128 = Mod5です。 xmodmap -pm
を実行して、Mod1からMod5に対応するものを確認します。たとえば、すべての修飾子をオフにするには、X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(255), c_uint(0))
を呼び出します。 Mod2にあるNum Lockをオンにすると同時にCaps Lockをオフにするには、X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2 | 16), c_uint(16))
を呼び出します。
Pythonを呼び出す代わりに小さなバイナリを作成する場合のCバージョンを次に示します。パッケージ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;
}
また、Caps Lockを一時的に無視する方法も興味深いでしょう:
xkbset nullify lock
この後、Caps Lockは、xkbset nullify -lock
で再び有効にするまで、実質的に完全にオフになります。
Xオートメーションツールを使用して、必要なキーイベントを送信できます。
注:
初めて使用する場合、このソリューションでは、CAPSが現在アクティブな場合、新しいツールをインストールするために正しいパスワードをテープで記録する必要があります。
- つかいます SHIFT 小文字を入力するキー。
- アクセシビリティを有効にし、仮想キーボードをオーバーレイします。
- 外付けキーボードを再接続します。 (おかげで chris455 )
- Officeライターを開き、そこにパスワードを書き、大文字と小文字を変更してコピーし、パスワードダイアログに貼り付けます。
以前のオプションがすべて使用できない場合、または機能しない場合は、 Gilles 'answer/python script を使用してください。追加のツールをインストールする必要はありません。プレインストールされた
python
およびlibX11
共有ライブラリのみを使用します。
xdotool
を使用する
インストールする
Sudo apt-get install xdotool
CAPSダウン/アップイベントを送信する
xdotool key Caps_Lock
別のツールはxte
インストールする
Sudo apt-get install xautomation
CAPSロックダウン/アップイベントを送信する
xte "key Caps_Lock"
参照:
Gilles pythonバージョンが新しいubuntusで動作していない場合、開いているディスプレイに正しいリターンを設定すると、トリックが行われるようです:
#! /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 )から適応したコード
.bashrcでマップし直したためにCAPSにアクセスできない場合は、仮想端末(alt + ctl + fN)に切り替えてから元に戻すだけでうまくいきました。
この問題があり、OnBoardキーボード(Ubuntu MateのUniversal Access)を使用して修正できました。
オンにすると、CapsLockキーが赤色で表示されるか、何らかの形でロックされていることが示されます。次に、を押してオフに切り替えます。