
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 list
in 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 .desktop
Dateien 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 xinput
und 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