Desativar entrada de teclado e mouse no unix (abaixo de X)

28

Como se pode programaticamente "congelar" o teclado & Mouse temporariamente, para que ninguém mexesse no sistema?

Existem várias possibilidades em que isso é útil. Por exemplo, eu tenho um laptop e quero ter certeza de que ninguém o use enquanto eu for embora, mesmo que alguém saiba a senha ou possa adivinhar (como esposa ou filhos), assim como deprimir o apetite dos ladrões (como parece ser funcionamento). ou estou fazendo algo remotamente, então quero ter certeza de que o usuário no computador não perturbe.

    
por Philomath 21.07.2011 / 22:32

8 respostas

22

Assumindo que sua GUI é baseada em X (como quase todas as GUIs do UNIX são), use xinput .

Primeiro, liste seus dispositivos:

$ xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Windows mouse                             id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
↳ Windows keyboard                          id=7    [slave  keyboard (3)]

Relacione os detalhes do seu mouse (id = 6 em nosso exemplo):

$ xinput --list-props 6
Device 'Windows mouse':
    Device Enabled (112):   1
    Coordinate Transformation Matrix (114): 1.000000, 0.000000, 0.000000, 0.000000,   1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (222):     0
    Device Accel Constant Deceleration (223):       1.000000
    Device Accel Adaptive Deceleration (224):       1.000000
    Device Accel Velocity Scaling (225):    10.000000

Agora desabilite:

$ export DISPLAY=:0
$ xinput set-int-prop 6 "Device Enabled" 8 0

Para ativar:

$ xinput set-int-prop 6 "Device Enabled" 8 1

O mesmo vale para o teclado, apenas substitua o número int-prop pelo id apropriado.
Testado e trabalhado no cygwin.

É claro que você precisa planejar antecipadamente como vai ativar seus dispositivos novamente. como agendar no cron, reativá-lo remotamente ou desativar apenas um deles em primeiro lugar.

    
por 21.07.2011 / 22:36
13

xinput --set-int-prop está obsoleto. Você deve usar --set-prop . Além disso, xinput --enable [device] e xinput --disable [device] podem ser usados para ativar e desativar dispositivos, respectivamente.

Aqui está um script de shell que uso para ativar, desativar e alternar o touchpad do meu laptop:

#!/bin/bash
# Enables, disables, or toggles device

device='AlpsPS/2 ALPS GlidePoint'
if [[ $1 == -e ]] ; then
    # Enable
    #xinput --set-prop "$device" "Device Enabled" 1
    xinput --enable "$device"
elif [[ $1 == -d ]] ; then
    # Disable
    #xinput --set-prop "$device" "Device Enabled" 0
    xinput --disable "$device"
elif [[ $1 == -t ]] ; then
    # Toggle
    if [[ $(xinput list-props "$device" |
       grep "Device Enabled") == *:*1 ]] ; then
           #xinput --set-prop "$device" "Device Enabled" 0
           xinput --disable "$device"
    else
        #xinput --set-prop "$device" "Device Enabled" 1
        xinput --enable "$device"
    fi
else
    echo "usage: $0 [-edt]"
fi
    
por 21.10.2012 / 14:25
6

A pergunta respondida usando xinput é a correta, mas aqui está uma rápida se tudo que você está procurando é um simples bloqueio de tipo de protetor de tela. Eu escrevi isso nos anos 90, e tudo o que ele faz é comer os eventos de teclado e mouse do servidor X, até você digitar a senha. Nenhum feedback é diferente de sair quando você digita corretamente.

link

Eu uso como um bloqueio de tela, exatamente como você deseja usá-lo.

    
por 30.11.2011 / 09:59
2

Sua resposta provavelmente é melhor para seu segundo caso de uso (fazendo algo remotamente), mas provavelmente não para o seu primeiro (ficar longe do teclado). Como você executaria o xinput novamente para restaurar o acesso quando retornar?

A solução padrão para bloquear o sistema enquanto está longe dele é o XScreenSaver , que é instalado por padrão na maioria das distros. Se configurado para bloquear o teclado, ele solicitará sua senha antes de desbloqueá-la.

    
por 22.07.2011 / 01:33
2

Pelo menos em sistemas baseados no Debian, como o Ubuntu, existe um utilitário chamado xtrlock (1) disponível através dos repositórios de pacotes.

Este utilitário bloqueia o teclado e o mouse até que a senha seja digitada, deixando as janelas visíveis. Acho útil para computadores que exibem informações e afins.

    
por 15.09.2014 / 17:49
1

Dependendo do seu hardware, você pode remover os módulos, controlando seu hardware. Eu tenho esse script, touchpadtoggle , para ativar e desativar meu touchpad.

lsmod | grep -q psmouse && rmmod psmouse || modprobe psmouse

Mas o teclado não parece ter um módulo associado e o módulo psmouse só funcionará ocasionalmente.

    
por 30.07.2011 / 23:32
1

Se você estiver usando um ambiente de desktop ou gerenciador de login, (GNOME, KDE, XFCE, LXDE), quase todos eles têm uma função de tela de bloqueio, onde você tem que digitar sua senha para voltar aos seus programas.

No entanto, como isso é realmente simples, sinto que seu problema é mais complexo / diferente.

    
por 22.07.2011 / 01:33
1

Eu escrevi isso (em .zshrc , mas deve funcionar em .bashrc também) para fazer isso, com a ajuda das respostas acima. Para fazer o correspondente com o teclado, altere o parâmetro em grep Mouse .

setmouse () {
 xinput \
  $1 \
  'xinput | grep Mouse | tr -d " " | tr "\t" " " | cut -d" " -f2 | cut -d"=" -f2'
}
offmouse () { setmouse disable }
onmouse  () { setmouse enable  }
    
por 01.01.2013 / 00:28