udev LANに接続できませんか?

udev LANに接続できませんか?

私はRaspbian(Bullseye)、Logitech Media Server(LMS)8.2.0、Squeezelite 1.9.9でRPi 4bを実行しています。 USBデバイスが接続されたときにSqueezeliteプロセスを自動的に開始するために、次のudev規則を定義しました。

SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="154e/300a/3", RUN+="/usr/bin/DAC_start.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="154e/300a/3", RUN+="/usr/bin/DAC_stop.sh"

これは私のDAC_start.shスクリプトです。

#!/bin/sh
######### DAC_start.sh #########
date >> /tmp/udev.log
echo "Starting Squeezelite" >> /tmp/udev.log
sleep 5s
/usr/bin/squeezelite -o hw:CARD=ND8006,DEV=0 -D -n MediaPlayer -d all=debug -f /tmp/sq.log | at now
###############################

これは私のDAC_stop.shスクリプトです。

#!/bin/sh
######### DAC_stop.sh #########
date >> /tmp/udev.log
echo "Stopping Squeezelite ..." >> /tmp/udev.log
pkill squeezelite
###############################

手動で(piとrootとして)実行すると、両方のスクリプトがうまく機能します。 SqueezeliteはLMSおよびUSBデバイスに正常に接続され、音楽を再生できます。 USB DACを接続すると、ルールudevも機能しトリガーされます(ログファイルに表示されます)。しかし、squeezeliteが起動すると、udevsqueezeliteは同じLAN、実際には同じマシン上の私のLMSサーバーに接続できないようです。以下はSqueezeliteログファイルです(より重要なメッセージは一番下にあると思いますが、何か見落とした場合に備えて、便宜のためにすべてコピーしました)。

/usr/bin/squeezelite -o hw:CARD=ND8006,DEV=0 -D -n MediaPlayer -d all=debug -f /tmp/sq.log
[16:22:50.362611] stream_init:454 init stream
[16:22:50.362971] stream_init:455 streambuf size: 2097152
[16:22:50.376806] output_init_alsa:936 init output
[16:22:50.377007] output_init_alsa:976 requested alsa_buffer: 40 alsa_period: 4 format: any mmap: 1
[16:22:50.377081] output_init_common:360 outputbuf size: 3528000
[16:22:50.377333] output_init_common:384 idle timeout: 0
[16:22:50.410804] test_open:301 sample rate 1536000 not supported
[16:22:50.410907] test_open:301 sample rate 1411200 not supported
[16:22:50.411049] test_open:301 sample rate 32000 not supported
[16:22:50.411085] test_open:301 sample rate 24000 not supported
[16:22:50.411118] test_open:301 sample rate 22500 not supported
[16:22:50.411151] test_open:301 sample rate 16000 not supported
[16:22:50.411184] test_open:301 sample rate 12000 not supported
[16:22:50.411216] test_open:301 sample rate 11025 not supported
[16:22:50.411249] test_open:301 sample rate 8000 not supported
[16:22:50.411330] output_init_common:426 supported rates: 768000 705600 384000 352800 192000 176400 96000 88200 48000 44100
[16:22:50.500287] output_init_alsa:1002 memory locked
[16:22:50.500456] output_init_alsa:1008 glibc detected using mallopt
[16:22:50.501072] output_init_alsa:1026 unable to set output sched fifo: Operation not permitted
[16:22:50.501080] output_thread:685 open output device: hw:CARD=ND8006,DEV=0
[16:22:50.501156] decode_init:153 init decode
[16:22:50.502046] alsa_open:354 opening device at: 44100
[16:22:50.502132] register_dsd:908 using dsd to decode dsf,dff
[16:22:50.502166] register_alac:549 using alac to decode alc
[16:22:50.502198] register_faad:663 using faad to decode aac
[16:22:50.502229] register_vorbis:385 using vorbis to decode ogg
[16:22:50.502325] register_opus:328 using opus to decode ops
[16:22:50.502361] register_flac:336 using flac to decode ogf,flc
[16:22:50.502392] register_pcm:483 using pcm to decode aif,pcm
[16:22:50.502433] register_mad:423 using mad to decode mp3
[16:22:50.502463] decode_init:194 include codecs:  exclude codecs:
[16:22:50.503117] alsa_open:425 opened device hw:CARD=ND8006,DEV=0 using format: S32_LE sample rate: 44100 mmap: 1
[16:22:50.503159] discover_server:795 sending discovery
[16:22:50.503272] alsa_open:516 buffer: 40 period: 4 -> buffer size: 1764 period size: 441
[16:22:50.503349] discover_server:799 error sending disovery
[16:22:55.504955] discover_server:795 sending discovery
[16:22:55.505246] discover_server:799 error sending disovery
[16:23:00.510091] discover_server:795 sending discovery
[16:23:00.510360] discover_server:799 error sending disovery
[16:23:05.515053] discover_server:795 sending discovery
[16:23:05.515329] discover_server:799 error sending disovery
[16:23:10.519882] discover_server:795 sending discovery
[16:23:10.520185] discover_server:799 error sending disovery
[16:23:15.528387] discover_server:795 sending discovery
[16:23:15.528659] discover_server:799 error sending disovery
[16:23:20.535819] discover_server:795 sending discovery
[16:23:20.536007] discover_server:799 error sending disovery
[16:23:25.541079] discover_server:795 sending discovery
[16:23:25.541333] discover_server:799 error sending disovery
[16:23:30.549470] discover_server:795 sending discovery
[16:23:30.549640] discover_server:799 error sending disovery
[16:23:35.559568] discover_server:795 sending discovery
[16:23:35.559857] discover_server:799 error sending disovery
[16:23:40.568356] discover_server:795 sending discovery
[16:23:40.568646] discover_server:799 error sending disovery
[16:23:45.576730] discover_server:795 sending discovery
[16:23:45.577009] discover_server:799 error sending disovery
[16:23:50.586202] discover_server:795 sending discovery
[16:23:50.586502] discover_server:799 error sending disovery
[16:23:55.596574] discover_server:795 sending discovery
[16:23:55.596872] discover_server:799 error sending disovery
[16:24:00.604989] discover_server:795 sending discovery
[16:24:00.605269] discover_server:799 error sending disovery
[16:24:05.615978] discover_server:795 sending discovery
[16:24:05.616278] discover_server:799 error sending disovery
[16:24:10.625168] discover_server:795 sending discovery
[16:24:10.625472] discover_server:799 error sending disovery
[16:24:15.633952] discover_server:795 sending discovery
[16:24:15.634246] discover_server:799 error sending disovery
[16:24:20.642357] discover_server:795 sending discovery
[16:24:20.642648] discover_server:799 error sending disovery
[16:24:25.650821] discover_server:795 sending discovery
[16:24:25.651113] discover_server:799 error sending disovery
[16:24:30.662745] discover_server:795 sending discovery
[16:24:30.663055] discover_server:799 error sending disovery
[16:24:35.670289] discover_server:795 sending discovery
[16:24:35.670566] discover_server:799 error sending disovery
[16:24:40.674134] discover_server:795 sending discovery
[16:24:40.674460] discover_server:799 error sending disovery
[16:24:45.679650] discover_server:795 sending discovery
[16:24:45.679984] discover_server:799 error sending disovery
[16:24:50.689070] discover_server:795 sending discovery
[16:24:50.689366] discover_server:799 error sending disovery
[16:24:55.697415] discover_server:795 sending discovery
[16:24:55.697709] discover_server:799 error sending disovery
[16:25:00.705845] discover_server:795 sending discovery
[16:25:00.706128] discover_server:799 error sending disovery
[16:25:05.714279] discover_server:795 sending discovery
[16:25:05.714583] discover_server:799 error sending disovery
[16:25:10.723306] discover_server:795 sending discovery
[16:25:10.723601] discover_server:799 error sending disovery
[16:25:15.728709] discover_server:795 sending discovery
[16:25:15.728977] discover_server:799 error sending disovery

Squeezeliteが起動時にudevLANにアクセスできないようですか?また、-s 192.168.1.20パラメータ(私のLMSのIP)を使ってSqueezeliteを起動してみましたが、成功しませんでした。それでもLMSサーバーに接続できません。何が間違っているのか、どんなアイデアがありますか?

私はpiCore OS(Tiny Core Linuxディストリビューション)があるRPiで上記の方法を使用しましたが、魔法のように動作しました...

ベストアンサー1

からman udev

実行{タイプ}

[...]

タイプによっては、特定のイベントのすべてのルールが処理され、実行するプログラムのリストにプログラムが追加されます。

これは、非常に短期的に実行されるフォアグラウンドジョブでのみ使用できます。長期実行イベントプロセスは、そのデバイスまたはスレーブデバイスに対するすべての追加イベントをブロックできます。

デーモンや他の長期実行プロセスを開始することはudevには適していません。切り離されたかどうかにかかわらず、分岐されたプロセスはイベント処理が完了した後に無条件に終了します。

したがって、LANにアクセスできるとしても(udevがやや制限されたプロセスを実行している環境では難しいかもしれません)、キューライトのようなものを起動および停止する正しい方法ではありません。

たとえば、以下のシステムサービスを試してみてください。この回答

おすすめ記事