SupaCEC - A utility to switch TV inputs when a controller is connected
-
OK, this definitely works! ;)
ACTION=="add", SUBSYSTEM=="input", RUN+="/bin/bash -c 'echo as | /usr/bin/cec-client -s -d 1'"
The problem was either the nested apostrophes or missing PATH. I don't want to annoy the person watching the tv, so you'll need to test, but the above line worked for me. I assume it executed the command three times, however, so refining is a good idea.
This filter works for my DS3 controller causing it to execute once:
ACTION=="add", SUBSYSTEM=="input", KERNEL=="js[0-9]*", RUN+="/bin/bash -c 'echo as | /usr/bin/cec-client -s -d 1'" -
Ok finally found a simple solution working here, if anybody could test :
First install cec-utils :
sudo apt-get install cec-utils
Create a /etc/udev/rules.d/10-cec.rules with this line:
ACTION=="add", KERNEL=="js0", SUBSYSTEM=="input", RUN+="/bin/bash -c '/bin/echo as | /usr/bin/cec-client -s -d 1'"
Note the rule will match only for the first controller (js0) and execute only once, and also note the full path to binaries.
Reload udev rules :
sudo udevadm control --reload-rules
When you plug the first controller, the tv should switch to retropie.
I tested it with (wireless) PS3 controller and USB arcade stick.@psyke83
I was so concentrated testing things that I missed your post. Congrats, you found it first :)
The good thing is we both came to the same conclusions. -
Awesome @Sano and @psyke83! I haven't had a chance to test this yet, but I like where this was headed and wanted to formalize something. I'll hopefully test it tonight, in the meantime if anyone wants to look it over https://github.com/superterran/SupaCEC/tree/refactoring-to-udev-rule
-
The script seems to work fine* - except for unnecessary sudo invocations - on my DS3 controller. The previous test only switched to the Pi when the tv was off, but yours will also switch HDMI inputs when the tv is on.
- until you merge changes to the master branch, users need to specify the "refactoring-to-udev-rule" branch both in the curl instruction and manually appended to the gitPullOrClone line.
Edit: hmm, the first test worked, but second test after waiting for controller to timeout didn't switch inputs.
-
I've done further testing and come to the conclusion that cec-client only works reliably when a single command is invoked.
Your script appears to send the two commands simultaneously per line - the "pause" & switch source command, but both of your rules match my DualShock 3, which means it's 4 commands being sent at once.
The behaviour is unpredictable with your version; sometimes the tv will switch source and sometimes not. With my simpler version, it works more reliably, but it doesn't always work, especially after first boot. I have Kodi configured to start on boot, so it may be interfering somehow.
ACTION=="add", SUBSYSTEM=="input", KERNEL=="js[0-9]*", RUN+="/bin/bash -c 'echo as | /usr/bin/cec-client -s -d 1'"
-
@meleu :
(Screaming like a movie character with fists toward the sky)
Nooooooo ! Whyyyyyyy ? -
@Sano yo! Whats up doc?! :-)
-
@meleu It's my new (totally natural and not overacting) reaction to a downvote :)
I wish we had PM here...
Sorry ! -
@Sano OMG dude! Sorry! It was an accident (I was on the Android phone). You deserve an upvote!
I'm looking for a free time to join this conversation/development here. I'm interested!
-
Hello fellows.
I would like to say thanks! The
cec-utils
package is pretty handy. The udev rules are perfect!The only addition I've made on my arcade build was adding a
turn off monitor.sh
script in RetroPie Menu.#!/bin/bash # turn off monitor.sh ################# # Actually puts the monitor on stand by mode. echo standby 0 | cec-utils -s -d 1
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.