Como executar um script quando a senha é inserida na tela de bloqueio?

6

Para ativar / desativar o touchpad do meu notebook de acordo com o mouse USB conectado, usei o touchpad-indicator, que executa um daemon para monitorar os dispositivos conectados e tomar as medidas adequadas. Quando eu mando o notebook para dormir e, em seguida, desconecto meu mouse, quando ele acorda, o touchpad está desabilitado, então eu tenho que desconectar o mouse para habilitá-lo! Eu procurei neste fórum pelo problema e encontrei soluções (adicionar script em /etc/pm/sleep.d ou /usr/lib/pm-utils/sleep.d ) não funcionou! Eu coloquei um pergunta para resolvê-lo, mas depois de tudo, mesmo quando trabalhado novamente usando as regras do udev em vez do indicador do touchpad, o problema ainda persiste!

Eu quero esclarecê-lo: se o touchpad estava desativado no nível do sistema (ou seja, desativado antes mesmo de fazer login e o script estaria em rc.local , que, no entanto, tentei e não funcionou), colocando scripts em / etc / pm e usr / lib / pm-utils podem funcionar .

Mas ele está desativado no nível da sessão ou em qualquer outro nível ao qual o udev se aplique. Você pode por favor me dizer onde colocar scripts que serão executados quando eu digitar a senha? NÃO ENTRE EM CONTATO, MAS ENTRE SENHA por exemplo depois do despertar.

Atualização: @terdon Você não entendeu bem. Eu nem tenho o xscreensaver ativado, duvido que esteja instalado. Você vê, porque minha conta tem uma senha, se eu pressionar "Sair" ou "Alterar usuário" OU SLEEP MODE, depois disso eu terei que digitar minha senha, e não tem nada a ver com xscreensaver ou qualquer SCREENSAVERS I DON ' TÊ-LOS.

Eu tentei o que você sugeriu antes de fazer essa pergunta e não deu certo.

Atualização 2: Ok, depois de alguma investigação, posso dizer que é um problema específico do Lubuntu. Eu estou trabalhando agora em "befriending" lightdm (que eu acho que se aplica em algum nível outro do que o udev) e udev. Qualquer pessoa com alguma experiência com o lighdm é apreciada.

Atualização 3: Graças ao Ubuntu Wiki eu (corretamente?) Descobri onde colocar a chamada do meu script. Então, adicionei session-setup-script=/home/n76/tptoggle.sh a /etc/lightdm/lightdm.conf A situação atual é a mesma que no começo, exceto que o lightdm está realmente tentando colocar o touchpad quando a sessão do usuário é iniciada

O problema não desapareceu, mas sinto que estou perto e que estou apenas dando aos privilégios certos.

Por favor, sugira como fazer isso.

    
por mekkanizer 23.03.2014 / 23:11

1 resposta

2

Eu não sei se existe uma maneira de executar as coisas depois de digitar sua senha conforme você solicita e duvido que haja uma vez que isso é tratado pelo ambiente de área de trabalho (provavelmente o daemon de proteção de tela). No entanto, ele deve funcionar perfeitamente se você adicionar os scripts corretos a /etc/pm/sleep.d . Desde que você não tenha mostrado os scripts que você tentou, meu palpite é que você simplesmente não escreveu o script corretamente. O seguinte funciona bem no meu sistema:

  1. Crie um arquivo chamado /etc/pm/sleep.d/20_resume com o seguinte conteúdo:

    #!/bin/sh
    
    case "" in
        thaw|resume)
        /home/terdon/scripts/onoff.sh
        ;;
    esac
    exit $?
    

    Certifique-se de adaptar o caminho acima ( /home/terdon/scripts/onoff.sh ) ao caminho real do script mostrado na etapa 3.

  2. Conceda ao arquivo as permissões corretas ( rwxr-xr-x )

    sudo chmod 755 /etc/pm/sleep.d/20_resume
    
  3. Escreva um script que desative o touchpad se um mouse estiver conectado e ligado, se não houver mouse conectado:

    #!/bin/sh
    
    ## Get the xinput ID of the touchpad
    TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')
    
    ## Check if a mouse is connected and act accordingly
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    

    Agora salve o script acima usando o caminho e o nome da etapa 1 (neste exemplo, /home/terdon/scripts/onoff.sh ), torne-o executável ( chmod +x /home/terdon/scripts/onoff.sh ) e você deve estar definido.

Se isso é o que você já tentou, edite sua pergunta e mostre os scripts que você usou.

A outra abordagem que posso pensar é usar o procedimento descrito na minha resposta à sua outra pergunta . Eu não entendo o que você tem contra loops, eles são uma construção de programação perfeitamente válida e realmente inestimável. O único problema que posso pensar é que a execução de um loop infinito pode sobrecarregar sua CPU, mas isso não deve ser um problema se o script usar sleep para aguardar um segundo ou dois entre cada execução de loop. Desde que minha sugestão faz exatamente isso, você pode simplesmente usar isso se o acima falhar você.

    
por terdon 24.03.2014 / 05:32