Вопрос или проблема
Неделю назад я пролил содержимое своей кружки на клавиатуру ноутбука. Половина клавиш больше не работает, кроме одной! Буквы Q, которая очень активно используется.
Это очень беспокоит, так как я работаю.
Существует ли способ отключить встроенную клавиатуру ноутбука?
Можно ли это сделать с помощью xmodmap
?
Вы можете использовать xinput
для отключения устройства ввода в X.
- Выполните команду
xinput list
, чтобы получить список своих устройств ввода. - Найдите
AT Translated Set 2 keyboard
и запомните его номерid
; он будет использован для отключения клавиатуры. Также запомните номер в конце,[slave keyboard (#)]
; это номерmaster
, который будет использоваться для повторного включения клавиатуры. - Чтобы отключить клавиатуру, выполните команду
xinput float <id#>
, где<id#>
– это номер идентификатора вашей клавиатуры. Например, еслиid
равен10
, то команда будетxinput float 10
. - Чтобы повторно включить клавиатуру, выполните команду
xinput reattach <id#> <master#>
, гдеmaster
– это второй номер, который мы записали. Если номер был3
, вы выполнитеxinput reattach 10 3
.
Вот демонстрация:
$ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)] ⎜ ↳ Logitech USB-PS/2 Optical Mouse id=12 [slave pointer (2)] ⎜ ↳ Logitech Unifying Device. Wireless PID:4004 id=13 [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)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Sleep Button id=8 [slave keyboard (3)] ↳ Acer CrystalEye webcam id=9 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=10 [slave keyboard (3)] $ xinput float 10 $ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)] ⎜ ↳ Logitech USB-PS/2 Optical Mouse id=12 [slave pointer (2)] ⎜ ↳ Logitech Unifying Device. Wireless PID:4004 id=13 [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)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Sleep Button id=8 [slave keyboard (3)] ↳ Acer CrystalEye webcam id=9 [slave keyboard (3)] ∼ AT Translated Set 2 keyboard id=10 [floating slave] $ xinput reattach 10 3 $ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)] ⎜ ↳ Logitech USB-PS/2 Optical Mouse id=12 [slave pointer (2)] ⎜ ↳ Logitech Unifying Device. Wireless PID:4004 id=13 [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)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Sleep Button id=8 [slave keyboard (3)] ↳ Acer CrystalEye webcam id=9 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=10 [slave keyboard (3)]
Вот небольшой переключатель для включения и отключения конкретной клавиатуры.
Сначала вы должны найти идентификатор вашей клавиатуры с помощью xinput
или xinput-list
.
Скрипт Bash для включения/выключения клавиатуры
#!/bin/bash
Icon="/PATH/TO/ICON_ON"
Icoff="/PATH_TO_ICON_OFF"
fconfig=".keyboard"
id=12
if [ ! -f $fconfig ]; then
echo "Создание конфигурационного файла"
echo "enabled" > $fconfig
var="enabled"
else
read -r var< $fconfig
echo "клавиатура: $var"
fi
if [ "$var" = "disabled" ]; then
notify-send -i $Icon "Включение клавиатуры..." \ "ВКЛ - Клавиатура подключена!";
echo "включение клавиатуры..."
xinput enable $id
echo "enabled" > $fconfig
elif [ "$var" = "enabled" ]; then
notify-send -i $Icoff "Отключение клавиатуры" \ "ВЫКЛ - Клавиатура отключена";
echo "отключение клавиатуры"
xinput disable $id
echo 'disabled' > $fconfig
fi
Конфигурация
-
Icon
как путь к значку для отображения при включении (например,/home/user/path/icon.png
) -
Icoff
как путь к значку для отображения при отключении -
Я использовал следующие значки :
-
id
как идентификатор клавиатуры (найдите его с помощьюxinput
) -
fconfig
путь к конфигурационному файлу. Измените, если хотите создать конфигурационный файл в другой директории
Не пытайтесь запустить скрипт, если вы не можете запустить его снова без использования клавиатуры (если только у вас нет другой клавиатуры, конечно). Создайте следующий запускатель (в home/user/.local/share/applications
) и добавьте его в unity :
Запись на рабочем столе (запускатель Unity, Ubuntu 17.10 и ниже)
[Desktop Entry]
Version=1.0
Type=Application
Name=Клавиатура ВКЛ-ВЫКЛ
Icon=PATH/TO/YOUR/ICON
Exec=bash NAME_OF_YOUR_SCRIPT.sh
Path=PATH/TO/YOUR/SCRIPT
NoDisplay=false
Categories=Utility;
StartupNotify=false
Terminal=false
Результат
Запускатель:
[
Уведомления:
[
[
Идентификаторы устройств id
, полученные с помощью xinput list
как предложено в принятом ответе, иногда изменяются при перезагрузке (по крайней мере, на моем ПК), что приводит к отключению неправильного устройства.
Вот почему я в конечном итоге начал использовать device name
вместо id
, например:
xinput disable "AT Translated Set 2 keyboard"
Чтобы постоянно отключить внутреннюю клавиатуру вашего ноутбука, используйте параметр ядра i8042.nokbd
, который отключает проверку и создание порта клавиатуры:
i8042.nokbd [HW] Не проверять/создавать порт клавиатуры
Откройте терминал и выполните следующую команду:
$sudo gedit /etc/default/grub
Найдите следующую строку:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Добавьте параметр i8042.nokbd
.
Указанная выше строка должна выглядеть так:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.nokbd"
Обновите grub с помощью следующей команды:
$sudo update-grub
Затем перезагрузите
ноутбук.
Я подумал о 2 способах, как вы можете это сделать:
-
Настроив неправильную модель для клавиатуры вашего ноутбука в xorg.conf ?
-
Установив Lock-keyboard-for-Baby
`Lock-keyboard-for-Baby или lk4b – это небольшая программа, которая блокирует вашу клавиатуру, но оставляет вашу мышь свободной. Я написал её, потому что моя племянница любит стучать по моей клавиатуре всякий раз, когда видит, что я садюсь за неё. Нажатия клавиш на клавиатуре могут иметь катастрофические последствия, и я не хотел всё время блокировать свой экран с помощью скринсейвера.
При запуске lock-keyboard-for-baby открывает небольшое окно, которое захватывает клавиатуру и отображает нажатые клавиши. По умолчанию оно говорит вам, что нужно ввести для выхода (“Quit Now”).
В отличие от скринсейвера, ваш экран не блокируется, и мышь все еще работает частично, так что вы все равно можете видеть, что на экране – продолжайте смотреть телевизор / видео и/или читать документ, используя мышь для прокрутки.`
Требования:
· GTK >= 2.x
· perl GTK2 bindings (perl-gtk2 или gtk2-perl в зависимости от вашей системы)
Один надежный способ отключить его – вытащить сигнальный кабель. Для этого нужно открыть клавиатуру. Для получения информации о том, как это сделать, посмотрите Руководство по обслуживанию и обслуживанию HP Pavilion dv9000 и dv9200 Notebook PC.
Теперь есть способ отключить клавиатуру, используя xinput
. Для этого просто нажмите Ctrl+Alt+T на клавиатуре, чтобы открыть терминал. Когда он откроется, выполните команды ниже.
Чтобы перечислить устройства вашего X
xinput --list
Чтобы отключить клавиатуру:
xinput set-int-prop 2 "Device Enabled" 8 0
Чтобы снова включить клавиатуру:
xinput set-int-prop 2 "Device Enabled" 8 1
Если вы получили ошибку о правах доступа, используйте приведенные выше команды с sudo
.
В результате я обнаружил:
$ xinput float id#;sleep t;xinput reattach id# master#
t -время для сна в секундах
id# и master# упомянуты выше (вверху страницы)
Например, в моем терминале:
$ xinput float 11;sleep 5;xinput reattach 11 3
Индикатор устройства ввода позволяет вам включать и/или отключать ваши устройства из меню. Он использует xinput
внутренне, но вам не нужно открывать терминал, перечислять вручную, вводить команду и т.д.
Он находится в PPA, так что вы можете установить его с помощью
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 03BBACDA765F39D9A14EEDE4425F3F9343B40373
sudo add-apt-repository ppa:brandizzi/ppa
sudo apt install input-device-indicator
Чтобы вызвать его, вам просто нужно выполнить input-device-indicator
(который можно добавить в программу автозапуска) или найти “Индикатор устройства ввода” через HUD (или как это называется в наши дни).
Попробуйте выполнить xmodmap -e 'keycode 24='
, чтобы отключить только кнопку Q. Если это сработает, вы можете добавить его в свой ~/.bashrc
или глобальный файл /etc/bash.bashrc
. Я взял эту идею из здесь, где показаны все сопоставления клавиш.
На всякий случай, исходя из предыдущих ответов и моего собственного эксперимента, я создал следующий скрипт, который я называю toggle_keyboard.sh
и помещаю в свой путь ~/bin
. У меня есть сочетание клавиш, которое его запускает, установленное на CtrlWinK.
Некоторые проблемы с предыдущими ответами и преимущества моего скрипта:
- Опора на номер идентификатора с xinput не работает при перезагрузке, когда номер идентификатора изменяется. Это случилось со мной, когда я запустил
xinput float 13
. Я в итоге отключил неправильное оборудование. - Опора на файл для хранения состояния включенной/выключенной клавиатуры также не сработает при перезагрузке. Файл будет говорить вам, что клавиатура отключена (если вы отключили ее с помощью скрипта), но после перезагрузки она снова будет включена. Мое решение получает информацию о включенном/выключенном состоянии из проанализированной команды xinput.
- Мой скрипт будет работать с любым устройством xinput, которое появляется, когда вы вводите
xinput list --name-only
. Просто получите имя и отредактируйте верхние четыре переменные. Я использую его для своей клавиатуры ноутбука, веб-камеры, сенсорного монитора и нескольких других вещей, которые использую только время от времени.
#!/bin/bash
# Переключить клавиатуру ноутбука либо включенной, либо отключенной и уведомить пользователя об этом
# Имя устройства можно найти, выполнив эту команду: xinput list --name-only
DEVICE_NAME="AT Translated Set 2 keyboard"
# Отображаемое имя устройства в уведомлении
DEVICE_DISPLAY_NAME="Клавиатура ноутбука"
# Установите эти значения на значки, которые вы хотите использовать.
# Если они не найдены, уведомление все равно будет работать.
ICON_ENABLE="$HOME/.icons/keyboard.png"
ICON_DISABLE="$HOME/.icons/keyboard_disabled.png"
function xinput_set_prop() {
xinput set-prop "$DEVICE_NAME" "Device Enabled" $1
}
function notify_change() {
if [ -f "$1" ]; then
notify-send --urgency=low --icon="$1" "$2"
else
notify-send --urgency=low "$2"
fi
}
# Возвращает 1, если устройство включено, 0, если отключено
is_enabled=$(xinput list-props "$DEVICE_NAME" | grep "Device Enabled" | awk '{ print $4 }' | sed 's/[^0-9]*//g')
if [ $is_enabled -eq 1 ]; then
# устройство включено, поэтому отключаем его
xinput_set_prop 0
notify_change "$ICON_DISABLE" "$DEVICE_DISPLAY_NAME Отключено"
else
# устройство отключено, так что включаем его
xinput_set_prop 1
notify_change "$ICON_ENABLE" "$DEVICE_DISPLAY_NAME Включено"
fi
xinput float “AT Translated Set 2 keyboard”
После многочасовой работы с разными методами на разных дистрибутивах и версиях, команда терминала выше – это то, на что я полагаюсь после проблем… Я сейчас использую это с neon plasma и использовал месяц назад в обычном ubuntu 18.04.
(нужно применить после перезагрузки – можно добавить в автозагрузку)
* Моя встроенная клавиатура на моем ноутбуке HP повреждена и начинает набирать текст, что вызывает серьезные проблемы – я использую беспроводную клавиатуру и мышь – тачпад включен/выключен как часть параметров верхней панели KDE – neon/plasma 5).
В настройках системы / автозагрузка
Текстовый файл с приведенной ниже строкой кода сохраняется как .sh файл и устанавливается как исполняемый (свойства текстовых файлов)
xinput float “AT Translated Set 2 keyboard”
Файлу текста присваивается имя > keyboardoff > и помещается в автозагрузку (исполнимый)
Когда вы перезагрузите / запустите систему > встроенная клавиатура будет выключена.
(используйте xinput list, чтобы проверить)
#Отключить встроенную клавиатуру на Ubuntu
# Найти идентификатор клавиатуры
KeyboardID=$(xinput list | grep "Translated Set 2 keyboard" | awk '{ gsub(/[[:alpha:]]|[[:punct:]]/," ")}1' | awk '{print $3}')
# Найти идентификатор мастера
MasterDeviceID=$(xinput list | grep "Translated Set 2 keyboard" | awk '{ gsub(/[[:alpha:]]|[[:punct:]]/," ")}1' | awk '{print $4}')
# Команда для отключения клавиатуры
xinput float $KeyboardID
# Команда для включения клавиатуры
xinput reattach $KeyboardID $MasterDeviceID
Ранее упомянутые методы могут быть слишком экстремальными, как i8042.nokbd
, или ограничены Xserver. Однако есть другой подход, который достигает аналогичного результата, как параметр i8042.nokbd
, но при этом легко отменить, так же как и методы X-сервера.
Чтобы отвязать устройство от соответствующего драйвера в повышенном терминале, выполните:
echo -n 'serio0' > '/sys/bus/serio/drivers/atkbd/unbind'
Чтобы повторно привязать или включить клавиатуру, используйте:
echo -n 'serio0' > '/sys/bus/serio/drivers/atkbd/bind'
Примечание: На некоторых устройствах клавиатура будет автоматически привязываться сама. Чтобы предотвратить это, вам нужно изменить режим привязки устройства с авто на ручной, выполнив:
echo -n 'manual' | tee /sys/devices/platform/i8042/serio0/bind_mode
Также обратите внимание, что клавиатура не гарантируется, что она будет соответствовать serio0
, хотя это обычно так.
Еще один интересный способ добиться аналогичных результатов методам xinput на уровне чуть ниже xserver или любого современного дисплейного ввода – заставить libinput игнорировать ввод от устройства, используя атрибут udev LIBINPUT_IGNORE_DEVICE
.
Для дальнейших инструкций.
ENV{ID_INPUT}=””,источник.
Примечание: Первый метод действителен только для сеанса, вы можете создать правило udev или службу systemd, чтобы обеспечить постоянный эффект.
Ответ или решение
Да, существует несколько способов отключить встроенную клавиатуру ноутбука, и это можно сделать как временными, так и более постоянными методами. Ниже представлены наиболее распространенные методы для решения этой проблемы, учитывая ваш контекст.
1. Отключение с помощью xinput
xinput — это инструмент, который позволяет управлять входными устройствами в X-системах. Чтобы отключить встроенную клавиатуру, выполните следующие шаги:
Шаги:
-
Список устройств: Откройте терминал и выполните команду:
xinput list
Это покажет список всех входных устройств. Найдите вашу клавиатуру (например, "AT Translated Set 2 keyboard") и запомните ее идентификатор (id).
-
Отключение клавиатуры: Выполните команду:
xinput float <id>
Здесь
<id>
— это идентификатор клавиатуры, который вы получили на предыдущем шаге. -
Включение клавиатуры: Чтобы снова включить клавиатуру, выполните команду:
xinput reattach <id> <master_id>
Где
<master_id>
— это идентификатор родительского устройства, который также можно найти в результате предыдущей команды.
Скрипт для удобства
Если вам нужно часто отключать и включать клавиатуру, вы можете создать Bash-скрипт:
#!/bin/bash
DEVICE_NAME="AT Translated Set 2 keyboard"
is_enabled=$(xinput list-props "$DEVICE_NAME" | grep "Device Enabled" | awk '{print $4}')
if [ "$is_enabled" -eq 1 ]; then
xinput disable "$DEVICE_NAME"
notify-send "$DEVICE_NAME отключена"
else
xinput enable "$DEVICE_NAME"
notify-send "$DEVICE_NAME включена"
fi
2. Использование параметров ядра
Если вам нужно отключить клавиатуру более постоянно, вы можете добавить параметр ядра в GRUB:
-
Открытие GRUB конфигурации:
sudo gedit /etc/default/grub
-
Поиск строки:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
-
Добавление параметра:
Измените строку на следующую:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.nokbd"
-
Обновление GRUB:
После этого сохраните изменения и выполните команду для обновления GRUB:sudo update-grub
-
Перезагрузка системы: Перезагрузите ноутбук, чтобы изменения вступили в силу.
3. Установление переменных udev
Для более постоянного отключения встроенной клавиатуры вы также можете использовать правила udev:
-
Создайте файл, например,
/etc/udev/rules.d/99-disable-keyboard.rules
. -
Добавьте в него правило, чтобы игнорировать клавиатуру:
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="AT Translated Set 2 keyboard", ENV{ID_INPUT}=""
-
После внесения изменений перезагрузите систему.
Заключение
Методы, описанные выше, являются эффективными способами отключения встроенной клавиатуры ноутбука. Выбор метода зависит от ваших нужд — временное отключение через xinput подходит для однократного использования, тогда как GRUB или udev подходят для долговременных решений. В обоих случаях, будьте осторожны при выполнении этих действий, особенно если планируете использовать только внешний ввод. Если возникнут проблемы при выполнении изменений, вы всегда сможете восстановить настройки, используя внешний клавиатурный терминал или предустановленные средства.