Search code examples
linuxudev

Handling input device plug/unplug while reading from it


I have a bluetooth remote that is paired with my linux box, when active, this remote is visible at /dev/input/event13.

I have a small C program that open this device and read directly from it, which works fine.

Now, my problem is that this remote goes to sleep after a few minutes of inactivity and /dev/input/event13 disappears. It reappears as soon as I press a key on my remote.

I put the output of udevadm here: https://gist.github.com/9fff2f0d7edef1050060.

I use the following code (small ruby ext I wrote), to read from the device: https://gist.github.com/b403d538eb6a8627e2bd.

I thought of writing an udev rule that would start my program when my remote is added and stop it when it is removed. I read the udev documentation, but I couldn't figure it out how to do it. I'm open for suggestion.


Solution

  • After some digging and a lot of frustration I did the following:

    I put into /etc/udev/rules.d/99-rmote.rules

    KERNEL=="event*", SUBSYSTEM=="input", ACTION=="add|remove", ATTRS{name}=="TiVo Keyboard Remote", RUN+="/home/kuon/handleConnect.rb"
    

    And in handleConnect.rb I check the ACTION environment variable and I start/stop my daemon accordingly. Quite simple in the end and it works well.