Блокируйте встроенную клавиатуру ноутбука, но работайте с внешней клавиатурой USB
У меня есть ноутбук, но к нему также подключена внешняя клавиатура USB. Можно ли как-то заблокировать встроенную клавиатуру ноутбука (т.е. нажатие клавиш не должно иметь никакого эффекта), но сохранить внешнюю реагирующую?
Я использую Ubuntu Gnome 16.04. Мой ноутбук - Lenovo ThinkPad T420.
1 ответ
Да, это должно быть возможно с использованием xinput
,
Для начала беги xinput list
в терминале. Вы должны увидеть что-то похожее на следующее:
zachary@MCServer:~$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
Теперь вы, вероятно, увидите две клавиатуры, а не одну, поскольку у вас подключены две клавиатуры. Я рекомендую отключить USB-клавиатуру и запустить команду.
Принять к сведению удостоверение личности Virtual core XTEST keyboard
, В моем случае это 5
,
Подключите USB-клавиатуру, так как вы собираетесь отключить внутреннюю.
Запустите эту команду:
xinput set-prop 5 "Device Enabled" 0
и замените 5 идентификатором вашего устройства.
Чтобы снова включить клавиатуру:
xinput set-prop 5 "Device Enabled" 1`
замените 5 идентификатором вашего устройства.
Вы также можете поместить их в отдельные сценарии, если хотите, и запустить их из терминала (или создать .desktop
файлы к скриптам, которые вы делаете).
Редактировать:
Если вы хотите, я сделал скрипт, который будет проверять состояние указанного устройства в xinput
и включите его (чтобы включить, если выключен, чтобы выключить, если включен). Вам нужно будет изменить device
переменная к соответствующему идентификатору.
#!/bin/bash
device=5 #Change this to reflect your device's ID
output=$(xinput list-props $device | awk '/Device Enabled/{print $4}')
if [ $output == 1 ]
then
xinput set-prop $device "Device Enabled" 0
elif [ $output == 0 ]
then
xinput set-prop $device "Device Enabled" 1
else
echo "Something's up."
fi
Изменить 2:
Улучшенный скрипт - автоматическое определение идентификатора устройства (при условии, что его имя исправлено) и уведомления на рабочем столе.
#!/usr/bin/env bash
# name of the device - we hope this will not change
DEVNAME="AT Translated Set 2 keyboard"
# here we find the device ID corresponding to the name
device=$(xinput list | grep "${DEVNAME}" | sed "s/.*${DEVNAME}.*id=\([0-9]*\).*/\1/g")
# here we get the enabled state
state=$(xinput list-props $device | awk '/Device Enabled/{print $4}')
if [ ${state} == 1 ]; then
# if it is enabled, disable it and show a notification
xinput set-prop ${device} 'Device Enabled' 0
notify-send -u normal "Keyboard lock" "Keyboard \"${DEVNAME}\" (id=${device}) was disabled."
elif [ ${state} == 0 ]; then
# if it is disabled, enable it and show a notification
xinput set-prop ${device} 'Device Enabled' 1
notify-send -u normal "Keyboard lock" "Keyboard \"${DEVNAME}\" (id=${device}) was enabled."
else
# some weird state - do nothing and show critical notification
notify-send -u critical "Keyboard lock" "Keyboard \"${DEVNAME}\" (id=${device}) is neither enabled nor disabled. State is \"${state}\""
fi