web-dev-qa-db-fra.com

Verrouiller le clavier intégré de l'ordinateur portable mais garder un clavier USB externe en fonction

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.

4
zegkljan

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
7
TheWanderer