J'ai un ordinateur portable mais aussi un clavier USB externe connecté. Est-il possible en quelque sorte de verrouiller le clavier intégré de l'ordinateur portable (les touches enfoncées ne devraient avoir aucun effet) tout en laissant le clavier externe réactif?
J'utilise Ubuntu Gnome 16.04. Mon ordinateur portable est Lenovo ThinkPad T420.
Oui, cela devrait être possible avec xinput
.
Pour commencer, exécutez xinput list
dans un terminal. Vous devriez voir quelque chose de similaire au suivant:
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)]
Maintenant, vous verrez probablement deux claviers, au lieu d'un seul, puisque vous avez deux claviers branchés. Je vous recommande de débrancher le clavier USB et d'exécuter la commande.
Prenez note de l'ID de Virtual core XTEST keyboard
. Dans mon cas, c'est 5
.
Branchez le clavier USB, car vous êtes sur le point de désactiver le clavier interne.
Exécutez cette commande:
xinput set-prop 5 "Device Enabled" 0
et remplacez 5 par votre ID de périphérique.
Pour réactiver le clavier:
xinput set-prop 5 "Device Enabled" 1`
remplacez 5 par votre identifiant d'appareil.
Vous pouvez également les placer dans des scripts séparés si vous le souhaitez et les exécuter à partir du terminal (ou créer des fichiers .desktop
dans les scripts que vous avez créés).
Edit:
Si vous le souhaitez, j’ai créé un script qui vérifie l’état du périphérique spécifié dans xinput
et le bascule (sur activé si désactivé, sur désactivé si activé). Vous devrez remplacer la variable device
par l'ID correspondant.
#!/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
Edit 2:
Script amélioré - détection automatique de l'ID de périphérique (à condition que son nom soit corrigé) et notifications de bureau.
#!/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