Para verificar se o dispositivo está no modo tablet ou não, poderíamos ler o valor
( 0
ou 1
) de:
/sys/devices/platform/thinkpad_acpi/hotkey_tablet_mode
Este valor é trocado por eventos específicos. Podemos capturar esses eventos e vincular scripts a eles usando acpid
- Advanced O daemon de eventos Configuration e Power Interface.
1. Capture os eventos. Execute um dos comandos a seguir, gire a tampa no modo tablet e gire-o de volta: acpi_listen
ou netcat -U /var/run/acpid.socket
. Aqui está um exemplo de saída:
$ acpi_listen
video/tabletmode TBLT 0000008A 00000001
video/tabletmode TBLT 0000008A 00000000
Por favor, note que quando a tampa está fechada, o resultado é diferente:
$ acpi_listen
button/lid LID close
button/lid LID open
2. Configure acpid
para reconhecer os eventos acionados quando o dispositivo altera o estado do modo tablet. (Os scripts para abertura / fechamento da tampa não são fornecidos aqui.) Execute as seguintes linhas no terminal como um comando (único):
cat << EOF | sudo tee /etc/acpi/events/thinkpad-tablet-enabled
# /etc/acpi/events/thinkpad-tablet-enabled
# This is called when the lid is placed in tablet position on
# Lenovo ThinkPad X230 Tablet
event=video/tabletmode TBLT 0000008A 00000001
action=/etc/acpi/thinkpad-touchpad-twist-mode.sh 1
EOF
cat << EOF | sudo tee /etc/acpi/events/thinkpad-tablet-disabled
# /etc/acpi/events/thinkpad-tablet-disabled
# This is called when the lid is placed in normal position on
# Lenovo ThinkPad X230 Tablet
event=video/tabletmode TBLT 0000008A 00000000
action=/etc/acpi/thinkpad-touchpad-twist-mode.sh 0
EOF
Os comandos acima criarão os arquivos:
-
/etc/acpi/events/thinkpad-tablet-enabled
-
/etc/acpi/events/thinkpad-tablet-disabled
3. Reinicie o acpid
para que ele possa reler os filtros de evento, incluindo os que você acabou de adicionar:
sudo systemctl restart acpid.service
4. Crie o script /etc/acpi/thinkpad-touchpad-in-twist-mode.sh
que desativará 1
e habilite 0
do touchpad ( &&
torne-o executável):
cat << EOF | sudo tee /etc/acpi/thinkpad-touchpad-twist-mode.sh && sudo chmod +x /etc/acpi/thinkpad-touchpad-twist-mode.sh
#!/bin/sh
LANG=C # Ensure stable parsing
export DISPLAY="\$(w | awk 'NF > 7 && \ ~ /tty[0-9]+/ {print \; exit}' 2>/dev/null)" # Get and export the current user's \$DISPAY
export XAUTHORITY="/home/\$(w | awk 'NF > 7 && \ ~ /tty[0-9]+/ {print \; exit}' 2>/dev/null)/.Xauthority" # Get and export the currentuser's \$XAUTHORITY
ID="\$(xinput | grep -ioP 'touchpad.*id=\K[0-9]*')" # Find the TouchPad device ID
if [ "\" -eq 0 ]; then xinput enable "\$ID" # Laptop mode or Lid is open
elif [ "\" -eq 1 ]; then xinput disable "\$ID" # Tablet mode or Lid is closed
fi
EOF
- O script analisará e exportará as variáveis de ambiente
$DISPAY
e$XAUTHORITY
da sessão do usuário atual, para permitir queroot
(que executa o processoacpid
) acesse a sessão X do usuário, respectivamente% código%. - Em seguida, o script analisará o
xinput
do touchpad. E, dependendo da variável de entrada,id=
ativará ou desativará o touckpad.
Referências:
- ArchWiki:
$1
- daemon de evento Advanced Configuration e Power Interface. - Solicitar ao Ubuntu: Como desabilitar o touchpad enquanto a tampa está abaixada?
- ThinkWiki: Instalando o Ubuntu 12.10 no Thinkpad Twist | Thinkpad-acpi | Wacom Tablet Stilus
- Fóruns do Ubuntu: Touchpad ON / OFF | Por que esse evento de acpi não funciona?
- Sobre a análise, leia: Encontre programaticamente o valor atual de DISPLAY usando
acpid
ew
e Remova palavras específicas de linhas usandoawk
.