По какой-то причине мой ноутбук застрял в замке крышки. У меня <и>капс лок</роз> ключ отображается параметр xmodmap
до hyper_l, поэтому я не'т у
caps_lock` ключ, чтобы выключить его. Есть ли способ я могу отключить его с помощью командной строки? Было бы неплохо, если бы я мог сбросить состояние блокировки без переустановки мой компьютер, специально для использования в будущем. Это случалось и раньше, но сейчас я хотел бы знать, как сделать это правильно на этот раз.
Я не'т знаю, что любой инструмент командной строки для этого в Ubuntu. (На Нум Лок, есть 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)'
Вот это еще раз в более развернутом виде. Мы используем питон под библиотеку для вызова функции C из X библиотека напрямую. Функция XkbLockModifiers
изменения состояния клавиатуры замки, на основной клавиатуре (XkbUseCoreKbd
= 0x0100), влияющих на капс лок (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=Шифт 2=блокировка (капс лок), 4=контроль, 8=в mod1, 16=в mod2, 32=Mod3, 64=кратны на 4, 128=Mod5. Запустить параметр xmodmap -ПМ
, чтобы увидеть, что в mod1 через Mod5 соответствуют. Например, чтобы отключить все модификаторы, называют Х11.XkbLockModifiers(дисплея, c_uint(0x0100), c_uint(255), c_uint(0)). Чтобы включить Нум Лок, который находится на в mod2 и в то же время выключите капс лок, называют
Х11.XkbLockModifiers(дисплея, c_uint(0x0100), c_uint(2 | 16), c_uint(16))`.
Здесь'ы на версию С Если вы хотите сделать небольшой бинарные вместо того, чтобы вызвать на языке Python. Компиляции с помощью GCC -о-стену -о caps_lock_off caps_lock_off.с-lX11, пакеты
построение-основыи
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 обнулить -замок`.
Х автоматизации инструменты могут быть использованы для отправки необходимых ключевых событий.
Примечание:<БР> для первого использования, это решение должен забинтовать правильный пароль, чтобы установить новый инструмент, если шапки активна:
- использовать <и>сдвиг</КБД> ключ для ввода строчных букв.
- обеспечить доступность, наложения виртуальной клавиатуры.
- повторного-подключения внешней клавиатуры. (Спасибо chris455)
- открыть кабинет писателя, там пароль писать, изменение регистра букв, скопируйте его, затем вставьте его в окно для ввода пароля.
если все предыдущие варианты невозможны или не'т работу, пойти с Жиль' ответить / скрипт Python. Для этого не нужно устанавливать никакого дополнительного инструмента, он использует только
питон
&libX11
общая Либ, которые предварительно установлены.
Используя xdotool и
судо apt-получить установку xdotool и
xdotool и ключ Caps_Lock
Другой инструмент - хте
судо apt-получить установку xautomation
хте-то "ключ Caps_Lock и"
Ссылки:
Как в 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)
Я имел эту проблему и был в состоянии исправить это с помощью встроенной клавиатуры (в Ubuntu Мате, под всеобщий доступ).
После включении вы увидите клавиши CapsLock-красный, или как-то отметила, что она заперта. Затем вы можете нажать, чтобы отключить.