По какой-то причине мой ноутбук застрял в Caps Lock. У меня есть Caps Lockключ, связанный xmodmap
с hyper_l
, поэтому у меня нет caps_lock
ключа, чтобы выключить его. Есть ли способ, которым я могу отключить его с помощью командной строки? Было бы неплохо, если бы я мог сбросить состояние блокировки без перезагрузки компьютера, особенно для дальнейшего использования. Это уже случалось раньше, но я хотел бы знать, как это сделать правильно на этот раз.
command-line
xmodmap
capslock
Echogene
источник
источник
Ответы:
Я не знаю ни одного инструмента командной строки для этого в Ubuntu. (Для Num Lock есть numlockx .) Вот одна строка, которую вы можете скопировать и вставить в окно терминала:
Здесь это снова в более расширенной форме. Мы используем библиотеку Python ctypes для непосредственного вызова функций C из библиотеки X. Функция
XkbLockModifiers
изменяет состояние блокировок клавиатуры на основной клавиатуре (XkbUseCoreKbd
= 0x0100), воздействуя на Caps Lock (2), устанавливая его на 0 (выкл.).Если у вас есть застрявший модификатор, измените 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))
. Чтобы включить Num Lock, который включен в Mod2, и одновременно отключить Caps Lock, позвонитеX11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2 | 16), c_uint(16))
.Вот версия на C, если вы хотите создать небольшой двоичный файл вместо вызова Python. Скомпилируйте
gcc -O -Wall -o caps_lock_off caps_lock_off.c -lX11
с пакетамиbuild-essentials
иlibx11-dev
установите.Также возможно интерес представляет способ временно игнорировать Caps Lock:
После этого Caps 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'
. Я не утверждаю, что пойму результат, но попробую.Инструменты X могут быть использованы для отправки требуемых ключевых событий.
С помощью
xdotool
Установить его
Отправить событие CAPS вниз / вверх
Еще один инструмент
xte
Установить его
Отправить CAPS блокировки вниз / вверх
Рекомендации:
man xdotool
man xte
источник
Что касается Python-версии Gilles, не работающей в более новой версии Ubuntus, похоже, что установка правильного возврата для открытого дисплея имеет смысл:
(Код адаптирован с https://stackoverflow.com/questions/29638210/how-can-i-use-python-xlib-to-generate-a-single-keypress )
источник
Если вы не можете получить доступ к CAPS, потому что вы переназначили его в .bashrc, как я сделал, тогда просто переключение на виртуальный терминал (alt + ctl + fN) и затем переключение обратно работало для меня.
источник
У меня была эта проблема, и я смог ее исправить, используя клавиатуру OnBoard (в Ubuntu Mate, под Universal Access).
После включения вы должны увидеть, что ключ CapsLock красный или каким-то образом указывает, что он заблокирован. Затем вы можете нажать, чтобы выключить.
источник