
Volumio 2.729가 설치된 Rpi4가 있습니다. 키보드 버튼을 눌렀을 때 Triggerhappy를 사용하여 node.js 스크립트를 실행합니다. 스크립트는 해당 인터넷 라디오 방송국을 재생합니다.
module.paths.push('/lib/node_modules');
var io=require('socket.io-client');
var socket= io.connect('http://127.0.0.1:3000');
socket.on('connect',function(){
socket.emit('replaceAndPlay', {"service":"webradio","uri":"http://185.85.28.148:8000"});
});
또한 버튼을 'M' 키와 동시에 누르면 Triggerhappy는 현재 재생 중인 스테이션을 해당 버튼에 바인딩하는 .js 스크립트를 실행합니다. 이는 volumio의 상태를 가져오고 위의 예에서 .js 스크립트의 URI를 바꾸는 방식으로 작동합니다. 해당 버튼에 바인딩되어 있습니다.fs.writeFile().
내 문제는 Triggerhappy가 .js 파일을 덮어쓸 수 없다는 것입니다. 이 스크립트를 터미널에서 수동으로 실행하면 완벽하게 작동합니다.
Triggerhappy를 루트로 실행했지만 도움이 되지 않았습니다. Triggerhappy가 파일을 덮어쓰도록 하려면 어떻게 해야 합니까? 아니면 더 우아한 솔루션이 있습니까?
편집 : 이것은 다음에서 출력됩니다.sudo systemctl 상태 Triggerhappy.service -l
● triggerhappy.service - LSB: triggerhappy hotkey daemon
Loaded: loaded (/etc/init.d/triggerhappy)
Active: active (running) since Thu 2020-04-16 19:58:25 CEST; 4min 44s ago
Process: 640 ExecStart=/etc/init.d/triggerhappy start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/triggerhappy.service
├─ 698 /usr/sbin/thd --daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile /var/run/thd.pid --user volumio /dev/input/event*
├─2415 /usr/sbin/thd --daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile /var/run/thd.pid --user volumio /dev/input/event*
├─2416 sh -c node /home/volumio/node-stream/play_uri_1-node.js
├─2417 node /home/volumio/node-stream/play_uri_1-node.js
├─2636 /usr/sbin/thd --daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile /var/run/thd.pid --user volumio /dev/input/event*
├─2637 sh -c node /home/volumio/node-stream/play_uri_2-node.js
└─2638 node /home/volumio/node-stream/play_uri_2-node.js
play_uri_x-node.js에 작성하는 스크립트인 memory.js에 대한 항목이 없습니다.
답변1
기본적 triggerhappy
으로 nobody
. 한 가지 해결 방법은 nobody
sudo 파일을 편집하여 특정 명령을 호출할 수 있는 권한을 부여하는 것입니다 . 그러나 루트를 사용할 필요는 없으며 일반 사용자가 스크립트를 실행할 수 있으면 충분합니다.
Triggerhappy 구성에서 스크립트에 대한 정규화된 경로가 있는지 확인하세요.
마지막으로 로그 파일( syslog
, 의 다른 파일도 가능 /var/log
)을 확인하세요.