Заблокируйте встроенную клавиатуру ноутбука, но сохраните внешнее функционирование клавиатуры USB

У меня есть ноутбук, но также и внешняя клавиатура USB, подключенная к нему. Так или иначе возможно заблокировать встроенную клавиатуру ноутбука (т.е. нажатые клавиши не должны иметь никакого эффекта), но сохраните внешний быстро реагирующим?

Я выполняю Ubuntu Gnome 16.04. Моим ноутбуком является Lenovo ThinkPad T420.

4
задан 31 August 2016 в 16:09

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
7
ответ дан 1 December 2019 в 09:13

Другие вопросы по тегам:

Похожие вопросы: