ラズパイ MJPG streamer サービスデーモン化
UNITファイル
service
sytemd
systemctl
Raspberry Pi
ラズパイ
IT技術
IoT
Raspbian
Ubuntu
debian
linux
web
サービス
デーモン
サービス化
デーモン化
パーミッションエラー
Webカメラ として ラズパイ & MJPG streamer の組み合わせは AIカメラとしても使いやすいし、超便利。
そんな中、サービス化・デーモン化 で Permission denied ( パーミッション エラー ) 。
少し躓いた。
UNIT ファイル の挙動、整理のため、メモ。
< 動作前提環境メモ >
・Raspberry Pi 3 Model B Plus Rev 1.3
・Raspbian GNU/Linux 10 (buster)
・mjpg-streamer が通常動作する環境
・( v4l2-ctl コマンドが 普通に使える状況 )
・普通に使えるUSBカメラ
手順
接続したUSBカメラデバイスIDを取得
v4l2-ctl --list-devices
|
USB2.0 PC CAMERA (usb-3f980000.usb-1.2):
/dev/video0
/dev/video1
" usb-3f980000.usb-1.2 "
これを記録しておく
sudo systemctl list-units -t device
|
以上の結果より USBアドレス に該当する行から デバイスID を取得
以下 1行、カメラのデバイスID を メモっておいた。
sys-devices-*****usb-3f980000.usb-****
UNIT ファイル編集内容
[Unit]
# たてるサービスの説明
Description=MJPEG-Streamer
After=udev.target
After=sound.target
After=syslog.target
# 上記で取得したカメラのデバイスIDをこちらへ反映する
BindsTo=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
After=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
[Service]
type=simple
# mjpg ストリーマー 起動コマンド。パスワードなど オプションはお好みで変更
ExecStart=/usr/local/bin/mjpg_streamer -i 'input_uvc.so -f 20 -d /dev/video0 -r 640x480 -n -y' -o 'output_http.so -w /var/www -p 18880'
[Install]
WantedBy=multi-user.target
WantedBy=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
# 末尾のこの項目も一応 デバイスIDを反映しておく
|
(今日の つまずき ポイント)
ただし、service UNITファイルにたいして root権限のままでは、動作できないので注意。(状況によって)
生成した UNITファイルの 権限変更を行う。
たとえば mstuser に 権限を与えたければ、
sudo chown mstuser:mstuser /etc/systemd/system/mjpgStreamer.service
|
( pi ユーザーがよければ、上記 ユーザー名 グループ名は適宜修正してください )
最後に サービスデーモン化
systemctl enable mjpgStreamer.service
|
これで sudo しなくても MJPG - streamer サーバー が起動・ 実行できた!
参考
:Raspberry PiでUSB Web CAMの動画を配信する ~mjpg-streamer自動化編~