2017-02-16 18 views
1

キーボードをラズベリーパイに接続すると、コードを実行しようとしています。私は現在、Rasbian Jessieをインストールしています(おそらく最新バージョンですか?)。私は私の研究を通して、USBデバイスがLinuxマシンに接続されたときにイベントを引き起こすために "udev"を使うべきであることを発見しました。Raspbian Jessie:USBデバイスを接続すると、udevがトリガーされない

これをテストするには、キーボードをプラグインする(ブラウザのコマンドをラズベリーpiの端末に接続していても動作させるコマンドがプラグインされていれば)ブラウザを開く必要があります。私はlsusbコマンドからidVendorを得た

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

Bus 001 Device 027: ID 413c:2105 Dell Computer Corp. Model L100 Keyboard

しかし、私は戻って何も起こりません、私のキーボードで&プラグを抜いたとき、私は、次のファイル/etc/udev/rules.d/keyboard.rulesを作成しました。

私が試した他に何:

  • がkeyboard.rulesがしようとすると(スクリプトRUN+='/home/pi/test.sh'を実行持つコマンドにsudo udevadm control --reload
  • を実行するコマンドsudo udevadm control --reload-rules
  • を実行ラズベリーパイ
  • を再起動します実行可能に設定されています)。
  • F1(コンソール)とF7(GUIデスクトップ)だけがアクティブですが、異なるデスクトップ(Crl + Alt + F1 - F12を押す)を確認してください。 (私のキーボード用ATTRSのすべてを与える)udevadm info -a -p $(udevadm info -q path -n /dev/input/event0)
  • を実行して、idVendorを確認
  • udevは私がキーボード
  • に差し込んだとしても、 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が何かをするために取得することができていません。

コマンド/スクリプトを実行しようとしているかどうかを確認できるログがありますか?このスクリプトを監視する別の方法はありますか?このスクリプトをテストするもう1つの方法はありますか?実際にはUSBデバイスを実際に接続しなくても実行できるのですか?

+0

私が作成しました次のようなスクリプトcontroller_retropi.shがあります。 –

+0

私は、次のようなスクリプトcontroller_retropi.shを作成しました: '#!/ bin/sh epiphany --display =:0 http://www.google.com ' (それが実行できるように777にchowning) 私の' keyboard.rules'を今更新しました: 'ACTION ==、 "追加" ATTRS {idVendor} == "413C"、RUN + = "/ binに/ 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を実行しようとしていたようです。だから私は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 

このコードは正しく動作します。しかし、私は次のエラーを得ました「root」とします。明らかに「ルート」はディスプレイにアクセスできない。ターミナルからコマンドを実行すると、ディスプレイにアクセスできるユーザー "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

関連する問題