アレコレ・ティプス

これ便利だな〜と思ったことなど

ラズパイ MJPG streamer サービスデーモン化

Webカメラ として ラズパイ & MJPG streamer の組み合わせは AIカメラとしても使いやすいし、超便利。
 
そんな中、サービス化・デーモン化 で Permission denied ( パーミッション エラー ) 。
少し躓いた。
UNIT ファイル の挙動、整理のため、メモ。
 
 

f:id:asuki_y:20200514173655p:plain

MJPG-streamer
 

 
 

< 動作前提環境メモ >

 
Raspberry Pi 3 Model B Plus Rev 1.3
・Raspbian GNU/Linux 10 (buster)
・mjpg-streamer が通常動作する環境
・( v4l2-ctl コマンドが 普通に使える状況 )
・普通に使えるUSBカメラ
vim を使っています。 適宜 お好みの テキストエディタで。
 
 

 

手順

 

接続した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-****
 
 
vim /etc/systemd/system/mjpgStreamer.service
 
 

 
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自動化編~