2017-02-16 2 views
1

키보드를 내 Raspberry Pi에 연결할 때마다 (스크립트에서 선호하는) 일부 코드를 실행하려고합니다. 현재 Rasbian Jessie가 설치되어 있습니다 (아마도 최신 버전입니까?). 내 연구를 통해 USB 장치가 Linux 컴퓨터에 연결될 때 "udev"를 사용하여 이벤트를 트리거해야 함을 발견했습니다.Raspbian Jessie : USB 장치를 꽂을 때 udev가 실행되지 않습니다

키보드를 플러그인 할 때마다 브라우저를 열어보고 싶습니다. (실행하려고하는 명령은 내 모니터를 연결 한 라즈베리 파이의 터미널에서 작동합니다.)

ACTION=="add",ATTRS{idVendor}=="413c",RUN+="epiphany --display=:0 http://www.google.com"

나는 lsusb 명령에서 idVendor을 가지고 : 나는 다음과 같은 파일 /etc/udev/rules.d/keyboard.rules 만든 Bus 001 Device 027: ID 413c:2105 Dell Computer Corp. Model L100 Keyboard

을하지만 내 키보드에 & 플러그 다시 분리 할 때 아무 반응이 없습니다.

내가 해봤 다른 무엇 :

  • 가 keyboard.rules 시도하고 (스크립트 RUN+='/home/pi/test.sh'를 실행하는 데 명령을 sudo udevadm control --reload
  • 실행 명령 sudo udevadm control --reload-rules
  • 실행하기 라즈베리 파이
  • 를 다시 시작 실행 가능한 것으로 설정되었습니다).
  • F1 (콘솔) 및 F7 (GUI 데스크탑) 만 활성화되어 있지만 다른 "데스크톱"(Crl + Alt + F1 - F12)을 확인하십시오. 나는 키보드
  • 에 연결하고 있습니다로
  • udev가이 (가) "추가"보고 있는지 확인합니다 (키보드 나에게 바인드합니다 모두를 제공하는) udevadm info -a -p $(udevadm info -q path -n /dev/input/event0)을 실행하여 idVendor 확인
  • udevadm monitor & udevadm monitor --property을 실행하여 올
  • udevadm test $(udevadm info -q path -n /dev/input/event0)으로 테스트하십시오. 여기에는 다음과 같은 정보가 표시됩니다 : 당신이 아래로 스크롤 경우 run: 'epiphany --display=:0 http://www.google.com'을 볼
 
    calling: test 
    version 215 
    This program is for debugging only, it does not run any program 
    specified by a RUN key. It may show incorrect results, because 
    some values may be different, or not available at a simulation run. 

    load module index 
    Network interface NamePolicy= disabled on kernel commandline, ignoring. 
    timestamp of '/etc/systemd/network' changed 
    timestamp of '/lib/systemd/network' changed 
    Parsed configuration file /lib/systemd/network/99-default.link 
    Created link configuration context. 
    timestamp of '/etc/udev/rules.d' changed 
    timestamp of '/lib/udev/rules.d' changed 
    read rules file: /lib/udev/rules.d/10-local-rpi.rules 
    read rules file: /etc/udev/rules.d/40-scratch.rules 
    read rules file: /lib/udev/rules.d/42-usb-hid-pm.rules 
    read rules file: /lib/udev/rules.d/50-bluetooth-hci-auto-poweron.rules 
    read rules file: /lib/udev/rules.d/50-firmware.rules 
    read rules file: /lib/udev/rules.d/50-udev-default.rules 
    read rules file: /lib/udev/rules.d/55-dm.rules 
    read rules file: /lib/udev/rules.d/60-cdrom_id.rules 
    read rules file: /lib/udev/rules.d/60-crda.rules 
    read rules file: /lib/udev/rules.d/60-drm.rules 
    read rules file: /lib/udev/rules.d/60-fuse.rules 
    read rules file: /lib/udev/rules.d/60-gnupg.rules 
    read rules file: /lib/udev/rules.d/60-keyboard.rules 
    read rules file: /lib/udev/rules.d/60-libgphoto2-6.rules 
    read rules file: /lib/udev/rules.d/60-libpisock9.rules 
    read rules file: /lib/udev/rules.d/60-persistent-alsa.rules 
    read rules file: /lib/udev/rules.d/60-persistent-input.rules 
    read rules file: /lib/udev/rules.d/60-persistent-serial.rules 
    read rules file: /lib/udev/rules.d/60-persistent-storage-dm.rules 
    read rules file: /lib/udev/rules.d/60-persistent-storage-tape.rules 
    read rules file: /lib/udev/rules.d/60-persistent-storage.rules 
    read rules file: /lib/udev/rules.d/60-persistent-v4l.rules 
    read rules file: /lib/udev/rules.d/60-triggerhappy.rules 
    read rules file: /lib/udev/rules.d/61-accelerometer.rules 
    read rules file: /lib/udev/rules.d/64-btrfs.rules 
    read rules file: /lib/udev/rules.d/64-xorg-xkb.rules 
    read rules file: /lib/udev/rules.d/69-libmtp.rules 
    read rules file: /lib/udev/rules.d/70-power-switch.rules 
    read rules file: /lib/udev/rules.d/70-uaccess.rules 
    read rules file: /lib/udev/rules.d/71-seat.rules 
    read rules file: /lib/udev/rules.d/73-idrac.rules 
    read rules file: /lib/udev/rules.d/73-seat-late.rules 
    read rules file: /lib/udev/rules.d/75-net-description.rules 
    read rules file: /lib/udev/rules.d/75-persistent-net-generator.rules 
    read rules file: /lib/udev/rules.d/75-probe_mtd.rules 
    read rules file: /lib/udev/rules.d/75-tty-description.rules 
    read rules file: /lib/udev/rules.d/78-sound-card.rules 
    read rules file: /lib/udev/rules.d/80-drivers.rules 
    read rules file: /lib/udev/rules.d/80-net-setup-link.rules 
    read rules file: /lib/udev/rules.d/80-networking.rules 
    read rules file: /lib/udev/rules.d/80-udisks.rules 
    read rules file: /lib/udev/rules.d/80-udisks2.rules 
    read rules file: /lib/udev/rules.d/85-hdparm.rules 
    read rules file: /lib/udev/rules.d/85-hwclock.rules 
    read rules file: /lib/udev/rules.d/85-regulatory.rules 
    read rules file: /lib/udev/rules.d/90-alsa-restore.rules 
    read rules file: /lib/udev/rules.d/95-udev-late.rules 
    read rules file: /lib/udev/rules.d/95-wedo.rules 
    read rules file: /lib/udev/rules.d/97-hid2hci.rules 
    read rules file: /etc/udev/rules.d/99-com.rules 
    read rules file: /lib/udev/rules.d/99-systemd.rules 
    read rules file: /etc/udev/rules.d/keyboard.rules 
    read rules file: /etc/udev/rules.d/test.rules 
    rules contain 393216 bytes tokens (32768 * 12 bytes), 23387 bytes strings 
    23799 strings (190642 bytes), 21572 de-duplicated (169483 bytes), 2228 trie nodes used 
    IMPORT builtin 'input_id' /lib/udev/rules.d/50-udev-default.rules:10 
    capabilities/ev raw kernel attribute: 120013 
    capabilities/abs raw kernel attribute: 0 
    capabilities/rel raw kernel attribute: 0 
    capabilities/key raw kernel attribute: 10000 7 ff9f207a c14057ff febeffdf ffefffff ffffffff fffffffe 
    test_key: checking bit block 0 for any keys; found=1 
    test_key: checking bit block 32 for any keys; found=1 
    test_key: checking bit block 64 for any keys; found=1 
    test_key: checking bit block 96 for any keys; found=1 
    test_key: checking bit block 128 for any keys; found=1 
    test_key: checking bit block 160 for any keys; found=1 
    test_key: checking bit block 192 for any keys; found=1 
    test_key: checking bit block 224 for any keys; found=1 
    GROUP 101 /lib/udev/rules.d/50-udev-default.rules:29 
    IMPORT builtin 'hwdb' /lib/udev/rules.d/60-keyboard.rules:12 
    IMPORT builtin 'hwdb' returned non-zero 
    IMPORT builtin 'hwdb' /lib/udev/rules.d/60-keyboard.rules:20 
    IMPORT builtin 'hwdb' returned non-zero 
    IMPORT builtin 'usb_id' /lib/udev/rules.d/60-persistent-input.rules:7 
    /sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0: if_class 3 protocol 0 
    LINK 'input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd' /lib/udev/rules.d/60-persistent-input.rules:24 
    IMPORT builtin 'path_id' /lib/udev/rules.d/60-persistent-input.rules:31 
    LINK 'input/by-path/platform-3f980000.usb-usb-0:1.2:1.0-event-kbd' /lib/udev/rules.d/60-persistent-input.rules:33 
    RUN '/usr/sbin/th-cmd --socket /var/run/thd.socket --passfd --udev' /lib/udev/rules.d/60-triggerhappy.rules:4 
    GROUP 101 /etc/udev/rules.d/99-com.rules:1 
    MODE 0660 /etc/udev/rules.d/99-com.rules:1 
    RUN 'epiphany --display=:0 http://www.google.com' /etc/udev/rules.d/keyboard.rules:1 
    handling device node '/dev/input/event0', devnum=c13:64, mode=0660, uid=0, gid=101 
    preserve permissions /dev/input/event0, 020660, uid=0, gid=101 
    preserve already existing symlink '/dev/char/13:64' to '../input/event0' 
    found 'c13:64' claiming '/run/udev/links/\x2finput\x2fby-id\x2fusb-Dell_Dell_USB_Keyboard-event-kbd' 
    creating link '/dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd' to '/dev/input/event0' 
    preserve already existing symlink '/dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd' to '../event0' 
    found 'c13:64' claiming '/run/udev/links/\x2finput\x2fby-path\x2fplatform-3f980000.usb-usb-0:1.2:1.0-event-kbd' 
    creating link '/dev/input/by-path/platform-3f980000.usb-usb-0:1.2:1.0-event-kbd' to '/dev/input/event0' 
    preserve already existing symlink '/dev/input/by-path/platform-3f980000.usb-usb-0:1.2:1.0-event-kbd' to '../event0' 
    unable to create temporary db file '/run/udev/data/c13:64.tmp': Permission denied 
    .INPUT_CLASS=kbd 
    ACTION=add 
    BACKSPACE=guess 
    DEVLINKS=/dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd /dev/input/by-path/platform-3f980000.usb-usb-0:1.2:1.0-event-kbd 
    DEVNAME=/dev/input/event0 
    DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:413C:2105.0014/input/input23/event0 
    ID_BUS=usb 
    ID_INPUT=1 
    ID_INPUT_KEY=1 
    ID_INPUT_KEYBOARD=1 
    ID_MODEL=Dell_USB_Keyboard 
    ID_MODEL_ENC=Dell\x20USB\x20Keyboard 
    ID_MODEL_ID=2105 
    ID_PATH=platform-3f980000.usb-usb-0:1.2:1.0 
    ID_PATH_TAG=platform-3f980000_usb-usb-0_1_2_1_0 
    ID_REVISION=0352 
    ID_SERIAL=Dell_Dell_USB_Keyboard 
    ID_TYPE=hid 
    ID_USB_DRIVER=usbhid 
    ID_USB_INTERFACES=:030101: 
    ID_USB_INTERFACE_NUM=00 
    ID_VENDOR=Dell 
    ID_VENDOR_ENC=Dell 
    ID_VENDOR_ID=413c 
    MAJOR=13 
    MINOR=64 
    SUBSYSTEM=input 
    USEC_INITIALIZED=78790607 
    XKBLAYOUT=us 
    XKBMODEL=pc105 
    XKBOPTIONS=terminate:ctrl_alt_bksp 
    XKBVARIANT= 
    run: '/usr/sbin/th-cmd --socket /var/run/thd.socket --passfd --udev' 
    run: 'epiphany --display=:0 http://www.google.com' 
    unload module index 
    Unloaded link configuration context. 

합니다. 그래서 그것이 효과가 있다고 믿게합니다.

하지만 난 아무것도 할 udevadm trigger를 얻을 수 없었다

&가 .... 다시 아무것도에서 일어나는 내 키보드를 연결 분리 (시도 다중 경로 및 다른 입력을하지만, 그냥 아무 것도 반환하지 않습니다) 때 .

내 명령/스크립트를 실행하려고하는지 확인할 수있는 일종의 로그가 있습니까? 이 스크립트를 모니터링하는 또 다른 방법이 있습니까? 이 스크립트를 테스트 할 다른 방법이있어서 실제로 USB 장치를 연결하지 않고도이 스크립트가 실행되는 것을 실제로 볼 수 있습니까?

+0

다음을 포함하는 스크립트 controller_retropi.sh : –

+0

다음을 포함하는 controller_retropi.sh 스크립트를 만들었습니다 : '#!/bin/sh epiphany --display = : 0 http://www.google.com ' (실행할 수 있도록 777에 chowning) 이제'keyboard.rules'을 다음과 같이 업데이트했습니다 : 012// bash /home/pi/scripts/controller_retropi.sh & "' 나는'sudo 명령을 다시 실행했다. 'udevadm control --reload-rules'을 사용하여 규칙을 새로 고치고'udevadmin test $ (udevadm info -q path -n/dev/input/event0)'로로드 된 것을 두 번 확인했습니다. 아직 운이 없습니다. –

+0

나는 또한'sudo udevadm trigger -v -c add -a idVendor = 413c'에서 트리거를 사용하는 방법을 알아 냈습니다. 그리고 내가 장치를봤을 때 모니터를보고 그것을 볼 수 있습니다. 그러나 RUN 명령은 여전히 ​​트리거되지 않습니다 ..... –

답변

1

Are there some sort of logs that I can check to see if it's trying to run my command/script? Is there another way to monitor this script?

this 실을 찾은 후 난 당신이 /var/log/syslog 파일에있는 시스템 로그 파일에 udev에 로그를 볼 수 있었다 발견했다. 이렇게하면 기본적으로 오류 만 표시되지만 로그 수준을 "디버그"로 늘리면 모든 것을 볼 수 있습니다. 먼저 udevadm control --log-priority=debug을 실행하고 /etc/udev/udev.conf 파일을 "debug"로 업데이트했습니다.

failed to execute '/lib/udev/epiphany --display=:0 http://www.google.com': No such file or directory : 나는 무엇을 발견

내가 내 키보드를 연결하면 시스템이 다음과 같은 오류를 던질 것이라고했다.

아하하/lib/udev 폴더에서 주현절을 실행하려했던 것 같습니다. 그래서 나는 epiphany에 올바른 파일 경로를 실행하기 위해 코드를 다시 업데이트했습니다 : /usr/bin/epiphany --display=:0 http://www.google.com. 표시를 찾을 수 없다는 이상했다, 그래서 나는 결국 내가 udev에 모든 것을 실행하는 것을 알아 냈 ... 터미널에 직접 붙여 넣으면

Feb 19 13:44:10 raspberrypi systemd-udevd[6473]: '/usr/bin/epiphany --display=:0 http://www.google.com'(err) 'No protocol specified' 
Feb 19 13:44:10 raspberrypi systemd-udevd[6473]: '/usr/bin/epiphany --display=:0 http://www.google.com'(err) 'Unable to init server: Could not connect: Connection refused' 
Feb 19 13:44:10 raspberrypi systemd-udevd[6473]: '/usr/bin/epiphany --display=:0 http://www.google.com'(out) 'Failed to parse arguments: Cannot open display: :0' 
Feb 19 13:44:10 raspberrypi systemd-udevd[6473]: '/usr/bin/epiphany --display=:0 http://www.google.com' [6479] exit with return code 1 

이 코드가 제대로 작동 :하지만 다음 오류가 발생했습니다 "루트"로. 분명히 "루트"는 디스플레이에 액세스 할 수 없습니다. 터미널을 통해 명령을 실행할 때 디스플레이에 액세스 할 수있는 사용자 "pi"를 사용합니다. 명령에 대한 최종 편집은 /sbin/runuser -l pi -c '/usr/bin/epiphany --display=:0 http://www.google.com'입니다. 그리고 그것은 작동합니다!

현재 작은 딸꾹질은 2 개의 브라우저를 열어 놨지만, 단지 "idVendor"만 검사하고 있기 때문에 USB 장치에 "idVendor"를 공유하는 꽤 많은 아이들이 있다고 생각합니다. 그래서 하나의 키보드가 연결되면 여러 개의 USB 장치를보고 udev 규칙을 여러 번 실행합니다.

Is there another way to test this script so I can actually see it run without actually plugging in a usb device?

나는 위의 의견이 언급,하지만 난 당신이 & 플러그 다시 키보드에서 해제 플러그없이 udev에 명령을 트리거하기 위해 다음 명령을 실행할 수 있습니다 발견 : 내가 만든 sudo udevadm trigger -v -c add -a idVendor=413c

관련 문제