
私は 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 を root として実行してみましたが、効果はありませんでした。どうすれば 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
。回避策の 1 つは、nobody
sudo ファイルを編集して特定のコマンドを呼び出す権限を付与することです。ただし、root を使用する必要はなく、スクリプトを実行できる通常のユーザーで十分です。
TriggerHappy 構成で、スクリプトへの完全修飾パスがあることを確認します。
最後に、ログ ファイル ( syslog
、場合によっては/var/log
) を確認してください。