O teclado do laptop ocasionalmente para de funcionar

3

Eu tenho uma solução suja que é conectar um teclado USB e executar o seguinte comando:

setxkbmap -rules evdev -layout us -model evdev

Depois, meu teclado funcionará.

Esta solução só funciona se eu tiver um teclado usb que raramente é o caso e eu sou forçado a reiniciar o meu laptop. Eu tentei ter o comando auto executar quando o sistema acorda, adicionando:

set -e

if [ "${1}" = "resume" ] && [ "${2}" != "standby" ]; then
        setxkbmap -rules evdev -layout us -model evdev
fi
exit 0

para: /etc/apm/event.d/enable_xkb Mas isso não funciona. Eu estou supondo porque não é executado pelo usuário apropriado.

Portanto, há duas respostas possíveis para essa pergunta: 1) Como faço para que o script acima seja executado depois que meu sistema é ativado. Se eu puder fazer com que isso funcione, posso simplesmente colocar meu computador em repouso, reativá-lo e fazer com que o teclado funcione novamente. 2) (preferencial) Como eu realmente corrijo este problema?

Mais detalhes sobre a situação que eu preciso para responder 2) Devido à aleatoriedade desse problema, não sei quando esse problema começou. Eu sei que existe no Debian Unstable e Testing mas não Stable. Ele também existe no curret Arch linux, mas não antes de novembro de 2012. Meu sistema é um Lenovo w520.

Observe também: Este é um pouco de heisenbug, como tal, eu não seria capaz de aceitar uma resposta até que ela funcionasse por alguns dias.

Mais esclarecimentos: Quando isso acontece, eu não consigo mudar para nenhum dos tty # s, então nenhum console não funciona. Eu também tentei o "Raising Skinny Elephants é Totalmente chato" combo e isso não funciona ... Depois de postar vou verificar se isso funciona quando o meu teclado é funcional. É muito aleatório, às vezes vai ficar bem por alguns dias e bam meu teclado não funciona.

    
por kporter 04.04.2013 / 05:49

1 resposta

2

A razão pela qual seu script não funciona no gancho de retomada é que ele não sabe com qual servidor X conversar. Você precisa definir a variável de ambiente DISPLAY e talvez XAUTHORITY também. Consulte Can Eu inicio um programa gráfico na área de trabalho de outro usuário como root? para mais explicações.

Aqui está um snippet de shell que executa o comando desejado em todas as exibições ativas.

if [ "${1}" = "resume" ] && [ "${2}" != "standby" ]; then
  for p in $(ps -C Xorg -o pid=); do
    </proc/$p/cmdline awk -v RS='
if [ "${1}" = "resume" ] && [ "${2}" != "standby" ]; then
  for p in $(ps -C Xorg -o pid=); do
    </proc/$p/cmdline awk -v RS='%pre%' '/^:[0-9]$/ {print} $0=="-auth" {getline; print}' | {
        read DISPLAY; export DISPLAY
        read XAUTHORITY && export XAUTHORITY || unset XAUTHORITY
        setxkbmap -rules evdev -layout us -model evdev
     }
  done
fi
' '/^:[0-9]$/ {print} $0=="-auth" {getline; print}' | { read DISPLAY; export DISPLAY read XAUTHORITY && export XAUTHORITY || unset XAUTHORITY setxkbmap -rules evdev -layout us -model evdev } done fi
    
por 08.04.2013 / 03:52