Tornando a regra do udev para teclado bluetooth

5

Estou usando um teclado bluetooth logitech k810 com meu laptop executando o Debian Wheezy. (Eu tenho o teclado trabalhando seguindo este guia .)

Por padrão, as teclas F1-12 são teclas multimídia, a menos que a tecla FN seja pressionada. Eu prefiro que as teclas sejam F1-12 por padrão.

Felizmente esse cara fez um programa que inverte as funções principais. Executando o programa funciona para obter as chaves que eu gosto e sobrevive a reinicialização.

Infelizmente, o programa não sobrevive se eu desligar o teclado e ligá-lo novamente (para economizar energia).

Por esse motivo, estou tentando criar uma regra do udev para executar o programa de inversão de chaves quando o teclado for conectado.

Eu tenho tentado a seguinte solução que é proposta em ambos os links acima. Até agora não está funcionando.

andreas@crunchbang:/etc/udev/rules.d$ cat 00-k810.rules
KERNEL==”hidraw*”, SUBSYSTEM==”hidraw”, ATTRS{address}==”00:1F:20:76:41:30”, RUN+=”/srv/scripts/k810.sh %p”

andreas@crunchbang:/srv/scripts$ cat k810.sh
#! /bin/bash
line='dmesg | grep -i k810 | grep hidraw'
[[ $line =~ (.*)(hidraw+[^:])(.*) ]]
device=${BASH_REMATCH[2]}
/srv/bin/k810_conf -d /dev/${device} -f on

A pasta / srv / bin / contém, de fato, o programa para reversão de chave (k810_conf). Eu não sei exatamente o que o programa faz, mas executá-lo com o script como este funciona:

sudo /srv/scripts/k810.sh

Portanto, o problema tem que estar com o udev não detectando o dispositivo corretamente. O endereço MAC é o que eu recebo se eu fizer:

hcitool scan

... enquanto o teclado está no modo de emparelhamento. É também o que vejo em Blueman.

Não tenho certeza se é relevante, mas essa é a saída de udevadm monitor quando o teclado está ativado:

KERNEL[31976.490290] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/0005:046D:B319.001C
(hid) KERNEL[31976.491464] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/input39
(input) KERNEL[31976.491689] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/input39/event12
(input) KERNEL[31976.491885] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/0005:046D:B319.001C/hidraw/hidraw0
(hidraw) UDEV  [31976.496400] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/0005:046D:B319.001C
(hid) UDEV  [31976.497196] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/input39
(input) UDEV  [31976.499496] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/0005:046D:B319.001C/hidraw/hidraw0
(hidraw) UDEV  [31976.500679] add     
/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/bluetooth/hci0/hci0:12/input39/event12
(input)

Alguma idéia de por que a regra do udev acima não está funcionando - e como posso trabalhar?

    
por MajorBriggs 14.07.2014 / 09:50

1 resposta

2

Pelo menos no meu caso, o problema é que o endereço precisa estar em letras minúsculas! Portanto, no seu caso, altere ATTRS{address}==”00:1F:20:76:41:30” para o seguinte:

ATTRS{address}==”00:1f:20:76:41:30”

Caso isso não aconteça, eu verificarei as permissões.

Além disso, o udev deve definir uma variável DEVNAME (entre outras) que você pode usar, assim você não precisa realmente do grep dos logs (outro possível candidato para um problema de permissão). Para solucionar ainda mais, você pode simplesmente criar um arquivo de log toda vez que o script for executado (a partir do script) - assim, você saberá se o script foi executado - isto é, se a regra do udev for acionada ou se o erro está em algum lugar mais tarde.

Portanto, a solução de script de autores (na página que você já vinculou) é melhor para o IMO. Eu adaptei como tal:

Permissões:

# ls -l /etc/udev/rules.d/50-k810.rules /opt/bin/k810*
-rw-r--r-- 1 root root   106 2014-07-16 19:21 /etc/udev/rules.d/50-k810.rules
-rwxr-xr-x 1 root root   304 2014-07-16 19:39 /opt/bin/k810.sh
-rwxr-xr-x 1 root root 13102 2014-06-07 22:05 /opt/bin/k810_conf

50-k810.rules:

KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{address}=="my:k8:10:ad:re:ss" \
 RUN+="/opt/bin/k810.sh %p"

k810.sh:

#!/bin/sh
LOGFILE=/tmp/logfilek810sh.log
echo "RUN: at 'date' by 'whoami' act $ACTION \ $1 DEVPATH $DEVPATH DEVNAME $DEVNAME" >> ${LOGFILE}
echo "Setting F-keys on for your K810!"

if [ "$ACTION" == "add" ];
then
    # configure k810 ($DEVPATH) at $DEVNAME.
    /opt/bin/k810_conf -d $DEVNAME -f on
fi

Além disso, uma pequena coisa: você pode usar udevadm info -a -n /dev/hidraw1 para obter o endereço correto em vez do hcitool (substitua pelo nome direito). Ele deve coincidir, mas apenas para checar novamente (é assim que eu percebi que o udev está vendo um endereço em letras minúsculas).

    
por 16.07.2014 / 18:36