jscommand.tar.gzのお礼とフィードバッ... 投稿者:yasuo 投稿日:2017/04/01(Sat) 02:52 No.2212 | |
|
はじめまして。
ジョイスティックでコマンド実行する方法を探していたら以下の記事にたどり着き、 公開されていたツールを使わせていただきました。 https://www.mztn.org/rpi/rpi41.html とても便利なものを共有いただき、ありがとうございました。
以下はご参考までにですが。 当方は mpg321 を使ってバックグラウンドで音楽を流す用途で使おうとしましたが、 そのまま使うと exec() の f:read で応答待ちで止まってしまって、他のコマンド (killall mpg321など)を受け付けない状態となってしまいました。 これに対して以下のようにバックグラウンド実行の場合は f:read しないように 修正をかけて使わせていただこうと思います。
============================================================= --- jsCommand.lua.org 2017-04-01 00:42:48.491185885 +0900 +++ jsCommand.lua 2017-04-01 02:36:33.577576938 +0900 @@ -213,6 +213,10 @@ function exec(command) local f = io.popen(command .. " 2>&1", "r") if f ~= nil then + if string.find(command, "&") ~= nil then + -- print("* command was executed at background.") + return nil + end local result = f:read('*a') -- read output f:close() return result ============================================================= |
| Re: jscommand.tar.gzのお礼とフィード... yasuo - 2017/04/03(Mon) 00:36 No.2213 | |
|
|
補足です。 当方の環境では jsCommand.lua のテストモード(-d)はうまく動作したのですが、 udev 経由で呼び出されると 30 秒のタイムアウト後プロセスが停止されてしまいました。 このため systemd 経由で呼び出されるように修正して使うことにしました。 今のところOS再起動およびジョイスティックの数回の抜き差しでも問題なく動いているようです。
systemd, udev, lua はここ数日で初めて触ったので、正しい方法かは確認しきれてません…。 (もう少し良い書き方がありそうな気がします)
■ 環境情報 ・ハードウェア Raspberry Pi 2 Model B ・バージョン $ cat /etc/debian_version 8.0 $ uname -a Linux raspberrypi 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux
■ 以下は追加・修正したスクリプト ============================================================= $ cat /etc/systemd/system/rc-js.service [Unit] Description=JoyStick Command Service Requires=dev-input-js0.device After=dev-input-js0.device
[Service] Type=simple ExecStart=/usr/local/bin/js_start.sh ============================================================= $ cat /etc/udev/rules.d/70-jscom.rules ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="js*",\ GROUP="usb", TAG+="systemd",\ ENV{SYSTEMD_WANTS}+="rc-js.service"
ACTION=="remove", SUBSYSTEMS=="usb", KERNEL=="js*",\ RUN:="/usr/local/bin/js_stop.sh" ============================================================= $ cat /usr/local/bin/js_start.sh #!/bin/sh
echo "Trying stop old jsCommand.lua process..." killall jsCommand.lua echo "Staring jsCommand.lua" /usr/local/bin/jsCommand.lua -c ============================================================= $ cat /usr/local/bin/js_stop.sh #!/bin/bash
echo "Stopping jsCommand.lua process..." | logger -t js_stop.sh killall jsCommand.lua
CHECK_PS=`ps aux | grep jsCommand.lua | grep -v grep` if [ x"${CHECK_PS}" == x ] then echo "jsCommand.lua stopped successfully" | logger -t js_stop.sh else echo "jsCommand.lua is NOT stopped, check processes: ${CHECK_PS}" | logger -t js_stop.sh
fi |
| Re: jscommand.tar.gzのお礼とフィード... jun - 2017/04/04(Tue) 01:11 No.2214 | <Home> |
|
|
ありがとうございます。
お返事の前に yasuoさんのご指摘を含めて、新版の https://www.mztn.org/rpi/rpi50.html を作成中でした。 4/4 中にも公開するように予定しています。
yasuoさんの最初のご指摘で、ひさしぶりにゲームパッドを試していましたが、 実は同じことに気づきました。というか、前から怪しいと思っていました。 早くお返事をしなかったため、お手を煩わせてしまいました。 申し訳ありません。
私の考えていた対策は以下の様なものです。led.lua は jsCommand.lua の動作確認用に 基板上のACT&PWR LEDを5秒間点滅させるものです。作成中の rpi50.html で led.lua を含めて、Pi2_Pi3用とPiB+_PiZero用をダウンロードできるようにします。
--------------------------------------- install.sh --------------------------------------- cp -a ./jsCommand.lua /usr/local/bin cp -a ./led.lua /usr/local/bin cp -a ./jscom.service /etc/systemd/system/ cp -a ./70-jscom.rules /etc/udev/rules.d/ systemctl daemon-reload
--------------------------------------- 70-jscom.rules --------------------------------------- ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="js*",\ TAG+="systemd", ENV{SYSTEMD_WANTS}+="jscom.service"
--------------------------------------- jscom.service --------------------------------------- [Unit] Description = jsCommand StopWhenUnneeded=yes
[Service] ExecStartPre = -/usr/bin/killall jsCommand.lua ExecStart = /usr/local/bin/jsCommand.lua -c & ExecStop = -/usr/local/bin/killall jsCommand.lua Type = simple
[Install] WantedBy=multi-user.target ---------------------------------------
ゲームパッドを抜き差しした時の確認は systemctl status jscom.service で行います。
ご意見があればよろしくお願いします。 |
| Re: jscommand.tar.gzのお礼とフィード... jun - 2017/04/04(Tue) 01:26 No.2215 | <Home> |
|
|