Estou tentando programar uma tecla especial que não funciona no meu teclado usando os eventos acpi, e já consegui que o acpi reconhecesse um pressionamento de tecla e o transmitisse para um script de shell. No entanto, por algum motivo, não consigo executar uma chamada para o xinput; ele sempre retorna com um código de saída 1 e nenhuma saída. Ao executar o shell script manualmente, ele funciona.
Também notei que, se eu ligar, xinput --version
obtenho um resultado correto chamando manualmente, mas quando é chamado por meio da acpi, ele retorna o código de saída 1 e Server: failed to open display
, então acho que eles estão relacionados de alguma forma.
Meu script bash é bastante fácil neste momento, mas se não consigo chamar o xinput, é inútil (já que preciso ativar/desativar usando comandos xinput).
#!/bin/bash
touch="0000006b"
if [ "$3" != $touch ]; then
# Ignore, not a touchpad event
echo "$3 is not matching $touch, ignoring"
exit 0
fi
# Process event
echo "Got a touchpad keypress"
getTouchDeviceId()
{
# extract the device id for the supplied touch device name
xinput list | sed -nr "s|.*$1.*id=([0-9]+).*|\1|p"
}
ENABLEPROP="Device Enabled"
# Get the xinput device number and enabling property for the touchpad
XINPUTNUM=$(getTouchDeviceId "PS/2 Elantech Touchpad")
# Removed the rest
Eu verifiquei muitas coisas (o ambiente deve estar ok, ele pode encontrar o executável) e sei que o código estava funcionando em algum momento (é baseado no código enviado emUbuntuno passado.
Um whoami no script revelou que ele é executado como root, enquanto o ambiente de desktop provavelmente está vinculado à minha conta de usuário normal, mas não tenho certeza de como poderia consertar isso...
Editar: Ao executar o xinput como root a partir de um terminal (ou executar o shell manualmente como root), ele funciona. Quando é chamado como root através do script ativado pela acpi, não está funcionando.
Alguém teria uma sugestão de como eu poderia consertar isso?
Responder1
xinput precisa das variáveis de ambiente DISPLAY e XAUTHORITY. 'exportar' estes no topo do script.