diff --git a/cec.sh b/cec.sh index 54dbaf0..7876c00 100755 --- a/cec.sh +++ b/cec.sh @@ -1,15 +1,13 @@ #!/bin/bash tv_on() { - cec-ctl --to 0 --image-view-on - #xrandr --output HDMI-A-0 --mode 1920x1080 - xrandr --output HDMI-A-0 --auto; sleep 3; xrandr --output HDMI-A-0 --mode 1920x1080 + echo "on 0" > /run/cec.fifo echo "on">~/scripts/PJ/tv_state curl -X POST -d '' $REPORT_TV_ON } tv_off() { - cec-ctl --to 0 --standby + echo "standby 0" > /run/cec.fifo echo "off">~/scripts/PJ/tv_state curl -X POST -d '' $REPORT_TV_OFF } diff --git a/nix/cec.nix b/nix/cec.nix new file mode 100644 index 0000000..6251fa5 --- /dev/null +++ b/nix/cec.nix @@ -0,0 +1,33 @@ +{ pkgs, ... }: +{ + boot.kernelModules = [ "cec" ]; + + environment.systemPackages = with pkgs; [ + libcec + ]; + + services.udev.extraRules = '' + # Pulse-Eight CEC adapter + SUBSYSTEM=="tty" ACTION=="add" ATTRS{manufacturer}=="Pulse-Eight" ATTRS{product}=="CEC Adapter" GROUP="video" MODE="0660" + ''; + + systemd.sockets."cec-client" = { + wantedBy = [ "sockets.target" ]; + socketConfig = { + ListenFIFO = "/run/cec.fifo"; + SocketGroup = "video"; + SocketMode = "0660"; + }; + }; + + systemd.services."cec-client" = { + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = ''${pkgs.libcec}/bin/cec-client -d 1 -o /dev/ttyACM0''; + ExecStop = ''/bin/sh -c "echo q > /run/cec.fifo"''; + StandardInput = "socket"; + StandardOutput = "journal"; + Restart = "on-failure"; + }; + }; +}