Sperren Sie die eingebaute Laptop-Tastatur, aber halten Sie eine externe USB-Tastatur funktionsfähig

Sperren Sie die eingebaute Laptop-Tastatur, aber halten Sie eine externe USB-Tastatur funktionsfähig

Ich habe einen Laptop, aber auch eine externe USB-Tastatur daran angeschlossen. Ist es irgendwie möglich, die eingebaute Laptop-Tastatur zu sperren (d. h. Tastendrücke sollten keine Wirkung haben), die externe Tastatur aber weiterhin zu reagieren?

Ich verwende Ubuntu Gnome 16.04. Mein Laptop ist ein Lenovo ThinkPad T420.

Antwort1

Ja, dies sollte mithilfe von möglich sein xinput.

Führen Sie es zunächst xinput listin einem Terminal aus. Sie sollten ungefähr Folgendes sehen:

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)]

Jetzt werden Sie wahrscheinlich zwei Tastaturen statt nur einer sehen, da Sie zwei Tastaturen angeschlossen haben. Ich empfehle, die USB-Tastatur abzutrennen und den Befehl auszuführen.

Notieren Sie sich die ID von Virtual core XTEST keyboard. In meinem Fall ist es 5.

Schließen Sie die USB-Tastatur an, da Sie im Begriff sind, die interne Tastatur zu deaktivieren.

Führen Sie diesen Befehl aus:

xinput set-prop 5 "Device Enabled" 0

und ersetzen Sie 5 durch Ihre Geräte-ID.

So aktivieren Sie die Tastatur erneut:

xinput set-prop 5 "Device Enabled" 1`

Ersetzen Sie 5 durch Ihre Geräte-ID.

Sie können diese bei Bedarf auch in separate Skripte einfügen und diese vom Terminal aus ausführen (oder .desktopDateien für die von Ihnen erstellten Skripte erstellen).

Bearbeiten:
Wenn Sie möchten, habe ich ein Skript erstellt, das den Status des angegebenen Geräts überprüft xinputund umschaltet (auf „Ein“, wenn es ausgeschaltet ist, und auf „Aus“, wenn es eingeschaltet ist). Sie müssen die Variable in die entsprechende ID ändern 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

Bearbeitung 2:
Verbessertes Skript – automatische Geräte-ID-Erkennung (sofern der Name festgelegt ist) und Desktop-Benachrichtigungen.

#!/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

verwandte Informationen