Sim, isso deve ser possível, com o uso de xinput
.
Para começar, execute xinput list
em um terminal. Você deve ver algo semelhante ao seguinte:
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)]
Agora, você provavelmente verá dois teclados, em vez de apenas um, já que tem dois teclados conectados. Recomendo desconectar o teclado USB e executar o comando.
Anote o ID de Virtual core XTEST keyboard
. No meu caso, é 5
.
Conecte o teclado USB, já que você está prestes a desativar o teclado interno.
Execute este comando:
xinput set-prop 5 "Device Enabled" 0
e substitua 5 pelo ID do seu dispositivo.
Para reativar o teclado:
xinput set-prop 5 "Device Enabled" 1'
substitua 5 pelo ID do seu dispositivo.
Você também pode colocá-los em scripts separados, se desejar, e executá-los no terminal (ou criar .desktop
arquivos para os scripts criados).
Editar:
Se você quiser, eu fiz um script que irá verificar o estado do dispositivo especificado em xinput
e alterná-lo (para on se off, para off if on). Você precisará alterar a variável device
para o ID correspondente.
#!/bin/bash
device=5 #Change this to reflect your device's ID
output=$(xinput list-props $device | awk '/Device Enabled/{print }')
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
Editar 2:
Script aprimorado - detecção automática de ID de dispositivo (desde que seu nome seja corrigido) e notificações na área de trabalho.
#!/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]*\).*//g")
# here we get the enabled state
state=$(xinput list-props $device | awk '/Device Enabled/{print }')
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